プログラムを始めて3年、ついに「4つの数字で10を作るプログラム」が完成した

■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:08:21.937ID:t7eX2sMy
これで億万長者だ

0093以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:42:46.269ID:EIzTHWtQ0
>>92
関白宣言かな

0094以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:43:24.626ID:sbMxEd/60
小町算プログラム昔作った
()ありは結構難しい
4桁なら何とかなるけど桁数増やすとアルゴリズムの知識が必要になる

0095以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:43:25.853ID:5vTcmjf00
逆ポーランド記法で組み合わせ考えていけば、括弧開く閉じるの考慮しなくて済んで楽だぞ

0096以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:44:16.513ID:43QMZVNM0
2357

0097以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:44:52.019ID:F4rj/0E10
>>95
あったなそんなの
こういう時のために使うのか

0098以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:45:35.456ID:t7eX2sMy
>>86
ようやくなおった
対応できた

0099以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:46:04.827ID:z7EJyAxB0
>>89
辞書型でもキーと値と二分探索木に必要なポインタでメモリ食うし、なら4次元配列の方がシンプルだし速いしいいかなと思ったんだけど

0100以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:48:29.263ID:t7eX2sMy
>>74
できる

>>76
(7/7)+3*3

>>96
2*(3-5+7)

0101以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:49:16.680ID:L4894J4/x
>>100
おぉー

0102以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:50:11.113ID:A9eCH5Xe0
>>98
原因は?

0103以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:50:36.347ID:SopSprlA0
次はN個の数字でKを作れるように改良しよう

0104以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:53:38.411ID:IkOIQe410
>>95
ググったら
なtるほどとおもった

これなら

最大 (前に出た数字の数−1)だけ演算子を付けることができるのかな

3 4 + 5 × − 6 ÷ − +

みたいな

0105以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:53:38.919ID:5vTcmjf00
>>97
本来は前から順に数式の文字をスキャンして計算できるように並べるやり方だけどね

今回のケースだと、数値4、演算子3の組み合わせの7文字で表記できて
先頭2文字は必ず数字
残りの5文字を数値2演算子3で埋めていけば網羅できそう

0106以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:54:54.298ID:wDTdl97d0
>>80
ハッカソン的な感じか

0107以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:55:12.587ID:t7eX2sMy
>>102
括弧の組み合わせがおかしかった

>>103
それはなってる
今は入力で4つの数字と10をわざわざ指定してる

0108以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:56:16.052ID:XXLaKEYXd
ヒットアンドブローの方がゲーム性高くないか?

0109以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:56:17.656ID:IkOIQe410
>>104
いやちがうな

0110以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:57:09.108ID:cjh9Ez/X0
>>78
O(n)で良くね?

0111以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 20:57:57.735ID:cjh9Ez/X0
>>110
間違えたO(1)

0112以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:01:35.613ID:NXMpDSBY0
a,b,c,d→ab,c,d→abc,d→abcd
a,b,c,d→ab,c,d→ab,cd→abcd
みたいな計算の順序が3!=6通り
各ステップに入れる演算子が4^3=64通り
だから全探索したら384通りだな
メモ化はズルだからなしとして

0113以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:06:56.499ID:IkOIQe410
前に現れた数の個数−1だけ 演算ができて(しなくてもいい) トータルの演算回数は3回

といったかんじかな

0114以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:08:19.750ID:IkOIQe410
賛否両論になった

これだと 括弧付きの 掛け算の 問題も 揉めることはなかった


これ
https://togetter.com/li/793433

0115以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:09:03.033ID:i+rrknjh0
>>112
括弧を使うと
a⬜︎b⬜︎c⬜︎d
(a⬜︎b)⬜︎c⬜︎d
(a⬜︎b⬜︎c)⬜︎d
(a⬜︎b)⬜︎(c⬜︎d)
a⬜︎(b⬜︎c)⬜︎d
a⬜︎(b⬜︎c⬜︎d)
a⬜︎b⬜︎(c⬜︎d)
の7パターン考えられるが、いらないのはどれだろう?

