0〜9の数字を使って、掛け算して、Go!解けた。
順列生成アルゴリズムは、どこぞからパクってきたやつなので、まあインチキ(というか自分で理解してない)ですが、α版くらいの勢いでとりあえず出してみる。
問題はこちら:http://www5b.biglobe.ne.jp/~taka_2/jclass/0_9kake/index.html
import List main = do print $ filter test $ perm [0,1,2,3,5,6,7,8,9] perm [] = [[]] perm xs = concat [map (x:) $ perm (delete x xs) | x <- xs] test [a,b,c,d,e,f,g,h,i] = if (400 + a*10 + b) * (c*10 + d) == (e*10000 + f*1000 + g*100 + h*10 + i) then True else False
というわけで、perm関数が出来れば、test関数なんてほぼどうでもいいよねっていう感じです(汗
実行した結果はこう。
[[0,2,3,9,1,5,6,7,8],[8,3,1,2,0,5,7,9,6],[9,5,3,6,1,7,8,2,0]]
実行した結果もインチキくさい。(いや、答えとしては合ってますが。)
だって、どうやって整形していいかわかんないんだもん。
※perm関数の出自:http://www.sampou.org/cgi-bin/haskell.cgi?Programming%3A%B6%CC%BC%EA%C8%A2%3A%C1%C8%B9%E7%A4%BB