Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

hack errank challenge

Name: Anonymous 2017-01-08 15:19

Name: Anonymous 2017-01-08 15:30

maybe you could use minimax, there's 100 options and soemthing like 10 steps so only 10^100 possibilities to brute force

Name: Alyssa P. Hacker 2017-01-08 16:01

Given n steps and m dollars, bet m / (n / 2) dollars every round.

Name: Alyssa P. Hacker 2017-01-08 16:12

Let me rephrase:

If the scotch is n steps away and you have m dollars remaining, then the default bet size for this round is m / n dollars.

Name: Anonymous 2017-01-09 3:24

>>2
Total unique states would be around 11^(100^2) * 2 i think (11-scotch states, each player can have 100$, *2 is advantage A/B for tied bids), but it does drop fairly quickly. No data storage between turns either lol

a.p.h
m/(n/2) will run out of cash too quickly
m/n isn't as bad, but still probably will be beat by a bit of strategy (dropping 20 on each of the four first turns isn't the best, op(ponent) has 21 to trump the last bid, and can cut down your remainder in a few moves)

Name: Anonymous 2017-01-09 3:53

js bidsim

<html>
<head>

</head>
<body>
<div id="stdo" onclick = "stepX();">Begin</div>
<script>

var myout = document.getElementById("stdo");

var b1=100, b2=100, loc=5, v1=[], v2 = [], adv = true;

var acount = false;

function reset(){

b1=100; b2=100; loc=5; v1=[]; v2 = []; adv = acount; acount = !acount;

showout(" ");

}

//myout.innerHTML += "HI!!!";

function stepX(){

var ba = playMoveD(1+acount, loc, v1, v2);

var bb = playMoveF(1+!acount, loc, v1, v2);

var p1 = (ba > bb) + (((ba==bb) + adv) == 2);

var p2 = (ba < bb) + (((ba==bb) + !adv) == 2);

if(ba == bb) adv = !adv;

v1.push(ba);

v2.push(bb);

loc += p2-p1;

b1 -= ba*p1;

b2 -= bb*p2;

showout(ba + " vS " + bb + " || bal " + b1 + " vS " + b2 + " || loc " + loc);

if(loc == 0 || loc == 10 || b1 < 1 || b2 < 1 ) reset();

}

function showout(zstr){

myout.innerHTML += "<br>" + zstr;

}

function playMove(x, y, z, h) {

var mbal = 100, mwin = 0;
var opbal = 100, opwin = 0;
var baldif = 0, windif = 0, coredif = 0;
var cm = 0;

var z2 = z, h2 = h;

var mcore = 0, opcore = 0;
var bid = 0;

var wob = Math.random()*0;

var advA = true;

cm = z2.length; //(z[0] > 0)+z.length - 1;

for(var i=0; i<cm; i++){
//console.log(loop[i] + "\n");

var mb = (z2[i] > h2[i]) + (((z2[i] == h2[i]) + advA) == 2);

var pb = (z2[i] < h2[i]) + (((z2[i] == h2[i]) + !advA) == 2);

if(z2[i] == h2[i]) advA = !advA;

if(x==1){

mbal -= z2[i]*mb;

opbal -= h2[i]*pb;

mwin += mb;

opwin += pb;

} else {

opbal -= z2[i]*mb;

mbal -= h2[i]*pb;

opwin += mb;

mwin += pb;

}

}

baldif = mbal - opbal;
windif = mwin - opwin;

mcore = mbal / (7 - windif) ;
opcore = opbal / (7 + windif);
coredif = mcore - opcore;

//showout(x + ":" + mcore +"v"+opcore + "::" +mbal +"V" + opbal + " " + (x==1) + " " + (x==2) + " " + windif);

bid = Math.round(mcore + wob);

if(coredif < 0)
bid = Math.round(opcore + wob);

if(mbal < bid) bid = Math.floor(mcore)+1;
if(mbal == 0) bid = 0;

//console.log(bid);

return bid;

}

function rmin(x1, y1){
return(x1<y1?x1:y1);
}

function rmax(x1, y1){
return(x1>y1?x1:y1);
}

function playMoveE(x, y, z, h) {

var mbal = 100, mwin = 0;
var opbal = 100, opwin = 0;
var baldif = 0, windif = 0, coredif = 0;
var cm = 0;
var z2 = z, h2 = h;
var mcore = 0, opcore = 0;
var bid = 0;

var advN = (x==1);

var advA = true;

var param1 = 5;

cm = z2.length; //(z[0] > 0)+z.length - 1;

for(var i=0; i<cm; i++){
//console.log(loop[i] + "\n");

var mb = (z2[i] > h2[i]) + (((z2[i] == h2[i]) + advA) == 2);

var pb = (z2[i] < h2[i]) + (((z2[i] == h2[i]) + !advA) == 2);

if(z2[i] == h2[i]) advA = !advA;

if(x==1){

mbal -= z2[i]*mb;

opbal -= h2[i]*pb;

mwin += mb;

opwin += pb;

} else {

opbal -= z2[i]*mb;

mbal -= h2[i]*pb;

opwin += mb;

mwin += pb;

}

}

advX = (advN==advA);

baldif = mbal - opbal;

windif = mwin - opwin;

var balrat = (mbal+1) / (opbal+1);

var winrat = (mwin+1) / (opwin+1);


//console.log(mbal);

mcore = mbal / (param1 - windif);
opcore = opbal / (param1 + windif);
coredif = mcore - opcore;

showout(x + ":" + mcore +"v"+opcore + "::" +mbal +"V" + opbal + " " + (x==1) + " " + (x==2) + " " + coredif);

bid = Math.round( rmin(mcore, opcore) - advX + coredif);


if(mbal < bid) bid = Math.floor(mcore) + 1;
if(mbal == 0) bid = 0;

//console.log(bid);

return bid;

}

function playMoveF(x, y, z, h) {

var mbal = 100, mwin = 0;
var opbal = 100, opwin = 0;
var baldif = 0, windif = 0, coredif = 0;
var z2 = z, h2 = h;
var mcore = 0, opcore = 0;
var bid = 0;

var advN = (x==1);
var advA = true;

var param1 = 5;

var cm = z2.length; //(z[0] > 0)+z.length - 1;

for(var i=0; i<cm; i++){

var mb = (z2[i] > h2[i]) + (((z2[i] == h2[i]) + advA) == 2);

var pb = (z2[i] < h2[i]) + (((z2[i] == h2[i]) + !advA) == 2);

if(z2[i] == h2[i]) advA = !advA;

if(x==1){
mbal -= z2[i]*mb;
opbal -= h2[i]*pb;
mwin += mb;
opwin += pb;
} else {
opbal -= z2[i]*mb;
mbal -= h2[i]*pb;
opwin += mb;
mwin += pb;
}

}

advX = (advN==advA);

baldif = mbal - opbal;

windif = mwin - opwin;

var balrat = (mbal+1) / (opbal+1);

var winrat = (mwin+1) / (opwin+1);

var windrat = (param1 - windif) / (param1 + windif);

//console.log(mbal);

mcore = mbal / (param1 - windif);
opcore = opbal / (param1 + windif);
coredif = mcore - opcore;

showout(x + ":" + mcore +"v"+opcore + "::" +mbal +"V" + opbal + " " + (x==1) + " " + (x==2) + " " + coredif);

showout(balrat + "[" + windrat + "]");

bid = Math.round( rmax(mcore, opcore) - advX - coredif);


if(mbal < bid) bid = Math.floor(mcore) + 1;
if(mbal == 0) bid = 0;

//console.log(bid);

return bid;

}

function playMoveZ(x, y, z, h) {

var fix = [50, 25, 12, 6, 12, 20, 12, 6, 12, 25, 50];

return(fix[y]);

}

