RosettaCodeData/Task/Twelve-statements/Zkl/twelve-statements.zkl
2017-09-25 22:28:19 +02:00

30 lines
1.2 KiB
Text

var statements; // list of 13 Bools, statements[0] is garbage to make 1 based
fcn s0 { False } // dummy for padding
fcn s1 { True }
fcn s2 { statements[-6,*].filter().len()==3 }
fcn s3 { [2..12,2].apply(statements.get).filter().len()==2 }
fcn s4 { if(statements[5]) statements[6]==statements[7]==True else True }
fcn s5 { statements[2,3].filter().len()==0 }
fcn s6 { [1..12,2].apply(statements.get).filter().len()==4 }
fcn s7 { statements[2]!=statements[3] }
fcn s8 { if(statements[7]) statements[5]==statements[6]==True else True }
fcn s9 { statements[1,6].filter().len()==3 }
fcn s10{ statements[11]==statements[12]==True }
fcn s11{ statements[7,3].filter().len()==1 }
fcn s12{ statements[1,11].filter().len()==4 }
filters:=T(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12);
foreach n in ((2).pow(12)){ // 4k
// 5-->"0000000000101"-->("0","0"..."1")-->(F,F,...T)
statements="%013.2B".fmt(n).split("").apply('==("1"));
r:=filters.run(True); // and return list of results
if(r==statements) print("<<<<<<<<<<<<<<<<Solution");
else{
diff:=r.zipWith('!=,statements);
if(diff.sum(0)==1) print("Diff @",diff.filter1n());
}
}
fcn print(msg){
(12).pump(List,'wrap(n){ statements[n] and n or Void.Skip })
.concat(",").println(" : ",vm.pasteArgs());
}