(phixonline)--> 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)