トップ «前の日記(2018-04-15(Sun)) 最新 次の日記(2018-04-17(Tue))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2018-04-16(Mon) もう日を跨いでしまった

1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 = 100

昨日、じゃなくて既に一昨日に読んだ、三年生だか四年生だかの 教科書に、四則演算を組み合わせて上の等式を満たすことを 求める問題があった。

今回は python3で解いた。
解は15通り出てきた。
本当はもう少しエレガントに記述したかったが、 段数が8つになったループ、以外の解は すぐには見当たらない。

$ python3 dumb.py
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100
1 + 2 + 3 - 4 * 5 + 6 * 7 + 8 * 9 = 100
1 + 2 - 3 * 4 + 5 * 6 + 7 + 8 * 9 = 100
1 + 2 - 3 * 4 - 5 + 6 * 7 + 8 * 9 = 100
1 + 2 * 3 + 4 * 5 - 6 + 7 + 8 * 9 = 100
1 + 2 * 3 * 4 * 5 / 6 + 7 + 8 * 9 = 100
1 - 2 + 3 * 4 * 5 + 6 * 7 + 8 - 9 = 100
1 - 2 + 3 * 4 * 5 - 6 + 7 * 8 - 9 = 100
1 - 2 * 3 + 4 * 5 + 6 + 7 + 8 * 9 = 100
1 - 2 * 3 - 4 + 5 * 6 + 7 + 8 * 9 = 100
1 - 2 * 3 - 4 - 5 + 6 * 7 + 8 * 9 = 100
1 * 2 * 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100
1 * 2 * 3 - 4 * 5 + 6 * 7 + 8 * 9 = 100
1 * 2 * 3 * 4 + 5 + 6 + 7 * 8 + 9 = 100
1 * 2 * 3 * 4 + 5 + 6 - 7 + 8 * 9 = 100

bc(1)で検算。一応合っている、はず。
4^8、つまり65536通りの総当り、よりましな解もありそうな気がするが。

全部出力するスクリプトも追加。

$ python3 all.py | cat -n
     1	1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45
     2	1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 - 9 = 27
     3	1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100
     4	1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 / 9 = 28.88888888888889
     5	1 + 2 + 3 + 4 + 5 + 6 + 7 - 8 + 9 = 29
     .
     .
     .
 65532	1 / 2 / 3 / 4 / 5 / 6 / 7 * 8 / 9 = 0.0001763668430335097
 65533	1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 + 9 = 9.000024801587301
 65534	1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 - 9 = -8.999975198412699
 65535	1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 * 9 = 0.0002232142857142857
 65536	1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9 = 2.7557319223985893e-06

MacMini動けばいいと思って

120GBのSSD購入(SE800 2.5" SATAIII)。
適当に検索して みつけたページを頼りに、乱暴に換装。
Ubuntu17.10.1のLive USBが無事起動したことを確認して、stretchを 入れてみた。いくら待ってもインストーラが起動しないことに気づいて 確認。イメージがamd64でなくarm64であった。
ダウンロードして書き直したイメージで無事インストール。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
udev             860M     0  860M    0% /dev
tmpfs            175M  3.1M  172M    2% /run
/dev/sda1        108G  3.3G  100G    4% /
tmpfs            871M     0  871M    0% /dev/shm
tmpfs            5.0M  4.0K  5.0M    1% /run/lock
tmpfs            871M     0  871M    0% /sys/fs/cgroup
tmpfs            175M  4.0K  175M    1% /run/user/110
tmpfs            175M     0  175M    0% /run/user/1000

買ったおもちゃで、大体遊べたようだ。

非互換性とか

解が100になる組み合わせは14あった。
その他に、100.0になるものが一つ。
割り算のため整数演算でなくなっていた。
ただし、割り算の結果、100ぴったりになるのはこれだけのようだ。

1 + 2 * 3 * 4 * 5 / 6 + 7 + 8 * 9 = 100.0

下の例のように、除算と乗算がくっついて いないものは 当然整数に戻せない。

1 + 2 / 3 + 4 + 5 * 6 + 7 * 8 + 9 = 100.66666666666666

割り算の演算子を"//"に変えてみたが、すると 今度は2//3のように値が切り捨てられるものまでが出てきた。

1 - 2 // 3 + 4 + 5 * 6 + 7 * 8 + 9 = 100

raspi(Python3.4.2)や、stretch(同3.5.3)で動かした結果、 昨晩のスクリプトは、python3.6未満で動かないことが判明。
全部がいっぺんに3.6にならない以上、2.xは切り捨てるにしても もっとましな書き方にせねば。

ついでのついでに、1から9まで順不同であった場合も対応したい ところか。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。