プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやるITエンジニアがスキルアップの話を中心に日常を綴るブログです。

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