Skip to content

Instantly share code, notes, and snippets.

@adler3d
Last active August 11, 2020 18:09
Show Gist options
  • Save adler3d/d4de5fe545c7bc93c8274a57749bece7 to your computer and use it in GitHub Desktop.
Save adler3d/d4de5fe545c7bc93c8274a57749bece7 to your computer and use it in GitHub Desktop.
solver for(космические рейнджеры https://vasiliy0.gitlab.io/#Diamond)
/*POST.data:
1234 = 12 Гц
2345 = 2 Гц
3456 = 1 Гц
4567 = 1 Гц
5678 = 1 Гц
6781 = 2 Гц
*/
var n=8;
var base="0".charCodeAt(0);var as_str=i=>String.fromCharCode(base+i);var from_str=s=>s.split("").map(e=>e.charCodeAt(0)-base);
var arr=POST.data.split("\r").join("").split("\n").map(e=>e.split(" = ")).map(e=>[e[0].trim(),e[1].split(" ")[0]]);
var rules=arr.map(e=>({t:from_str(e[0]),tot:e[1]}));
var id2arr=(id,k)=>{var out=[];for(var i=0;i<k;i++){out.push(id&0x7);id=id>>3;}return out.reverse().map(e=>e+1);}
var idarr2str=arr=>arr.map(e=>as_str(e)).join("");
var k=4;var n4=n*n*n*n;
var is_ok=arr=>{var m={};arr.map(e=>m[e]=1);return mapkeys(m).length==k;}
var out=[];
var get_tot=(t,x)=>{
console.assert(is_ok(t),"parametr 'get_tot::t' must have unique numbers");
var tm={};t.map((e,i)=>tm[e]=i);
return qapsum(x.map((e,i)=>(e in tm)?(tm[e]==i?10:1):0));
}
var f=(x,t,tot)=>{return tot==get_tot(x,t);}
for(var i=0;i<n4;i++){
var idarr=id2arr(i,k);
if(!is_ok(idarr))continue;
var x=idarr;
var fail=rules.map(r=>f(x,r.t,r.tot|0)?0:1).filter(e=>e).length;
if(fail)continue;
out.push(idarr2str(idarr));
}
return out.length+""+inspect({out,rules});
var FToS=n=>(n+0).toFixed(2);
var mapswap=(k2v)=>{var v2k={};for(var k in k2v){v2k[k2v[k]]=k;}return v2k;}
var qapavg=(arr,cb)=>{if(typeof cb=='undefined')cb=e=>e;return arr.length?arr.reduce((pv,ex)=>pv+cb(ex),0)/arr.length:0;}
var qapsum=(arr,cb)=>{if(typeof cb=='undefined')cb=e=>e;return arr.reduce((pv,ex)=>pv+cb(ex),0);}
var qapmin=(arr,cb)=>{if(typeof cb=='undefined')cb=e=>e;var out;var i=0;for(var k in arr){var v=cb(arr[k]);if(!i){out=v;}i++;out=Math.min(out,v);}return out;}
var qapmax=(arr,cb)=>{if(typeof cb=='undefined')cb=e=>e;var out;var i=0;for(var k in arr){var v=cb(arr[k]);if(!i){out=v;}i++;out=Math.max(out,v);}return out;}
var qapsort=(arr,cb)=>{if(typeof cb=='undefined')cb=e=>e;return arr.sort((a,b)=>cb(b)-cb(a));}
var mapdrop=(e,arr,n)=>{var out=n||{};Object.keys(e).map(k=>arr.indexOf(k)<0?out[k]=e[k]:0);return out;}
var mapsort=(arr,cb)=>{if(typeof cb=='undefined')cb=(k,v)=>v;var out={};var tmp=qapsort(mapkeys(arr),k=>cb(k,arr[k]));for(var k in tmp)out[tmp[k]]=arr[tmp[k]];return out;}
var table_fix_fields=arr=>{var n2keys=[];arr.map(e=>n2keys[mapkeys(e).length]=mapkeys(e));var order=n2keys.pop();return arr.map(e=>{var m={};order.map(k=>m[k]=k in e?e[k]:0);return m;});};
var mapkeys=Object.keys;
var say=s=>console.log(s);
var n=8;
var base="0".charCodeAt(0);var as_str=i=>String.fromCharCode(base+i);var from_str=s=>s.split("").map(e=>e.charCodeAt(0)-base);
var id2arr=(id,k)=>{var out=[];for(var i=0;i<k;i++){out.push(id&0x7);id=id>>3;}return out.reverse().map(e=>e+1);}
var idarr2str=arr=>arr.map(e=>as_str(e)).join("");
var k=4;var n4=n*n*n*n;
var is_ok=arr=>{var m={};arr.map(e=>m[e]=1);return mapkeys(m).length==k;}
var out=[];
var get_tot=(t,x)=>{
console.assert(is_ok(t),"parametr 'get_tot::t' must have unique numbers");
var tm={};t.map((e,i)=>tm[e]=i);
return qapsum(x.map((e,i)=>(e in tm)?(tm[e]==i?10:1):0));
}
var f=(x,t,tot)=>{return tot==get_tot(x,t);}
for(var i=0;i<n4;i++){
var idarr=id2arr(i,k);
if(!is_ok(idarr))continue;
out.push(idarr2str(idarr));
}
var id=((Math.random()*out.length*2)|0)%out.length;
//say("L = "+out.length+"\nid = "+id);
var def=out[id].split("");
say("XXXX: write number:");
var A=[];
process.stdin.on('data',s=>{
var q=(s+"").slice(0,k);
var tot=get_tot(def,q.split(""));
var out=q+" = "+tot+" Hz ... iter = "+(A.length+1);
A.push(out);
say("...");
say(A.join("\n")+" ... and write next number:");
if(tot==10*k){say("win");process.exit();}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment