プログラムを始めて3年、ついに「4つの数字で10を作るプログラム」が完成した
■ このスレッドは過去ログ倉庫に格納されています
はい
import random
while True:
numbers = [random.randint(1, 10) for _ in range(4)]
total = sum(numbers)
if total == 10:
print("合計が10になりました:", numbers)
break 全組み合わせ総当りすんの?
それともある程度数学的に判定してる? でもよく考えると
4! × 4^3
ぐらい試せばいい気がしてきた AIにはこういう人間の勘も再現できるようになってほしい >>21
可能な組み合わせ全部出せる?
それとも一個見つかったら終わり? プログラムで解いてほしいんだけど
1150も解いてみて むしろ拡張してさ、
任意の自然数の列a_nが与えられたときに、mを作れるか?にしようぜ >>45
なるほど
思ってたよりは高度なことをやってるのかもしれない >>20
隣接する数字は2桁で使えるルールは?
(-9+99)/9 = 10 >>55
8円バイトでしょうw
永野芽郁のネガキャン工作もやるでしょうランサーズなら
ヤフーやがるちゃんでも無理矢理浜辺を持ち上げ擁護工作書き込みしてるバイトを雇ってるわけだし
当然反対に何も悪いことをしてない永野芽郁が理不尽にネガキャンされるのも同じこと
永野芽郁と今田美桜はリアル人気ある
橋本環奈と浜辺美波はステマ水増し工作で人気あるふうに工作してるその現実ははっきりさせないと
水増しステマ業者ランサーズの工作やろうな
水増し工作できない リアル人気は永野芽郁と今田美桜の2強なんだな
金で買えるステマランキングはガーシー姉妹 橋本環奈とパパ活浜辺の2強
【2024最新】プロ野球選手の好きな女性芸能人
http://y2u.be/5JWkGVMOXKg
@24票 永野芽郁
A23票 今田美桜
B20票 有村架純
C15票 新木優子
D14票 広瀬すず 新垣結衣
F12票 橋本環奈
G11票 本田翼
H10票 山本舞香
I9票 長澤まさみ
【2024最新】Jリーガーが選ぶ、好きなタレント、芸能人
https://news.yahoo.co.jp/articles/b2512b6063e1cadab110fd22db3c8d02cc5e0abb
1位 千鳥(101票)
2位 今田美桜(46票)
3位 永野芽郁(45票)
4位 長澤まさみ(41票)
5位 川口春奈(36票)
6位 かまいたち(34票)ダウンタウン(34票)
8位 新木優子(33票)
9位 粗品(霜降り明星)(29票)
10位 有村架純(25票)
5頭身チビブスだし ほうれいせんきつい笑顔もダメだし身長も嘘ついて演技も大根なのに完璧なのように東宝がステマゴリ押しで滑稽だよな
↓
https://video.twimg.com/tweet_video/GCOcsySa8AAMnFX.mp4 総当たりで割り算してると踏んで0除算ハメようとしたやつが居るな >>62これができて>>48これが出来ないのは括弧の問題じゃないな 四則演算はさんで
カッコを組み合わせパターンでつける
みたいな?
(1+2)×(3÷4) >>47
(9+9)/9+8
>>1早くデバッグしろ無能
じんりょくぷろぐらまー🌱 もしかしてだけど計算結果を小数で管理してる?
最終的にans==10で判定してて、>>48は誤差で死んでるとか 数字全パターンリストに入れて二分探索したらO(nlog)で爆速で終わらせれて最強じゃないの quizknockに自力で解くのとそれを解き終わる前にその場でコード組んでから流すのの競争やってる動画あったよね >>78
単調性あるように全パターン列挙って無理じゃね? >>78
全パターン入れるんなら辞書型でキーで引っ張るだけじゃね >>78
たかだか24*4*4*4*7パターンだから高速化するまでもない >>67
カッコの付け方は何通りだろうか
数学みたいで >>83
0,0,0,xとか使わんのあるし重複も大量にあるから4次元配列だとメモリ無駄かなって
作ってしまえば変わらんけど 入れる箇所は 8箇所
それぞれに カッコ開くと カッコ閉じる を複数をいれてもいい
ただし カッコ開くと カッコ閉じる の帳尻が合わなければならない >>84
動画一本のうちに完成させてるしプログラム完成が主旨ではないのな 演算の 直前は 開いてはいけない
演算の 直後は 閉じてはいけない 小町算プログラム昔作った
()ありは結構難しい
4桁なら何とかなるけど桁数増やすとアルゴリズムの知識が必要になる 逆ポーランド記法で組み合わせ考えていけば、括弧開く閉じるの考慮しなくて済んで楽だぞ >>95
あったなそんなの
こういう時のために使うのか >>89
辞書型でもキーと値と二分探索木に必要なポインタでメモリ食うし、なら4次元配列の方がシンプルだし速いしいいかなと思ったんだけど >>74
できる
>>76
(7/7)+3*3
>>96
2*(3-5+7) >>95
ググったら
なtるほどとおもった
これなら
最大 (前に出た数字の数−1)だけ演算子を付けることができるのかな
3 4 + 5 × − 6 ÷ − +
みたいな >>97
本来は前から順に数式の文字をスキャンして計算できるように並べるやり方だけどね
今回のケースだと、数値4、演算子3の組み合わせの7文字で表記できて
先頭2文字は必ず数字
残りの5文字を数値2演算子3で埋めていけば網羅できそう >>102
括弧の組み合わせがおかしかった
>>103
それはなってる
今は入力で4つの数字と10をわざわざ指定してる 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通りだな
メモ化はズルだからなしとして 前に現れた数の個数−1だけ 演算ができて(しなくてもいい) トータルの演算回数は3回
といったかんじかな 賛否両論になった
これだと 括弧付きの 掛け算の 問題も 揉めることはなかった
これ
https://togetter.com/li/793433 >>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パターン考えられるが、いらないのはどれだろう? >>114
訂正
これだと
賛否両論になった
括弧付きの 掛け算の 問題も 揉めることはなかった >>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)も同様 6 2 ÷ 1 2 + × →9
なのか
6 2 1 2 + × ÷ →1
なのか
興味深い >>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通りでよかったわ >>118
20+1+(5-3-2)×(4+6+7+8+…+19) 多分「4つの数字」の部分を一般化すると一気に難易度が上がる
上手くやれば擬多項式時間でいけるかもしれないけど で、逆ポーランドで考えるとこの4パターンで網羅かな?
a b □ c □ d □
a b c □ □ d □
a b c □ d □ □
a b c d □ □ □ >>117
括弧7パターンに対して、逆ポーランド記法6パターンになるのはなぜか?という話
演算子がどのような組み合わせでも括弧を使うと必ず7パターンのうち一つだけどれか重複するってことか? で、>>123この4パターンで□は四則演算のどれかが任意で入るから、4パターン×4×4×4の256パターン総当たりで計算させれば良いだけだね
多分 >>124
演算の順序と括弧のパターンは一対一対応してない
a+(b+c)*d と a*(b+c)+d は括弧が同じで順序が違う
a+b+c+d と (a+b+c)+d は括弧が違って順序が同じ >>121
お見事。綺麗だね
ちなみに別解...
19-20/((1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16)/17-18) >>126 括弧無しなら楽勝すぎる
chatGPTに聞けば一瞬でコード書いてくれるよ 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での除算が発生しないように注意する必要があります。
このコードは総当たり法を用いており、効率的なアルゴリズムではありません。より複雑な問題や大量のデータに対しては、より高度なアルゴリズムや最適化手法を検討する必要があります。 >>123
逆ポーランド記法を今知ったけど多分(a+b)*(c+d)が抜けてる
a b □c d □ □ かな >>129
演算の順序から括弧は生成できるよ
括弧の付け方の総数は多分カタラン数とかになるんじゃないかな >>130
これは間違ってる
これだと(a+d)*b+cとかも見つけてくるはず 学生の頃は楽しかったなって思い出せたよ
ありがとな なるほど
逆ポーランド記法にしても
AIにしても
カッコにこだわらず 順番にやっていく
という考えでいいのか ただまあ、シンプルにスパッとワンライナーで書きたいかんじよね
書けるもんなら 結局、演算子は3つだからその順番を考えれば良いのか
3つの順列は6パターンだけど132の順で計算するパターンと312の順で計算する場合は同じことだから5パターンか というか0作って消せるように計算できる時点でテストケースとしてあまり良くなかったは ■ このスレッドは過去ログ倉庫に格納されています