プログラミングのお題スレ Part21

■ このスレッドは過去ログ倉庫に格納されています
2022/11/13(日) 19:00:36.84ID:ZCYlhUwL
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

※前スレ
プログラミングのお題スレ Part20
https://mevius.5ch.net/test/read.cgi/tech/1624028577/
2419
垢版 |
2022/11/15(火) 19:36:17.27ID:Er9Q2z1T
上でいってるやつをコードにした
一個結果がちがってるが よく検討していない

Python
https://ideone.com/yXUVxt
2022/11/15(火) 19:43:49.49ID:Er9Q2z1T
可能性としては、このアルゴリズム自体が最小値を出す可能性があるだけでかならずしも最小値ではないだとおもう
2022/11/15(火) 19:49:17.64ID:JkHLyKfV
http://ideone.com/FrRkof

5年前のコード
27デフォルトの名無しさん
垢版 |
2022/11/15(火) 19:57:19.27ID:fFtAGper
Pythonって{}がないの見ずらいよな
2022/11/15(火) 21:23:24.85ID:JkHLyKfV
>>25
可能性だけならただの乱数でもある
2022/11/15(火) 21:35:09.43ID:Er9Q2z1T
>>26
修正しておなじやつ全部解けたけど、最小値を出す保証はないとおもう

https://ideone.com/SGX9y8
2022/11/15(火) 21:45:59.70ID:Er9Q2z1T
大局的なこと、試行錯誤はやらずに空レーンでの待ちが少なくなるように2個セットをつくり続けて寿司個数が少ない場合に帰着させるだけ
これで正解が出させるほうが不思議
2022/11/15(火) 21:59:09.72ID:JkHLyKfV
2_22
とか合う?
2022/11/15(火) 22:11:55.75ID:Er9Q2z1T
>>31
それ自分だと9秒になるが、>>26だと8秒になるな
しかし、どうやっても8秒だと無理とおもうが
人間の試行錯誤で
2022/11/15(火) 22:47:43.33ID:Ohwd0nE1
>>32
これじゃダメ?
1: *_22(取る)
2: _*22(食べる)
3: __22(休み)
4: __2*(取る)
5: *_2_(食べる)
6: _*2_(休み)
7: __*_(取る)
8: ___*(食べる)
2022/11/15(火) 23:06:20.13ID:Er9Q2z1T
>>33
8を確認できたよ
2022/11/15(火) 23:13:48.23ID:sZoewxQg
今上がってる
24
26
29
が線形時間で動くコード?
2022/11/15(火) 23:14:58.48ID:Er9Q2z1T
空なしで連続して食べれるなら食べてしまうやり方で失敗する例が2_22か
これがあるならば待ちで0か1で食べれるのに2以上待たないと駄目な例もありそうだ
ややこしい
2022/11/15(火) 23:57:32.70ID:2AYn/DUp
これリニアオーダーで動くアルゴリズムがある事実証できてるの?
>>22はリニアになるの?
38デフォルトの名無しさん
垢版 |
2022/11/16(水) 00:21:37.28ID:G5qDJNLu
リニアは完成しません
2022/11/16(水) 03:02:11.82ID:NCFSxcTe
連続食いアルゴリズムだと
2_22 よりも3_22や3_23の簡単だが
9以下が言えたら8では出来ないかチェックするために
寿司の総和時間が7、8となるように元の寿司を巨大化させ再チェックすればいいか
計算量はちょっと増えるがこれで見逃しはなくなるはず
2022/11/16(水) 05:56:24.40ID:oFhcaWBW
>>35
>>26は線形時間で最小値を返す
2022/11/16(水) 06:53:13.58ID:EsdxIXYC
>>40
すいません
数学的な証明おながいします
2022/11/16(水) 12:57:24.30ID:NCFSxcTe
寿司をわざとデカくして連続食い優先アルゴリズムで、食べ飛ばしに対応させようとしたけど
たとえばこれだと今の寿司の時間の合計は41で、
合計が59になるように寿司増量するやり方は相当あって、その組み合わせを生成するだけでも困難な数だった
この方針は断念すべきか

