Last active
August 11, 2020 18:09
-
-
Save adler3d/d4de5fe545c7bc93c8274a57749bece7 to your computer and use it in GitHub Desktop.
solver for(космические рейнджеры https://vasiliy0.gitlab.io/#Diamond)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*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}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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