</script>

</body>

</html>

Name: Anonymous 2017-01-09 3:56

Ah lol, there's a bug in stepX...

Name: Anonymous 2017-01-09 5:21

var ba = playMoveD(1, loc, v1, v2);

var bb = playMoveF(2, loc, v1, v2);
//just do manual switch for p1/p2

Name: Alyssa P. Hacker 2017-01-09 7:15

>>5
If my opponent bets $21 to move the bottle after I've won 4 bets @ $20, then he has $79 to make 8 moves while I have $20 to make 2 moves, which puts me at a slight advantage.

Name: Anonymous 2017-01-09 8:27

There's a bug in myAnus

Name: Anonymous 2017-01-09 10:11

✌️✌️✌️✌️✌️✌️✌️✌️

Name: Anonymous 2017-01-09 10:34

>>9
There is a slight advantage position-wise, but having the extra $ probably outweighs it
opponent can happily bid 20/2 for 8 turns, or less if you bid a 10+ and win the bid

Name: Anonymous 2017-01-09 11:14

I think if you reach the pre-win position with more than half the opponents $ it should be winnable

>>2
I might have to try that with simplifications
6 bids w/ 2 outcomes per turn gives 12^n for n-moves look ahead before pruning

Name: Anonymous 2017-01-09 13:44

HAX MY ERRANK

Name: Anonymous 2017-01-11 4:06

bump, i have a simple 2b^n simulator code, how do i make it work?

function simulate(x,y,z, dep, bvec){

var mx = [];
var px = [];
var zx = [];

var mpbid = [];
var mptrace = [];

var reccount = 0;

var recbase = 0;

var rectop = 0;

mx[0] = x; px[0] = y; zx[0] = z; mpbid[0] = -1; mptrace[0] = -1;

// showout(0 +": mb"+mx[0] + " pb" + px[0] +" loc"+ zx[0] + " bid" + mpbid[0] +" tr"+ mptrace[0]);


showout(bvec);

for(var i=0; i<dep; i++){

showout(i + " recur");

showout("|" +recbase+"," +rectop+"|");

for(var nc=recbase; nc<=rectop; nc++){

var j=0;

var ix = nc;

var cid = ix;

// showout(cid +" " + mx[cid] + " " + px[cid] +" "+ zx[cid] + " " + mpbid[cid] +" "+ mptrace[cid]);

var cmscore = mx[ix];
var cpscore = px[ix];

// var cnscore = cmscore / cpscore;

// showout(cmscore +" !! " +cpscore);

for(j=0; j<bvec.length; j++){

var bidn = bvec[j];

var cxscore = (cmscore - bidn) / (z-1);
var cyscore = (cpscore - (bidn+1)) / (10-(z+1));

// showout(bidn +" !!! ");

if((cmscore/z) >= cxscore){

mx.push(mx[ix] - bidn);
px.push(px[ix] - 0);
zx.push(zx[ix] - 1);
mpbid.push(bidn);
mptrace.push(ix);
reccount++;

}

var cid = rectop+reccount;

// showout(cid +" " + mx[cid] + " " + px[cid] +" "+ zx[cid] + " " + mpbid[cid] +" "+ mptrace[cid]);

if(cpscore/(10-z) <= cyscore){

mx.push(mx[ix] - 0);
px.push(px[ix] - (bidn + 1));
zx.push(zx[ix] + 1);
mpbid.push(bidn+1);
mptrace.push(ix);
reccount++;

}

var cid = rectop+reccount;

showout(cid +" " + mx[cid] + " " + px[cid] +" "+ zx[cid] + " " + mpbid[cid] +" "+ mptrace[cid]);

}

// showout("--lvl2--");

}

recbase = rectop+1;

rectop += reccount;

reccount = 0;

showout("------" +recbase + " of " + rectop +"---------");

}
}

Don't change these.
Name: Email:
Entire Thread Thread List