Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Calculate the best moves in King of Tokyo - written in setlX (http://randoom.org/Software/SetlX)
- score:=cachedProcedure(t){
- s:=0;
- for(i in [1..3]){
- if(t[i] >= 3) {
- s+=(t[i]-3)+i;
- }
- }
- return s;
- };
- pyramid:=cachedProcedure(v){
- return 3**v[4]*((+/v)!)/(v[1]!*v[2]!*v[3]!*v[4]!);
- };
- expscore:=cachedProcedure(n, k, oldmove){
- size := 6 - +/k;
- total:=0;
- for(v in {[a,b,c,d]:a in [0..size], b in [0..size],c in [0..size],d in [0..size]|a+b+c+d==size}){
- newt:=[k[1]+v[1],k[2]+v[2],k[3]+v[3],k[4]+v[4]];
- [_,bests]:=oldmove[newt];
- total+=bests*pyramid(v);
- }
- return total*1.0/(6**size);
- };
- bestmove:=cachedProcedure(n, t,oldmove){
- bests:=score(t);
- bestk:={t};
- if(n > 1){
- for(k in {[a,b,c,d]:a in [0..t[1]],b in [0..t[2]],c in [0..t[3]], d in [0..t[4]]}){
- s:=expscore(n, k, oldmove);
- if(s>bests){
- bests:=s;
- bestk:={k};
- } else if (s==bests) {
- bestk += {k};
- }
- }
- }
- return [bestk,bests];
- };
- tt:={[a,b,c,d]:a in [0..6],b in [0..6],c in [0..6],d in [0..6]|a+b+c+d==6};
- m:={[1,{}]};
- for(t in tt){
- m[1][t]:=[{t},score(t)];
- print(0+" "+t+" "+m[1][t][1]+" "+m[1][t][2]);
- }
- for(n in [2..3]){
- m[n]:={};
- for(t in tt){
- m[n][t]:=bestmove(n,t,m[n-1]);
- print(n-1+" "+t+" "+m[n][t][1]+" "+m[n][t][2]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement