Twelve statements: Difference between revisions

→‎{{header|Haskell}}: bug fix, change to 1/0 for easier reading, add indices of incorrect answers
(→‎{{header|Haskell}}: bug fix, change to 1/0 for easier reading, add indices of incorrect answers)
Line 22:
Extra credit: also print out a table of near misses, that is, solutions that are contradicted by only a single statement.
=={{header|Haskell}}==
Shows answers with 1 for true, followed by list of indices of incorrect elements each set of 1/0s (index is 0-based).
<lang haskell>tf = mapM (\_ -> [True, False])
 
sumbool = length . filter id
wrongness b = sumbool . zipWith (/=) b . map ($ b)
 
<lang haskell>tf [x] = mapM (\_ -> [True[1], False[0]])
tf (x:xs) = map (1:) s ++ map (0:) s where s = tf xs
wrongness b = map fst . filter snd .
wrongness zip b = sumbool[0..] . zipWith (/=) b . map (\f ->fromEnum $ f b)
statements = [ (==12) . length,
3 ⊂ [length statements-6..],
2 ⊂ [1,3..],
4 → [4..6],
0 ⊂ [21..43],
4 ⊂ [0,2..],
1 ⊂ [1,2],
Line 40 ⟶ 43:
4 ⊂ [0..10]
] where
(⊂) s x = \b -> s == (sumboolsum . map (b!!) . takeWhile (< length b)) x
(→) a x = \b -> not (b!!a == 0) || all ((==1).(b!!)) x
testall s n = [(b, w) | b <- tf s, w <- [wrongness b s], length w == n]
 
main = let t n s = filter ((==n).fst) [(wrongness b s, b) | b <- tftestall s]statements in do
putStrLn "Answer"
mapM_ print $ t 0 statements
putStrLn "Near misses"
mapM_ print $ t 1 statements</lang>
{{out}}
<pre>
Answer
(0,[True1,False0,True1,True1,False0,True1,True1,False0,False0,False0,True1,False0],[])
Near misses
([1,[True1,True0,False1,True0,False0,False1,True1,True1,True0,False0,False0],False[7])
([1,[True1,True0,False1,True0,False0,False1,True0,False1,True1,True0,False0],False[9])
([1,[True1,True0,False1,True0,False0,False1,True0,False1,True0,False0,False1],True[11])
([1,[True0,False1,True1,True0,False1,True1,True0,False1,True0,False0,False0],False[8])
([1,[True0,False1,True1,True0,False0,False0,False1,True1,True0,False0,False0],False[6])
([1,[True0,False0,False1,True0,False1,True0,False1,True1,True0,False0,False0],False[5])
([1,[True0,False0,False1,True0,False0,False0,False1,True0,False1,True1,True1],True[11])
([1,[True0,False0,False1,True0,False0,False0,False0,False0,False0,False0,False0],False[7])
([1,[False0,False0,False0,True1,False1,False0,False0,True1,False0,True1,True0],True[7])
([1,0,0,0,1,0,0,1,0,1,1,1],[11])
([1,0,0,0,1,0,0,1,0,0,1,0],[11])
([1,0,0,0,1,0,0,1,0,0,0,0],[10])
([1,0,0,0,1,0,0,0,0,0,0,0],[7])
([0,0,0,1,0,0,0,1,0,1,1,1],[0])
([0,0,0,0,1,0,0,1,0,1,1,1],[0])
([0,0,0,0,1,0,0,1,0,0,1,0],[0])
</pre>
 
Anonymous user