京都大学で11月におこなわれる学祭のカウントダウン方法がネットで話題を呼んでいる。カウントダウンを告知している掲示板では、「あと30日」であれば「6×4+5+2-1=30」、29日であれば「6+4×5+2+1=29」といったように、数字の並びはそのままに、「+」「-」「×」「÷」の記号を差し替えるだけで、計算結果で当日までの日数すべてを表現できるようになっている。京大講師の田中草大さんがTwitterで紹介したところバズったようで、その様子はTogetter上でもまとめられている(
Togetter、
ねとらぽ)。
python (スコア:1)
operator = ["+", "-", "*", "/"]
answer = 0
while True:
try:
for o1 in operator:
for o2 in operator:
for o3 in operator:
for o4 in operator:
formula = "6{}4{}5{}2{}1".format(o1, o2, o3, o4)
if answer == eval(formula):
print("{}={}".format(formula, answer))
raise Exception
print("{} not found.....".format(answer))
break
except:
answer += 1
powershell (スコア:1)
$ops='+','-','*','/';$ops|%{$o1=$_;$ops|%{$o2=$_;$ops|%{$o3=$_;$ops|%{$o4=$_;'6{0}4{1}5{2}2{3}1' -f $o1,$o2,$o3,$o4}}}}|%{[pscustomobject]@{expression=$_;answer=(iex $_)}}|?{!($_.answer % 1)}|sort answer
Prolog (スコア:1)
こういうのはPrologが得意なような?
すっかり忘れたけど。
-- う~ん、バッドノウハウ?
Re: (スコア:0)
Prologの学習中なんで書いてみたけど、B-Prologに固有の述語に依存したコードしか書けなかった
main(N) :- N 0, !.
main(N) :-
sub(N, OP1, OP2, OP3, OP4),
format('~d = 6 ~s 4 ~s 5 ~s 2 ~s 1~n', [N, OP1, OP2, OP3, OP4]),
N2 is N - 1,
main(N2).
sub(N, OP1, OP2, OP3, OP4) :-
OPs = [OP1, OP2, OP3, OP4],
OPs in ["+", "-", "*", "/"],
Re: (スコア:0)
カッコ使うのはありなん?
Re: (スコア:0)
なんでスペースを6つにした!言え!
Re: (スコア:0)
この問題に限れば、このコードで正解なんだろうけど、一般の場合にはどうればいいんだろう。
つまり、このコードだと、割り算の結果が浮動小数点の呪いでわずかな誤差になって正解が見つからないという罠がある数字の配置になってるとしたら。
有理数が扱える言語で書くのが正解?
どの組み合わせの割り算をしても、いつでも整数になるように、適当な数を、それぞれの数に掛けておく?
うちはLinuxコマンドライン派どす!! (スコア:0)
これでええんやろか?
for i in 6{+,-,*,/}5{+,-,*,/}4{+,-,*,/}3{+,-,*,/}2{+,-,*,/}1 ; do bc -l $i ; done |grep -F -v '.' | sort -n -u | xargs
-115 -114 -113 -57 -56 -55 -53 -52 -51 -24 -23 -22 -21 -20 -19 -18 -16 -15 -14 -13 -12 -10 -9 -8 -7 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 24 25 26 27 28 29 30 31 32 33 34 35 36 38 39 40 41 43 44 45 53 54 55 63 64 65 67 68 69 113 114 115 116 118 119 120 121 122 124 125 126 127 357 358 359 361 362 363 719 720 721
0日から45
Re: (スコア:0)
うう、<が消えてもうたわ…
for i in 6{+,-,*,/}5{+,-,*,/}4{+,-,*,/}3{+,-,*,/}2{+,-,*,/}1 ; do bc -l <<< $i ; done |grep -F -v '.' | sort -n -u | xargs
Re: (スコア:0)
【生命、宇宙、そして万物についての究極の疑問の答え】が抜けているではないか。
17日前からのカウントダウンなら (スコア:1)
数字4つ(1,8,2,4)で済んだのに!
Re: (スコア:0)
4つの数字(車のナンバーとか、切符に印刷してある数字とか)で1から10まで作る暇つぶしをしてたのを思い出した。
3はおいてきた、ハッキリ言ってこのイベントにはついてこれそうもない (スコア:0)
こういうの、どうやって見つけるのだろう
Re:3はおいてきた、ハッキリ言ってこのイベントにはついてこれそうもない (スコア:2)
プログラム作って後は当てはめて結果見るだけでは(実際してみた)。
多分、どこに割り算来ても 割り切れるか 少数が X.5 だけにしたいので
3はダメで4と5の順番が逆、なんだと思います。
私も自分ではこんなお洒落なの思いつかないです。
Re: (スコア:0)
使ってる5個の数字に何か意味あるのかと思ったけど特に無いっぽいな。
Re: (スコア:1)
1桁の数字5つと四則演算のみで30日以上のカウントダウンができる。
という条件の中で、選んだ数の合計が最小になるのが今回の数字みたいですね。
せいぜいタクシー数くらいの意味の無さかな。
Re: (スコア:1)
最初の二つが6,4なのは今回が「第64回」だからでしょう。
のこりの5,2,1は全パターン網羅できるようにするためで意味なしかな。
第64回11月祭で「6,4,1,1」なら美しいんだけど、4までしか無理で5が作れない。
22年第64回11月祭で「2,2,6,4,1,1」なら30までいけますね。
Re: (スコア:0)
創立125周年だからだとか
Re: (スコア:0)
これが学園4コマとかだと、この看板を作った人の試験結果の点数(5教科)あたりがオチかな。
頭の体操 (スコア:0)
手で1から順番に作ってみましたが、30まではわりと簡単にできました。
最初はちょっと考え込んだりもしましたが、慣れてくるとコツみたいな
ものもわかってきました。
例えば、最後が2と1なので、
・・・-2-1
・・・-2*1
・・・-2+1
・
・・・+2-1
・・・+2*1
・・・+2+1
で連続する7つのうちの6つは作れるとか。
目的の数値になる演算子の組み合わせを複数考えるほうが、頭の体操
としては厳しいですね。
ひとつの解が得られると、別の解を求めるための頭の切り替えが難しいし、
全部を洗い出したと確信できないので。