0116以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:10:42.971ID:IkOIQe410
>>114
訂正

これだと 

賛否両論になった

括弧付きの 掛け算の 問題も 揉めることはなかった

0117以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:12:58.197ID:NXMpDSBY0
>>115
a□b□cみたいに3つ以上繋がってるのは演算子によって順序が違うから数え方として良くない
例えば(a⬜︎b⬜︎c)⬜︎dは(a⬜︎b)⬜︎c)⬜︎dとa⬜︎(b⬜︎c)⬜︎dと被ってる
a⬜︎b⬜︎c⬜︎dやa⬜︎(b⬜︎c⬜︎d)も同様

0118以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:15:28.504ID:SopSprlA0
じゃあ1~20の20個全て使って21作ってみて

0119以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:15:58.722ID:IkOIQe410
6 2 ÷ 1 2 + × →9

なのか

6 2 1 2 + × ÷ →1

なのか

興味深い

0120以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:17:23.078ID:NXMpDSBY0
>>115
括弧だと
123 : ((a⬜︎b)⬜︎c)⬜︎d
132, 312 : ((a⬜︎b)⬜︎(c⬜︎d)) 2個重複
213 : (a⬜︎(b⬜︎c))⬜︎d
231 : a⬜︎((b⬜︎c)⬜︎d)
321 : a⬜︎(b⬜︎(c⬜︎d))

132と312は重複してるから320通りでよかったわ

0121以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:18:08.200ID:IArowCHE0
>>118
20+1+(5-3-2)×(4+6+7+8+…+19)

0122以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:19:39.472ID:NXMpDSBY0
多分「4つの数字」の部分を一般化すると一気に難易度が上がる
上手くやれば擬多項式時間でいけるかもしれないけど

0123以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:19:56.830ID:5vTcmjf00
で、逆ポーランドで考えるとこの4パターンで網羅かな?

a b □ c □ d □
a b c □ □ d □
a b c □ d □ □
a b c d □ □ □

0124以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:20:23.193ID:SDPHri/U0
>>117
括弧7パターンに対して、逆ポーランド記法6パターンになるのはなぜか?という話
演算子がどのような組み合わせでも括弧を使うと必ず7パターンのうち一つだけどれか重複するってことか?

0125以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:24:43.295ID:5vTcmjf00
で、>>123この4パターンで□は四則演算のどれかが任意で入るから、4パターン×4×4×4の256パターン総当たりで計算させれば良いだけだね
多分

0126以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:25:05.167ID:NXMpDSBY0
>>124
演算の順序と括弧のパターンは一対一対応してない
a+(b+c)*d と a*(b+c)+d は括弧が同じで順序が違う
a+b+c+d と (a+b+c)+d は括弧が違って順序が同じ

0127以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:26:32.931ID:Dd/UbwFzr
こういうの()使ってはいけないんだぜ

0128以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:27:35.085ID:SopSprlA0
>>121
お見事。綺麗だね
ちなみに別解...
19-20/((1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16)/17-18)

0129以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:28:52.678ID:5vTcmjf00
>>126 括弧無しなら楽勝すぎる
chatGPTに聞けば一瞬でコード書いてくれるよ

0130以下、5ちゃんねるからVIPがお送りします🐙2024/02/25(日) 21:30:16.814ID:sPUiFSAQ0
GPT4の回答


0から9までの任意の4つの整数を使用して計算結果を10にするためのPythonコードを作成する場合、与えられた整数と任意の演算子や構文を用いて解を見つけるアルゴリズムが必要になります。このような問題に対処する一つの方法は、与えられた整数と可能な演算子の組み合わせをすべて試し、結果が10になる式を探すことです。

