30 lines
1.3 KiB
Text
30 lines
1.3 KiB
Text
function s1(string s) return length(s)=12 end function
|
|
function s2(string s) return sum(sq_eq(s[7..12],'1'))=3 end function
|
|
function s3(string s) return sum(sq_eq(extract(s,tagset(12,2,2)),'1'))=2 end function
|
|
function s4(string s) return s[5]='0' or s[6..7]="11" end function
|
|
function s5(string s) return s[2..4]="000" end function
|
|
function s6(string s) return sum(sq_eq(extract(s,tagset(12,1,2)),'1'))=4 end function
|
|
function s7(string s) return s[2]!=s[3] end function
|
|
function s8(string s) return s[7]='0' or s[5..6]="11" end function
|
|
function s9(string s) return sum(sq_eq(s[1..6],'1'))=3 end function
|
|
function s10(string s) return s[11..12]="11" end function
|
|
function s11(string s) return sum(sq_eq(s[7..9],'1'))=1 end function
|
|
function s12(string s) return sum(sq_eq(s[1..11],'1'))=4 end function
|
|
|
|
sequence rtn = {s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12}
|
|
string misses = "\n"
|
|
for i=0 to power(2,12)-1 do
|
|
string s = sprintf("%012b",i)
|
|
sequence res = find_all('1',s)
|
|
integer t = 0, pass, fail
|
|
for b=1 to 12 do
|
|
pass = call_func(rtn[b],{s})=(s[b]='1')
|
|
if not pass then fail = b end if
|
|
t += pass
|
|
if b=12 and t=12 then printf(1,"Solution: %v\n",{res}) end if
|
|
end for
|
|
if t=11 then
|
|
misses &= sprintf("Near miss: %v, fail on %d\n",{res,fail})
|
|
end if
|
|
end for
|
|
puts(1,misses)
|