僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
自分に実装できそうで少し重いものを考えているうちに 昔聞いた覆面算を思い出した。
思ったより面倒なようだったけど、ともかく
できたっぽい。
最初の実装はなかなか終わらない。ループ回数だけでも
10000000000回(1000*1000*10000)になる計算。
実はまだ、検証さえできていない。
少し考え直して、当初思いついた8段のループで書き直した。こちらなら
81000000回(9*10*10*10*9*10*10*10, s と m は最上位なので0を省ける)
のはず。
足し算と掛け算を間違っていて、複数の解が出ていても気づかなかった。
$ time python3 s2.py 9 5 6 7 + 1 0 8 5 = 1 0 6 5 2 real 0m34.551s user 0m34.550s sys 0m0.000s
実は 筆算形式に成形してようやく間違いに気づいた。
$ time python3 s2.1.py 9 5 6 7 + 1 0 8 5 --------- 1 0 6 5 2 real 0m34.127s user 0m34.127s sys 0m0.000s
各桁の数が全部違うことを確認するため、set型に放り込んで重複を チェックする。もう少し速い方法があるような気もするが、よく 分からない。
>>> 3 != 4 != 3 True >>> len({3, 4, 3}) 2
解がひとつと分かっていれば、その後の処理は打ち切っても いいような気がする。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。