"4_35_1264_23_434" > 60秒
2022/11/16(水) 13:03:55.89ID:NCFSxcTe
>>29と同じアルゴリズムと同じPythonだが
重複するコードとforを別の記述してコンパクト化
最小値候補を見つけるにすぎない、最小値を確定させるのは断念するか

https://ideone.com/1Y1x6Y
2022/11/16(水) 16:16:26.72ID:NCFSxcTe
>>26は解読できないが
これは探索しないと無理な気がしてきたが
リストが与えられたときに確実に連結させされるペアを
探索なしで静的に確定させられるならnのオーダーといえるだろうが無理な気がしてきた
2022/11/16(水) 17:53:26.07ID:c8CIrVo9
今のところ>>26が最小解をリニアオーダーで与える事の証明上がってこないけど5年前は誰かその証明つけてたん?
2022/11/16(水) 18:08:13.75ID:0SRtJZkl
寿司問題ってもう5年前か
時間が経つのはあっという間だな
2022/11/16(水) 18:09:58.47ID:73mUL53O
https://ideone.com/qPsn3a

5年前のメモです
証明が非常に簡略化して書いてあります
(書いた本人でも解読に時間がかかる)
またコードにコメントで計算量が書いてあります
参考にしてください
2022/11/16(水) 18:16:29.54ID:KrTfkbbL
コレはわかんないな
なんかの基準で候補を絞ってその中で1番短いの見つけてるっぽいけど、その絞り込んだ候補の中に必ず最小元がある事の証明はコードだけではわからないよ
2022/11/16(水) 18:34:21.69ID:oFhcaWBW
寿司をグループに分けるまでが肝 (メモに書いてある同値関係)

あとは簡単
2通りに場合分けして簡単な計算をするだけ
50デフォルトの名無しさん
垢版 |
2022/11/16(水) 18:48:37.15ID:+z5R74k6
よくわからんけど全通り計算して最短出すだけじゃね?
2022/11/16(水) 19:07:16.92ID:cFPybB+5
>>50
それだと多項式時間も無理やろ
2022/11/16(水) 19:12:57.18ID:cFPybB+5
ダメだ
完備からわからん
2022/11/16(水) 19:15:39.75ID:cFPybB+5
まずレーンからわからん
数学の世界でない用語でしかも定義がないとわからん
ちゃんと文章になってたら前後の文脈から推定できたりもするけど文章じゃないからエスパーのしょうがない
2022/11/16(水) 19:23:09.38ID:NCFSxcTe
ざっとみて正解を確信できん
平易な説明文であってるだろうと思わせることはできないか
2022/11/16(水) 19:26:49.63ID:cFPybB+5
どやろ
あってるっぽい香りはするけど
多分本人の備忘録に過ぎないもので元から他人に理解してもらうつもりに書いてないな
2022/11/16(水) 20:48:00.35ID:e9wPR8OQ
ヨハネの黙示録が読めるサイト 076
https://www.biblegateway.com/passage/?search=%E3%83%A8%E3%83%8F%E3%83%8D%E3%81%AE%E9%BB%99%E7%A4%BA%E9%8C%B2%201&version=JLB
2022/11/16(水) 21:17:22.81ID:4txMvLbY
>>12 octave
https://ideone.com/In2JqK
function n = f(s)
k = 'IVXLCDM';
v = [1 5 10 50 100 500 1000];
h = @(x) v(k == x);
n = sum(arrayfun(@(c, d) [h(c) -h(c)](1 + (h(c) < h(d))), s, [s(2:end) s(end)]));
end
2022/11/16(水) 21:21:09.43ID:cmcq5fdu
やっぱり無理やな
おそらく“最小完備閉路”なるものが存在してその中で最小であるものは線形時間で見つかるを示すんだろうけど“最小解は必ず最小完備閉路”である事の証明が1ミリもない
せめてその証明があれば逆にその証明から“完備閉路”の意味をエスパーもできるかもしれないけど
2022/11/16(水) 21:35:17.30ID:oFhcaWBW
最小完備閉路分解

×「最小完備閉路」への分解
○完備閉路分解のうち(完備閉路の)個数が最小の物
2022/11/16(水) 21:38:21.99ID:oFhcaWBW
閉路 : (開始位置はどこでもいいけど)丁度n周でお寿司をたべる食べ方

完備閉路 : 効率の良い閉路
2022/11/16(水) 21:40:24.42ID:oFhcaWBW
最小完備閉路分解 = お寿司のグループ分け ( >>49 )
2022/11/16(水) 22:24:11.29ID:w7g1vMWn
>>61
あなた筆者
ごめん、メモは全くわからないです
もうちょっと数学っぽく書けませんか?
2022/11/16(水) 22:56:20.32ID:oFhcaWBW
私の中では解決済みの問題ですので
時間をかけて厳密な記述や分かりやすい記述にしようという気力はありませんし
多くの人に理解してもらおうとも思っていません

メモは私用に書いたもので
グラフ理論の用語や独自定義の言葉などが混ざっています

気に入らないなら見なかったことにしてご自分でゼロから考えてください

しばらく消えます
では
2022/11/16(水) 23:12:25.33ID:w7g1vMWn
あらら
ま、しょうがないですね
私は撤退
2022/11/17(木) 01:13:18.40ID:KcdxatnU
これでいいんじゃないの?
下限を計算してるけど答えから逆順に取っていけば必ずうまくいくはず
https://wandbox.org/permlink/oyLHJmsPlbkRgyi7
2022/11/17(木) 02:10:10.21ID:KcdxatnU
んー最後にループをまたぐものが残ることがあってだめなのか
2022/11/17(木) 03:38:45.18ID:o2xnx2y6
>>65
できる理由がわかってないが終了位置が特定できるなら良いとおもうが
検討してみる
2022/11/17(木) 05:44:20.80ID:o2xnx2y6
>>65
理解した、この方針でよさげ
これで出来てるのはたまたまで
終了位置は特定できないかと
修正してみる
2022/11/17(木) 05:48:59.97ID:cnoQIz8b
いくつかの例でうまく行ったとしてホントにそのアルゴリズムで“常に”上手くいくとは限らないからな
“常に”上手くいく事を主張するには結局数学的に証明するしかない
2022/11/17(木) 06:04:15.66ID:cnoQIz8b
例えば寿司が連続9個空の部分があってそのいずれかからスタートする場合を考えるなら全ての周回で元の位置に戻ってくる時には口に何も入ってない状態になる
その場合に全ての周回で毎回「寿司を常に可能な限りとれるだけ取る」事で最小な解を与えるとは限らないやろ
あえてそのような最小解でない解をうまく組み合わせると全体としては最小になる可能性もある
2022/11/17(木) 09:44:24.90ID:o2xnx2y6
>>65
指摘されるまで気づかなかったが
最小値の下限はこういう風に簡単に評価できるんだな
>>47の人も多重度とか乗ってるし考慮してるのかと
>65は最も小さくできる場合の可能性であって実現性は考慮されてなく実際できるか調整ないと
2022/11/17(木) 09:51:09.17ID:Az3fhAqF
一般での証明を解説するのは諦めたけど
具体例であればアルゴリズムと証明を書いて差し上げます

1周20秒以内で1問出してくださいな
2022/11/17(木) 10:15:04.69ID:o2xnx2y6
>>47 と同じアルゴリズムだけどリメイクした、かならずも正解はださない

https://ideone.com/n9MvXp
2022/11/17(木) 10:15:54.14ID:o2xnx2y6
>>47ではなく>>65 と同じだった 間違い
2022/11/17(木) 10:29:29.68ID:o2xnx2y6
>>73はmaxvalの位置で終わることを想定してるが
問題点としては、そのような選び方が存在するか OR 終了位置がmaxvalよりも後方へずれる可能性
がある点
修正できてない
2022/11/17(木) 12:55:12.66ID:PrtZybxD
とりあえず証明はできた
今晩家帰ったら書きます
2022/11/17(木) 13:59:21.26ID:o2xnx2y6
>>65
最小値下限と終了位置候補がわかっているのは大きいが
実際にできるのか、そのルートを構成するしかないとおもってきてる
実際につくるとなると手間だ
2022/11/17(木) 14:38:50.13ID:ExpEnY6p
例えば寿司の配置が
┓       ┏━━━━
       ┏━┓
     ┏━━━━┓
  ┏━━┓
