September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -1,58 +1,60 @@
|
|||
#import system.
|
||||
#import system'routines.
|
||||
#import extensions.
|
||||
import system'routines.
|
||||
import extensions.
|
||||
|
||||
#class(extension)op
|
||||
extension op
|
||||
{
|
||||
#method printSolution : bits
|
||||
= self zip:bits &into:
|
||||
(:s:b) [ s iif:"T":"F" + (s xor:b) iif:"* ":" " ] summarize:(String new).
|
||||
printSolution : bits
|
||||
= self zip:bits by
|
||||
(:s:b)( s iif("T","F") + (s xor:b) iif("* "," ") ); summarize(String new).
|
||||
|
||||
toBit
|
||||
= self iif(1,0).
|
||||
}
|
||||
|
||||
#symbol puzzle =
|
||||
puzzle =
|
||||
(
|
||||
bits [ bits length == 12 ],
|
||||
(:bits)( bits length == 12 ),
|
||||
|
||||
bits [ bits last:6 select &each:x [ x iif:1:0 ] summarize == 3 ],
|
||||
(:bits)( bits last:6; selectBy(:x)( x toBit ); summarize == 3 ),
|
||||
|
||||
bits [ bits zip:(RangeEnumerator new &from:1 &to:12)
|
||||
&into:(:x:i) [ (i int is &even)and:x iif:1:0 ] summarize == 2 ],
|
||||
(:bits)( bits zip(RangeEnumerator new from:1 to:12)
|
||||
by(:x:i)( (i int; isEven)and:x; toBit ); summarize == 2 ),
|
||||
|
||||
bits [ bits@4 iif:(bits@5 && bits@6):true ],
|
||||
(:bits)( bits[4] iif(bits[5] && bits[6],true) ),
|
||||
|
||||
bits [ (bits@1 || bits@2 || bits@3) not ],
|
||||
(:bits)( (bits[1] || bits[2] || bits[3]) not ),
|
||||
|
||||
bits [ bits zip:(RangeEnumerator new &from:1 &to:12)
|
||||
&into:(:x:i) [ (i int is &odd)and:x iif:1:0 ] summarize == 4 ],
|
||||
(:bits)( bits zip(RangeEnumerator new from:1 to:12)
|
||||
by(:x:i)( (i int; isOdd)and:x; toBit ); summarize == 4 ),
|
||||
|
||||
bits [ (bits@1) xor:(bits@2) ],
|
||||
(:bits)( bits[1] xor(bits[2]) ),
|
||||
|
||||
bits [ bits@6 iif:(bits@5 && bits@4):true ],
|
||||
(:bits)( bits[6] iif(bits[5] && bits[4],true) ),
|
||||
|
||||
bits [ bits top:6 select &each:x [ x iif:1:0 ] summarize == 3 ],
|
||||
(:bits)( bits top:6; selectBy(:x)( x toBit ); summarize == 3 ),
|
||||
|
||||
bits [ bits@10 && bits@11 ],
|
||||
(:bits)( bits[10] && bits[11] ),
|
||||
|
||||
bits [ ((bits@6) iif:1:0 + (bits@7) iif:1:0 + (bits@8) iif:1:0)==1 ],
|
||||
(:bits)( (bits[6] toBit + bits[7] toBit + bits[8] toBit)==1 ),
|
||||
|
||||
bits [ bits top:11 select &each:x [ x iif:1:0 ] summarize == 4 ]
|
||||
(:bits)( bits top:11; selectBy(:x)( x toBit ); summarize == 4 )
|
||||
).
|
||||
|
||||
#symbol program =
|
||||
program =
|
||||
[
|
||||
console writeLine:"".
|
||||
|
||||
0 till:(2 power &int:12) &doEach:n
|
||||
0 till(2 power int:12) do(:n)
|
||||
[
|
||||
#var bits := BitArray32 new:n top:12 toArray.
|
||||
#var results := puzzle select &each: r [ r eval:bits ] toArray.
|
||||
var bits := BitArray32 new:n; top:12; toArray.
|
||||
var results := puzzle selectBy(:r)( r eval:bits ); toArray.
|
||||
|
||||
#var counts := bits zip:results &into:(:b:r) [ b xor:r iif:1:0 ] summarize.
|
||||
var counts := bits zip:results by(:b:r)( b xor:r; toBit ); summarize.
|
||||
|
||||
counts =>
|
||||
0 ? [ console writeLine:"Total hit :":(results printSolution:bits). ]
|
||||
1 ? [ console writeLine:"Near miss :":(results printSolution:bits). ]
|
||||
12 ? [ console writeLine:"Total miss:":(results printSolution:bits). ].
|
||||
0 [ console printLine("Total hit :",results printSolution:bits) ];
|
||||
1 [ console printLine("Near miss :",results printSolution:bits) ];
|
||||
12 [ console printLine("Total miss:",results printSolution:bits) ].
|
||||
].
|
||||
|
||||
console readChar.
|
||||
|
|
|
|||
45
Task/Twelve-statements/Kotlin/twelve-statements.kotlin
Normal file
45
Task/Twelve-statements/Kotlin/twelve-statements.kotlin
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// version 1.1.3
|
||||
|
||||
typealias Predicate = (String) -> Boolean
|
||||
|
||||
val predicates = listOf<Predicate>(
|
||||
{ it.length == 13 }, // indexing starts at 0 but first bit ignored
|
||||
{ (7..12).count { i -> it[i] == '1' } == 3 },
|
||||
{ (2..12 step 2).count { i -> it[i] == '1' } == 2 },
|
||||
{ it[5] == '0' || (it[6] == '1' && it[7] == '1') },
|
||||
{ it[2] == '0' && it[3] == '0' && it[4] == '0' },
|
||||
{ (1..11 step 2).count { i -> it[i] == '1' } == 4 },
|
||||
{ (it[2] == '1') xor (it[3] == '1') },
|
||||
{ it[7] == '0' || (it[5] == '1' && it[6] == '1') },
|
||||
{ (1..6).count { i -> it[i] == '1' } == 3 },
|
||||
{ it[11] == '1' && it[12] == '1' },
|
||||
{ (7..9).count { i -> it[i] == '1' } == 1 },
|
||||
{ (1..11).count { i -> it[i] == '1' } == 4 }
|
||||
)
|
||||
|
||||
fun show(s: String, indent: Boolean) {
|
||||
if (indent) print(" ")
|
||||
for (i in s.indices) if (s[i] == '1') print("$i ")
|
||||
println()
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println("Exact hits:")
|
||||
for (i in 0..4095) {
|
||||
val s = i.toString(2).padStart(13, '0')
|
||||
var j = 1
|
||||
if (predicates.all { it(s) == (s[j++] == '1') }) show(s, true)
|
||||
}
|
||||
|
||||
println("\nNear misses:")
|
||||
for (i in 0..4095) {
|
||||
val s = i.toString(2).padStart(13, '0')
|
||||
var j = 1
|
||||
if (predicates.count { it(s) == (s[j++] == '1') } == 11) {
|
||||
var k = 1
|
||||
val iof = predicates.indexOfFirst { it(s) != (s[k++] == '1') } + 1
|
||||
print(" (Fails at statement ${"%2d".format(iof)}) ")
|
||||
show(s, false)
|
||||
}
|
||||
}
|
||||
}
|
||||
26
Task/Twelve-statements/Sidef/twelve-statements.sidef
Normal file
26
Task/Twelve-statements/Sidef/twelve-statements.sidef
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
var conditions = [
|
||||
{ false },
|
||||
{|a| a.len == 13 },
|
||||
{|a| Math.sum(a[7..12]) == 3 },
|
||||
{|a| Math.sum(a[2..12 `by` 2]) == 2 },
|
||||
{|a| a[5] ? (a[6] && a[7]) : true },
|
||||
{|a| !a[2] && !a[3] && !a[4] },
|
||||
{|a| Math.sum(a[1..11 `by` 2]) == 4 },
|
||||
{|a| a[2] == true^a[3] },
|
||||
{|a| a[7] ? (a[5] && a[6]) : true },
|
||||
{|a| Math.sum(a[1..6]) == 3 },
|
||||
{|a| Math.sum(a[11,12]) == 2 },
|
||||
{|a| Math.sum(a[7..9]) == 1 },
|
||||
{|a| Math.sum(a[1..11]) == 4 },
|
||||
]
|
||||
|
||||
func miss(args) {
|
||||
1..12 -> grep {|i| conditions[i](args) != args[i] }
|
||||
}
|
||||
|
||||
for k in (^(1<<12)) {
|
||||
var t = ("0%012b" % k -> chars.map {|bit| bit == '1' ? true : false })
|
||||
var no = miss(t)
|
||||
no.len == 0 && say "Solution: true statements are #{1..12->grep{t[_]}.join(' ')}"
|
||||
no.len == 1 && say "1 miss (#{no[0]}): true statements are #{1..12->grep{t[_]}.join(' ')}"
|
||||
}
|
||||
30
Task/Twelve-statements/Zkl/twelve-statements.zkl
Normal file
30
Task/Twelve-statements/Zkl/twelve-statements.zkl
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
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());
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue