プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part15
http://mevius.5ch.net/test/read.cgi/tech/1564310397/
探検
プログラミングのお題スレ Part16
■ このスレッドは過去ログ倉庫に格納されています
2019/11/17(日) 09:00:22.10ID:xqEdXdr6
2019/11/17(日) 10:53:15.74ID:uilOlN75
>>1 おつ
3デフォルトの名無しさん
2019/11/17(日) 17:37:39.46ID:8gWobnsK val 乙 = "乙"
prontln(乙)
prontln(乙)
2019/11/18(月) 02:35:04.18ID:t9gVOJNg
お題:
https://i.imgur.com/JsMU4uh.jpg
明度が0〜9までのグレーの四角がグラデーション状に横並びにならんでいるとします
この状態だと隣接している四角と四角の明度の差が少ないので境目が見えづらいです
全ての四角同士の明度差ができるだけ大きくなるように並び替えるにはどういうロジックが考えられるでしょう?
四角の数が増えても対応できるような汎用的なロジックが望ましいです
両端は固定のままが理想ですが必須要件ではありません
・ボツ例:1〜4まで一つおきに左右端を入れ替える
(1) 1と8を入れ替える
(2) 2と7はそのまま
(3) 3と6を入れ替える
(4) 4と5はそのまま
※これだと4と5が隣り合ったままで明度差が少ない箇所が残るので最適解ではない
https://i.imgur.com/JsMU4uh.jpg
明度が0〜9までのグレーの四角がグラデーション状に横並びにならんでいるとします
この状態だと隣接している四角と四角の明度の差が少ないので境目が見えづらいです
全ての四角同士の明度差ができるだけ大きくなるように並び替えるにはどういうロジックが考えられるでしょう?
四角の数が増えても対応できるような汎用的なロジックが望ましいです
両端は固定のままが理想ですが必須要件ではありません
・ボツ例:1〜4まで一つおきに左右端を入れ替える
(1) 1と8を入れ替える
(2) 2と7はそのまま
(3) 3と6を入れ替える
(4) 4と5はそのまま
※これだと4と5が隣り合ったままで明度差が少ない箇所が残るので最適解ではない
2019/11/18(月) 05:41:33.12ID:8+qUVevR
Σ|a_n - a_{n+1}| を最大化する問題なのか
inf{|a_n - a_{n+1}|} を最大化する問題なのか
どっちなんだ?
inf{|a_n - a_{n+1}|} を最大化する問題なのか
どっちなんだ?
2019/11/18(月) 11:50:33.33ID:BCetHxzu
2019/11/18(月) 18:43:37.24ID:DjoGz+4S
8デフォルトの名無しさん
2019/11/18(月) 20:03:36.58ID:EbN/HVpO >>4
両端固定で最小隣接差を最大化する条件で回答する。Rですべての並べ方を虱潰しに
調べるのが https://ideone.com/paKF2d で、結果は>>6が言う通りになる。
n = 10 ではすぐに終わるが、それを超えると時間がかなりかかるし、環境によっては
メモリ不足になる。
もう少し効率的に調べるのが https://ideone.com/OsmpbQ で、n = 16 までは
すぐに終わる。それを超えると時間がかかるように段々なるので、さらなる効率化が
必要。
n = 10 と n = 16 の結果から、nが偶数の場合は>>6が言うように規則性が見られ、
nが大きくなっても並べ方は常に2通りで、例えば n = 256 のときは
0, 127, 254, 126, 253, 125, 252, ..., 2, 129, 1, 128, 255
0, 128, 1, 129, 2, 130, 3, ..., 253, 126, 254, 127, 255
になると予想されるが、それが正解であることを理論的に説明しないといけないな。
両端固定で最小隣接差を最大化する条件で回答する。Rですべての並べ方を虱潰しに
調べるのが https://ideone.com/paKF2d で、結果は>>6が言う通りになる。
n = 10 ではすぐに終わるが、それを超えると時間がかなりかかるし、環境によっては
メモリ不足になる。
もう少し効率的に調べるのが https://ideone.com/OsmpbQ で、n = 16 までは
すぐに終わる。それを超えると時間がかかるように段々なるので、さらなる効率化が
必要。
n = 10 と n = 16 の結果から、nが偶数の場合は>>6が言うように規則性が見られ、
nが大きくなっても並べ方は常に2通りで、例えば n = 256 のときは
0, 127, 254, 126, 253, 125, 252, ..., 2, 129, 1, 128, 255
0, 128, 1, 129, 2, 130, 3, ..., 253, 126, 254, 127, 255
になると予想されるが、それが正解であることを理論的に説明しないといけないな。
9デフォルトの名無しさん
2019/11/21(木) 21:52:25.50ID:1mUnuvuP >>4
【nが偶数の場合の>>8の予想を理論的に説明する】(等幅フォントでの表示推奨)
n = 10のとき、最小階差をd >= 6と仮定すると 0: 4, 5, 6, 7, 8
4に隣接できる数はなく、d = 5と仮定すると9だ 1: 5, 6, 7, 8, 9
けなので、数列が途切れてしまって続かない。 2: 6, 7, 8, 9
よってd >= 5はあり得ず、d = 4から調べれば良 3: 7, 8, 9
い。d = 4のとき各数が隣接できる数を列挙する 4: 0, 8, 9
と、右図のようになる。 5: 0, 1, 9
6: 0, 1, 2
7: 0, 1, 2, 3
8: 0, 1, 2, 3, 4
9: 1, 2, 3, 4, 5
これらの候補からそれぞれ2個(両端の0と9では 0: (4), (5), >6<, >7<, >8<
1個)ずつを選ぶ問題となる。4で、0と9を両方選 1: [5], 6, 7, 8, >9<
ぶと0→4→9で順列が終わってしまうため片方し 2: 6, 7, 8, >9<
か選べないから、8を必ず選ぶことが確定する。 3: 7, 8, >9<
同様に5で1が確定する。選択確定に[]、どちら 4: (0), [8], (9)
か一方を選択に()、非選択の確定に><の印をつ 5: (0), [1], (9)
けると、右図になる。 6: >0<, 1, 2
7: >0<, 1, 2, 3
8: >0<, 1, 2, 3, [4]
9: >1<, >2<, >3<, (4), (5)
【nが偶数の場合の>>8の予想を理論的に説明する】(等幅フォントでの表示推奨)
n = 10のとき、最小階差をd >= 6と仮定すると 0: 4, 5, 6, 7, 8
4に隣接できる数はなく、d = 5と仮定すると9だ 1: 5, 6, 7, 8, 9
けなので、数列が途切れてしまって続かない。 2: 6, 7, 8, 9
よってd >= 5はあり得ず、d = 4から調べれば良 3: 7, 8, 9
い。d = 4のとき各数が隣接できる数を列挙する 4: 0, 8, 9
と、右図のようになる。 5: 0, 1, 9
6: 0, 1, 2
7: 0, 1, 2, 3
8: 0, 1, 2, 3, 4
9: 1, 2, 3, 4, 5
これらの候補からそれぞれ2個(両端の0と9では 0: (4), (5), >6<, >7<, >8<
1個)ずつを選ぶ問題となる。4で、0と9を両方選 1: [5], 6, 7, 8, >9<
ぶと0→4→9で順列が終わってしまうため片方し 2: 6, 7, 8, >9<
か選べないから、8を必ず選ぶことが確定する。 3: 7, 8, >9<
同様に5で1が確定する。選択確定に[]、どちら 4: (0), [8], (9)
か一方を選択に()、非選択の確定に><の印をつ 5: (0), [1], (9)
けると、右図になる。 6: >0<, 1, 2
7: >0<, 1, 2, 3
8: >0<, 1, 2, 3, [4]
9: >1<, >2<, >3<, (4), (5)
10デフォルトの名無しさん
2019/11/21(木) 21:53:22.41ID:1mUnuvuP 3と6で候補がそれぞれ2個に絞られたから、それ 0: (4), (5), >6<, >7<, >8<
らが選択確定となり、右図になる。 1: [5], [6], >7<, >8<, >9<
2: [6], 7, >8<, >9<
3: [7], [8], >9<
4: (0), [8], (9)
5: (0), [1], (9)
6: >0<, [1], [2]
7: >0<, >1<, 2, [3]
8: >0<, >1<, >2<, [3], [4]
9: >1<, >2<, >3<, (4), (5)
2と7で残り候補がそれぞれ1個に絞られたから、 0: (4), (5), >6<, >7<, >8<
それらが選択確定となり、結局、可能な並べ方 1: [5], [6], >7<, >8<, >9<
は右図のように0の次に4か5から始まる2通りし 2: [6], [7], >8<, >9<
かないことが分かる。 3: [7], [8], >9<
4: (0), [8], (9)
5: (0), [1], (9)
6: >0<, [1], [2]
7: >0<, >1<, [2], [3]
8: >0<, >1<, >2<, [3], [4]
9: >1<, >2<, >3<, (4), (5)
同様にして、nが偶数の場合を一般化し、中央の2つの数n / 2 - 1とn / 2でそれぞれ
n - 2と1を選択確定、0とn - 1を一方選択とするところから始めて、順々に選択確定
させていくことができる。
>>8の予想を理論的に説明できたので、それに基づくプログラムを晴れて作成すると、
https://ideone.com/D3zdgX になる。
らが選択確定となり、右図になる。 1: [5], [6], >7<, >8<, >9<
2: [6], 7, >8<, >9<
3: [7], [8], >9<
4: (0), [8], (9)
5: (0), [1], (9)
6: >0<, [1], [2]
7: >0<, >1<, 2, [3]
8: >0<, >1<, >2<, [3], [4]
9: >1<, >2<, >3<, (4), (5)
2と7で残り候補がそれぞれ1個に絞られたから、 0: (4), (5), >6<, >7<, >8<
それらが選択確定となり、結局、可能な並べ方 1: [5], [6], >7<, >8<, >9<
は右図のように0の次に4か5から始まる2通りし 2: [6], [7], >8<, >9<
かないことが分かる。 3: [7], [8], >9<
4: (0), [8], (9)
5: (0), [1], (9)
6: >0<, [1], [2]
7: >0<, >1<, [2], [3]
8: >0<, >1<, >2<, [3], [4]
9: >1<, >2<, >3<, (4), (5)
同様にして、nが偶数の場合を一般化し、中央の2つの数n / 2 - 1とn / 2でそれぞれ
n - 2と1を選択確定、0とn - 1を一方選択とするところから始めて、順々に選択確定
させていくことができる。
>>8の予想を理論的に説明できたので、それに基づくプログラムを晴れて作成すると、
https://ideone.com/D3zdgX になる。
11デフォルトの名無しさん
2019/11/21(木) 21:54:24.25ID:1mUnuvuP nが奇数の場合にも偶数の場合と似たようにしてd >= (n - 1) / 2 はあり得ず、
d = (n - 1) / 2 - 1 から調べれば良いことが分かるが、偶数の場合と違い
選択確定できる数はない。>>8の元請け関数のforループの開始値をnではなく
n %/% 2 - 1に置き換えるだけでは、実行時間は5〜6%くらいしか短縮されない。
偶数の場合のような図の作成により、調べる組み合わせを減らしていくことは
できるが、プログラムを書くのはかなり面倒そう。
d = (n - 1) / 2 - 1 から調べれば良いことが分かるが、偶数の場合と違い
選択確定できる数はない。>>8の元請け関数のforループの開始値をnではなく
n %/% 2 - 1に置き換えるだけでは、実行時間は5〜6%くらいしか短縮されない。
偶数の場合のような図の作成により、調べる組み合わせを減らしていくことは
できるが、プログラムを書くのはかなり面倒そう。
2019/11/21(木) 22:40:32.33ID:vr0RSw67
>>4 Squeak Smalltalk。両端固定せず、対称排除なしの虱潰しで。
| min |
min := 0 -> OrderedCollection new.
(0 to: 9) permutationsDo: [:perm |
| curr |
curr := (perm overlappingPairsCollect: #-) abs min.
curr = min key ifTrue: [min value add: perm copy].
curr > min key ifTrue: [min := curr -> (OrderedCollection with: perm copy)]
].
^min value asArray "=> #(#(4 9 3 8 2 7 1 6 0 5) #(5 0 6 1 7 2 8 3 9 4)) "
"Pharo向け => http://ws.stfx.eu/CFADPDGFMTJC ;"
| min |
min := 0 -> OrderedCollection new.
(0 to: 9) permutationsDo: [:perm |
| curr |
curr := (perm overlappingPairsCollect: #-) abs min.
curr = min key ifTrue: [min value add: perm copy].
curr > min key ifTrue: [min := curr -> (OrderedCollection with: perm copy)]
].
^min value asArray "=> #(#(4 9 3 8 2 7 1 6 0 5) #(5 0 6 1 7 2 8 3 9 4)) "
"Pharo向け => http://ws.stfx.eu/CFADPDGFMTJC ;"
2019/11/22(金) 20:06:41.59ID:EyqF2Cmi
お題:読み手を一瞬戸惑わせよ
https://ideone.com/OCwpPB
https://ideone.com/OCwpPB
2019/11/23(土) 05:56:02.57ID:KvoIJqUR
https://twitter.com/AtomDynamics16/status/1197979782719229952
キー入力を一定時間ごとに送るソフトを書いたのだけど、やっぱりグレーですか?
パケット改変して無くて、メモ帳ではうまくいってる。
UOクライアントに使うのが怖くて躊躇している。
https://twitter.com/5chan_nel (5ch newer account)
キー入力を一定時間ごとに送るソフトを書いたのだけど、やっぱりグレーですか?
パケット改変して無くて、メモ帳ではうまくいってる。
UOクライアントに使うのが怖くて躊躇している。
https://twitter.com/5chan_nel (5ch newer account)
2019/11/23(土) 06:01:06.32ID:KvoIJqUR
あ、UOスレに書いたものだと・・・。
16デフォルトの名無しさん
2019/11/23(土) 22:51:11.49ID:ubdNKuk5 >>4を>>11の方式で求めるプログラムを書いてみた: https://ideone.com/14wgia
nが偶数の場合、n = 8までは>>8の2番目のプログラムと比べて遅いが、n = 10, 12,
14, 16, 18, 20ではそれぞれ1.78倍、7.16倍、49.8倍、327倍、3120倍、30800倍の
速度になり、差がどんどん開いていく。n = 256でも1秒未満で求められる。
nが奇数の場合、n = 11までは遅いが、n = 13で同程度になり、n = 15, 17, 19, 21では
それぞれ3.25倍、12.6倍、58.8倍、325倍の速度で、差がやはりどんどん開いていく。
nが2大きくなるごとに並べ方の通り数が2倍以上に増えるようなので、n = 255では
どんなアルゴリズムを使ってもコンピュータの性能限界をはるかに超えてしまう。
nが偶数の場合、n = 8までは>>8の2番目のプログラムと比べて遅いが、n = 10, 12,
14, 16, 18, 20ではそれぞれ1.78倍、7.16倍、49.8倍、327倍、3120倍、30800倍の
速度になり、差がどんどん開いていく。n = 256でも1秒未満で求められる。
nが奇数の場合、n = 11までは遅いが、n = 13で同程度になり、n = 15, 17, 19, 21では
それぞれ3.25倍、12.6倍、58.8倍、325倍の速度で、差がやはりどんどん開いていく。
nが2大きくなるごとに並べ方の通り数が2倍以上に増えるようなので、n = 255では
どんなアルゴリズムを使ってもコンピュータの性能限界をはるかに超えてしまう。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【△】コンビニの鮭おにぎり、価格にネット衝撃「ついに…」 驚き続々「これはキツい…」「日本人を殺しに来てる」 ★3 [ぐれ★]
- 上野動物園の双子パンダ、1月末に中国に返還へ 国内でパンダ不在に ★3 [蚤の市★]
- 「外国人はもう日本を選ばなくなる」経営者たちが抱く深刻な懸念 ベトナム人実習生なしでは「成り立たない街」…【多文化共生企画】★3 [少考さん★]
- 参政・神谷代表「なぜ日本では多くの中国人の方がキャッシュで不動産を買えるのか」「現金はどこから来ているのか」 片山大臣の回答は [少考さん★]
- 「全国テレビのデカ盛りの撮影が連絡無しで…」ラーメン店が悲痛の食材ロス危機を訴える [少考さん★]
- 【東京】わずか9平方メートル…都心に近い「極小」アパートが若者に人気 狭くても“住めば都” ★3 [煮卵★]
- 【世論】高市「中国と台湾の問題は、対話による平和的解決を期待するというのが、わが国の一貫した立場だ」 [811796219]
- 茹でたパスタにレトルトカレーかけるのあり?
- 公園でシャボン玉してる親子と喧嘩になったんやが
- 入院したらやることあるか(´・ω・`)
- 「忠臣蔵」とかいう、輩47人で押しかけて1人の爺さんを無惨に殺害した事件を称賛する祭り「義士祭」が今年も開催される [279254606]
- 【高市物価】スーパー買い物俺「まあまあ買ったな…3000円くらいか?(意外と2000円程度かも😁)」→ [153490809]
