僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
Win10のメモ帳で書いて、"UTF-8"で保存。
$ cat bom_python3_hello.py #!/usr/bin/env python3 print("世界にこんにちは。")$ #ファイル末尾に改行なし
$ file bom_python3_hello.py bom_python3_hello.py: Python script, UTF-8 Unicode (with BOM) text executable, with CRLF line terminators
python3自体は何も文句を言わない。
$ python3 bom_python3_hello.py 世界にこんにちは。
が、shellは拒否。
$ ./bom_python3_hello.py ./bom_python3_hello.py: 行 1: #!/usr/bin/env: そのようなファイルやディレクトリはありません ./bom_python3_hello.py: 行 2: $'\r': コマンドが見つかりません ./bom_python3_hello.py: 行 3: 予期しないトークン `"世界にこんにちは。"' 周辺に構文エラーがあります ./bom_python3_hello.py: 行 3: `print("世界にこんにちは。")' $ ls env /usr/bin/env
nkf -w8 -d とかでCRを抜いて(BOM維持)も、エラーメッセージ('\r')がひとつ
減っただけ。
zsh環境で実行しても、基本的に変らない。
覆面算の古典問題。といっても試したのは中学生の頃だったはず。
python3に解かせてみた。例によって長大なループになった。
違う文字が違う数字になる(同じ数字にならない)ようにする、
手っ取り早い方法が浮かばなかったので、集合型に放り込んで数を
数えることにする。
当初のバージョンはかなり遅かった。Core 2 Duo 2GHz の Stretchで
$ time python3 send_more_money.py 9 5 6 7 + 1 0 8 5 = 1 0 6 5 2 s e n d + m o r e = m o n e y real 1m56.945s user 1m56.812s sys 0m0.064s
かかった(python2だと1分17秒ほど)。
しかも、解が出力された後、探索が終わるまで
しばらくかかる。
もう少し速くする。繰り上がり最高位が1であることは分かっていたので、それが
先頭になるように書き換え、ひとつ解けると終了するように書き換える。
すると、
$ time python3 send_more_money.py 9 5 6 7 + 1 0 8 5 = 1 0 6 5 2 s e n d + m o r e = m o n e y real 0m7.710s user 0m7.692s sys 0m0.004s
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。