以下は、0から9までの任意の4つの整数と、加算(+)、減算(-)、乗算(*)、除算(/)、および括弧を含む可能なすべての演算子の組み合わせを使用して、結果が10になる式を探すPythonスクリプトの例です。このスクリプトは、総当たり法を使用して、可能なすべての式の組み合わせを生成し、評価します。

```python
import itertools
import operator

# 0から9までの4つの整数をユーザーから入力として受け取る
nums = [int(input(f"{i+1}つ目の整数を入力してください (0-9): ")) for i in range(4)]

# 使用可能な演算子
ops = [operator.add, operator.sub, operator.mul, operator.truediv]
ops_symbols = ['+', '-', '*', '/']

# 演算子のすべての組み合わせを生成
ops_combinations = list(itertools.product(ops, repeat=3))

# 数字の順列を生成
nums_permutations = list(itertools.permutations(nums))

# 結果が10になる式を見つける
for nums_perm in nums_permutations:
for ops_comb in ops_combinations:
# 式を構築
expression = f"(({nums_perm[0]} {ops_symbols[ops.index(ops_comb[0])]} {nums_perm[1]}) {ops_symbols[ops.index(ops_comb[1])]} {nums_perm[2]}) {ops_symbols[ops.index(ops_comb[2])]} {nums_perm[3]}"

# 式を評価
try:
if eval(expression) == 10:
print(f"見つかった式: {expression} = 10")
break
except ZeroDivisionError:
continue
```

このスクリプトは、ユーザーが入力した4つの整数に対して、可能なすべての演算子の組み合わせと数字の順列を試します。結果が10になる式を見つけた場合、その式を出力します。ただし、この方法は計算量が非常に多くなる可能性があるため、実行に時間がかかる場合があります。また、除算を行う際に0での除算が発生しないように注意する必要があります。

このコードは総当たり法を用いており、効率的なアルゴリズムではありません。より複雑な問題や大量のデータに対しては、より高度なアルゴリズムや最適化手法を検討する必要があります。

0131以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:31:17.029ID:NXMpDSBY0
>>123
逆ポーランド記法を今知ったけど多分(a+b)*(c+d)が抜けてる
a b □c d □ □ かな

0132以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:32:46.248ID:NXMpDSBY0
>>129
演算の順序から括弧は生成できるよ
括弧の付け方の総数は多分カタラン数とかになるんじゃないかな

0133以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:33:16.481ID:SDPHri/U0
>>123
a b □ c d □ □
は?

0134以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:33:27.370ID:5vTcmjf00
>>131
ほんとだ
5パターンか

0135以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:34:35.935ID:NXMpDSBY0
>>130
これは間違ってる
これだと(a+d)*b+cとかも見つけてくるはず

0136以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:37:39.759ID:gD4wxKXd0
学生の頃は楽しかったなって思い出せたよ
ありがとな

0137以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:38:12.062ID:IkOIQe410
なるほど

逆ポーランド記法にしても

AIにしても

カッコにこだわらず 順番にやっていく

という考えでいいのか

0138以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:41:40.745ID:5vTcmjf00
ただまあ、シンプルにスパッとワンライナーで書きたいかんじよね
書けるもんなら

0139以下、5ちゃんねるからVIPがお送りします🐙2024/02/25(日) 21:42:26.555ID:sPUiFSAQ0
>>135
あかんのか…

0140以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:42:34.253ID:SDPHri/U0
結局、演算子は3つだからその順番を考えれば良いのか
3つの順列は6パターンだけど132の順で計算するパターンと312の順で計算する場合は同じことだから5パターンか

0141以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 21:44:19.568ID:SopSprlA0
というか0作って消せるように計算できる時点でテストケースとしてあまり良くなかったは

0142以下、5ちゃんねるからVIPがお送りします2024/02/25(日) 22:01:50.743ID:cjh9Ez/X0

0143 2024/02/25(日) 22:17:39.316ID:fzKlUpkKd
()要らないところにつけるのは美しくない

■ このスレッドは過去ログ倉庫に格納されています