2
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
3
Name:
Alyssa P. Hacker
2017-01-08 16:01
Given n steps and m dollars, bet m / (n / 2) dollars every round.
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.
5
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)
6
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>
7
Name:
Anonymous
2017-01-09 3:56
Ah lol, there's a bug in stepX...
8
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
9
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.
12
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
13
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
15
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 +"---------"); } }