┏━━┓
2122121233211
のような場合10番目のところが3なので最低でも3週目の10秒目までは絶対に終了し得ない
ミソはこの10番目で必ず食べ終えることができる寿司、上の例では上から2番目の寿司があって、必ず3週目の10秒の時点でこの寿司を食べ終える解が存在する事を示すことですな
2022/11/17(木) 14:53:14.71ID:o2xnx2y6
>>78
123456789123456789 の解答は98だが
>>65>>73 だと90 となり、訪問回数を表すAの値はこれ
こういったケースだと末尾9を食べて98になるのか?どういう条件でズレが生じるかわからん

[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
2022/11/17(木) 15:02:26.95ID:ExpEnY6p
とりあえずザックリ説明

(i)多重度最大、最後尾に寄与する寿司を取り除いても最大多重度が変化しない時
(下図のような場合2番目、3番目寿司を取り除いても最大多重度は3のままである)
┓       ┏━━━━
       ┏━┓
     ┏━━━┓
  ┏━━┓
 ┏┓
┏━━┓
2232121233111
この場合、多重度最大、最後尾に寄与する寿司を取り除いた状態における最大多重度、最後尾(例えば上の例で2番目の寿司を取り除くと、最高多重度、最後尾は多重度3、最後尾は3番目の位置となる)に寄与する寿司(上の例だと5番目の寿司)を最後に食べる解が存在する、その解にいま取り除いた寿司を最後にさらに食べる事にすれば良い
(ii)多重度最大、最後尾に寄与する寿司を取り除くと最大多重度が1下がるとき
(下図のような場合2番目、3番目の寿司を取り除くと最大多重度は2になる)
┓       ┏━━━━
       ┏━┓
     ┏━━━┓
  ┏━━┓
┏━━┓
2122121233111
この場合、多重度最大、最後尾に寄与する寿司を取り除いた状態における最大多重度、最後尾(例えば上の例で2番目の寿司を取り除くと、最高多重度、最後尾は多重度2、最後尾は10番目の位置となる)に寄与する寿司(上の例だと3番目の寿司)を最後に食べる解が存在する、その解にいま取り除いた寿司を最後にさらに食べる事にすれば良い
2022/11/17(木) 17:27:46.12ID:o2xnx2y6
>>65
ざっくりではこれでよく、ここかこれ以降の少しずらしたところが解だが
それを特定してるのが>>47
簡単には終了位置がわからないが
2022/11/17(木) 17:32:27.60ID:o2xnx2y6
>>80はいまいちわかってないけど
終了位置にある寿司を取り除くというのはやってみた、かんがえてみたけど進展なし
2022/11/17(木) 19:38:45.23ID:gFftq2Y+
┓       ┏━━━━ ‥①
       ┏━┓   ‥②
     ┏━━━┓   ‥③
  ┏━━┓       ‥④
 ┏┓          ‥⑤
┏━━┓         ‥⑥
2232121233111
②番目を取り除く

┓       ┏━━━━ ‥①
     ┏━━━┓   ‥③
  ┏━━┓       ‥④
 ┏┓          ‥⑤
┏━━┓         ‥⑥
2232121122111
⑤番目を取り除く

┓       ┏━━━━ ‥①
     ┏━━━┓   ‥③
  ┏━━┓       ‥④
┏━━┓         ‥⑥
2122121122111
③番目を取り除く
2022/11/17(木) 19:39:05.19ID:gFftq2Y+
┓       ┏━━━━ ‥①
  ┏━━┓       ‥④
┏━━┓         ‥⑥
2122110011111
⑥番目を取り除く

┓       ┏━━━━ ‥①
  ┏━━┓       ‥④
1011110011111
④番目を取り除く

┓       ┏━━━━ ‥①
1000000011111

よって①④⑥③⑤②と食べれば3週目の10秒目で完食できる解が見つかる
これより早く完食する解はない
2022/11/17(木) 20:25:14.64ID:o2xnx2y6
>>84
それは>>73の解けるという証明?
しかし例外があるはずだが
123456789123456789 の答えは98のはずなのに
周回数の最大値の終わりを解答するプログラムでは90を返す
2022/11/17(木) 21:07:09.32ID:YQ0wrIBf
確認してみる
行けるはずだけど
2022/11/17(木) 21:17:34.64ID:gay+lHsH
その98は絶対正しいの?
全数検査かなんかで確認済み?
2022/11/17(木) 21:44:23.04ID:KK3w9Zce
VBA + Selenium + Chrome で自動ログインをツールを作っています。

Dim Driver As New Selenium.WebDriver

ログインした後にパスワードを保存しますか?
というダイアログが出て邪魔でしょうがないです。
それを削除する為に

credentials_enable_service  false
profile.password_manager_enabled false

を使うのは分かったのですが、pythonやjavaのコードばかりブログに乗っていて
VBAの文法でどう書けば良いか分かりません。

詳しい方がいたら教えてください。
2022/11/17(木) 21:55:43.57ID:Wlu1Qlnf
すまん
確かに98やな
ちょっと直せるか考えてみる
2022/11/17(木) 22:23:15.24ID:o2xnx2y6
短縮したこれでも同じだな
これと同様に最後は末尾の3を引いて12ではなく、14が正解か

"123123"
2022/11/17(木) 22:26:58.70ID:o2xnx2y6
123123を変形した
303303とか306300も答えは14のはず
2022/11/17(木) 23:14:57.70ID:o2xnx2y6
これはわかりやすいが
食べ終わりは2週目ラストではなく、
3週目の6がカウントする部分までだな

306300
2022/11/18(金) 00:46:49.06ID:Jf5+Eiz/
試行錯誤の途中経過をメモ代わりに書くな
じゃま
2022/11/18(金) 02:12:11.66ID:DAdKu+db
もともと過疎スレなんだし別にええわ
2022/11/18(金) 02:26:30.92ID:UFs4jVzI
この板じゃ勢い有る方なんだが
2022/11/18(金) 08:48:56.46ID:e00YeA2g
お題でないと過疎るんだよなこのスレ
当たり前だが
2022/11/18(金) 11:28:52.19ID:Vwvz9k4H
まぁ今の問題が片付かないと次の問題出しにくいはあるから、こういう中々片付きそうもない話題が出てしまうと次が出てきにくくなる
もう寿司はやりたい人が各々考える事にして一旦保留でいいんじゃないかな
2022/11/18(金) 12:20:43.66ID:e00YeA2g
しかし5年経っても話題がつきないお題と言うのはなかなか珍しいな
2022/11/18(金) 12:22:59.15ID:Y7aJwgmv
ネタが尽きないな、回転寿司だけに(ドャ
2022/11/18(金) 12:48:38.66ID:oGVOwjfU
普通に次のネタ振ってそれが興味深けりゃそっちに移るでしょ
次のネタもない状態で保留にしろとか過疎らせようとしてるのか?
2022/11/18(金) 13:21:27.34ID:Vwvz9k4H
しかし実際難しいやん
言ってる人のも怪しいしな
少なくとも数学科卒なら自分のアイデアちゃんと証明できないなんてことはないし、そうでないならできてないか、できたと勘違いしてるかもしれないし
答え出ない問題なんか数学の世界には死ぬほどあるしな
2022/11/18(金) 13:23:15.17ID:e00YeA2g
たぶん寿司問題のレベルが高くて付いていけない人が多いんだと思う
俺も付いていけてないが別に保留しなくても良いと思う
2022/11/18(金) 13:33:26.86ID:Vwvz9k4H
>>102
だって解ける気配なんかしないのに意味あるんかそれってレスばっかり連発してるやん
2022/11/18(金) 16:29:31.41ID:e00YeA2g
>>103
寿司問題スレか難問専門スレが必要ってことかな
2022/11/18(金) 16:40:21.60ID:Lrs4Z8Ag
寿司問題、証明はできてないが正しいとおもえる予想はできた
与えられた寿司レーンで、すべての寿司に対して自身の皿を含めた訪問回数の総和配列を計算 >>73>>65
たとえば、"220"ならば、「110」 + 「011」 → 「121」 
この配列の値のどれか一つが異なるならば、その最大値とその末尾の位置を(m,i)とすると
答えは レーン長* (m-1) + i +1 >>73>>65
配列の値がすべて一致するならば、各寿司の位置からそれを食べたときに最も2週目へ移動したものの先頭からズレを
上記の値に足したものが答え
たとえば、"053" の最長のズレは5を食べたときで3
2022/11/18(金) 16:40:39.24ID:e00YeA2g
難問でスレが消費されるならこっちのスレから難問スレに輸入していくって手もあるが
それだとこっちのスレが過疎るかな?
2022/11/18(金) 16:43:38.78ID:Lrs4Z8Ag
>>105
後半部分(配列が全一致)のとき、2週目へ進む寿司が存在しないなら、足すものはゼロ
2022/11/18(金) 17:02:28.23ID:3mfi4Y0d
>>105
アホの「正しいと思える予想」ほど無意味な物はないということがよく分かる

>>104
難問かどうかなんてわからんぞ
今まで簡単と判断されていた問題だって
計算オーダーを大きく減らせるかもしれないし
2022/11/18(金) 17:24:10.91ID:Lrs4Z8Ag
>>105に基づくコード 

https://ideone.com/LU4Nuk
2022/11/18(金) 17:41:04.58ID:3mfi4Y0d
正しいかどうが自分で判定できませんか?
2022/11/18(金) 18:31:42.48ID:3mfi4Y0d
このスレこいつの日記で埋まる
2022/11/18(金) 21:16:31.80ID:MjVe3VuH
数学の天才が1週間で作ったコード
5年たっても誰も理解出来ない
2022/11/18(金) 21:38:54.52ID:lXZZLQm+
>>112
それも正しいかどうか嘘くさい
そもそも数学勉強してて数学で説明できないような奴の話し信用ならん
2022/11/18(金) 21:41:07.64ID:8xkwlGkz
多分

>>72

> 一般での証明を解説するのは諦めたけど
> 具体例であればアルゴリズムと証明を書いて差し上げます
>
> 1周20秒以内で1問出してくださいな

コレ作った本人の談なんだろうけどコレは数学便所した人間なら事実上の「私できませんでした」宣言に等しい
2022/11/18(金) 22:50:50.53ID:Lrs4Z8Ag
>>105 >>109 で完全解決したとおもうが
>>105の前半を最大重複度の末尾で終わらせる事(これで意味通じるとして)ということにしてこれが可能なことは分かる、しかもこれより短い終了もない
後半はその2週目にずれるその寿司を取り除くことで上の場合になる
その寿司を最後で食べない場合は、最後に食べる場合以上の時間がかかるはず
ここは証明しろといわれるとすぐできるかわからない
2022/11/18(金) 23:19:36.02ID:4CkGjyUN
だから「証明できそうだ」とかはもういいよ
2022/11/19(土) 05:06:14.80ID:0goRG+W2
寿司問題 コードと問題と証明
https://ideone.com/3Uq6Ee
2022/11/19(土) 05:58:43.22ID:vhoNUC3b
1_3
2022/11/19(土) 06:02:22.90ID:vhoNUC3b
アホの証明休むに似たり
2022/11/19(土) 09:39:16.17ID:0goRG+W2
>>118
最も合ってるらしいコードとして、まだもれあるかもしれず
https://ideone.com/p7odZj
2022/11/19(土) 09:44:42.86ID:EU6zSqMI
33
2022/11/19(土) 09:47:02.19ID:EU6zSqMI
自分で検証する気ゼロ?
2022/11/19(土) 09:49:19.47ID:EU6zSqMI
まだまだ全然遠いから
勘じゃ当たらんよ
2022/11/19(土) 10:36:45.85ID:0goRG+W2
>>121
自身へ戻ってくるのは対象外にしてた
それだと11と本質的に一緒だろうと
自己ループを数えるのをいれた

https://ideone.com/IyRWnd
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況