X



プログラミングのお題スレ Part16
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/11/17(日) 09:00:22.10ID:xqEdXdr6
プログラミングのお題スレです。

【出題と回答例】
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/
0016デフォルトの名無しさん
垢版 |
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では
どんなアルゴリズムを使ってもコンピュータの性能限界をはるかに超えてしまう。
0017デフォルトの名無しさん
垢版 |
2019/11/24(日) 20:41:58.58ID:NMcltmqU
今日は夕焼けが超絶綺麗だったよ。
今まで見たことないくらい。
まだきれいになるだろうか、というのと、これ一回で終わりだろうか。
というのがあった。
0018デフォルトの名無しさん
垢版 |
2019/11/25(月) 01:25:34.58ID:SBJvKXmI
お題:Diffアルゴリズムを実装せよ。

差分アルゴリズム、さんぷる。
1:abcdef
2:abdef -> -3:c
3:bcdef -> -1:a,+3:c
4:abcdef -> +1a

以上がオレの考えるアルゴリズムだが、
もっとより良いアルゴリズムが世の中にはあるはずなので、
実装しませんか?
0019デフォルトの名無しさん
垢版 |
2019/11/25(月) 09:24:47.39ID:veETdbiQ
>>18
それはアルゴリズムではなく入力と出力のサンプル。

まあとにかく足された文字は+と位置と足された文字(または文字列?)を出して引かれた文字は-と位置と文字を出す仕様ということだな。
で、位置は先頭が1だと。

後で時間が空いたら考えとく。
0020デフォルトの名無しさん
垢版 |
2019/11/25(月) 22:13:03.88ID:UwQDpJpg
>>18
https://ideone.com/3VET5r
Rには編集前後の文字列のレーベンシュタイン距離を求める便利な関数adistが
備わっていて、1文字の挿入、削除、置換操作が必要な位置をI, D, S、操作が不要な
位置をMで示す文字列を返してくれる。例えば、"abdef" と "bcdef" を与えると、
"DMIMMM" が得られる。あとは、>>18の出力形式にちょっと加工するだけ。
0025デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:24:57.64ID:mMrv+0Zt
高性能じゃない俺にもできるお題をたのむ
0026デフォルトの名無しさん
垢版 |
2019/11/28(木) 20:14:43.82ID:mbBdSv/T
お題:自然数aをいくつか[※1]の自然数の組の和で表すとき、それらの自然数の組の
積[※2]が最大となるような自然数の組を、aが1から100までに対して表示せよ[※3]。

[※1] 1つでも構わず、その場合には和も積も自然数n自身となる。
[※2] 例えば、7を1+2+4と表せば積は1*2*4=8、2+5と表せば積は2*5=10であり、
   後者の積の方が大きい。
[※3] 最大となるような自然数の組が複数ある場合は、すべての組を表示せよ。
0028デフォルトの名無しさん
垢版 |
2019/11/28(木) 20:30:31.52ID:mbBdSv/T
>>27
可。
0029デフォルトの名無しさん
垢版 |
2019/11/28(木) 21:08:44.29ID:pgFu+V4e
後で虱潰しに全部計算するやつでも作るかな
0030デフォルトの名無しさん
垢版 |
2019/11/28(木) 21:12:26.03ID:522sTouZ
同じ数字を何回も使っていいんだったら2と3だけで作って、2*2を4と置き換えたものを追加(※3のため)すればええんかね?
aが1の場合は1
aが偶数の場合2^(a/2)
aが3以上の奇数の場合2^((a-3)/2)+3
0031デフォルトの名無しさん
垢版 |
2019/11/28(木) 21:20:11.41ID:EjjwcG+D
f(a,n)=(a/n)^n
df/dn =(a/n)^n * (-1+log[a/n]) な感じなので
ne=aで増減変化な気がするから
それ前後の整数2つだけしらべれば大丈夫?
a<=100, a>=1 だから200回調べる感じ
0032デフォルトの名無しさん
垢版 |
2019/11/28(木) 22:03:53.95ID:uZ7jROyS
3で分割できている間は3で残りが1になってしまう場合は最後の4を2x2にするのが最大っぽいね
7だったら3+3+1ではなくて3+2+2
12は3+3+3+3
13は3+3+3+2+2
100までずっとこれ

最大値しか表示しないけど
https://ideone.com/Ck54FP
0033デフォルトの名無しさん
垢版 |
2019/11/28(木) 22:37:08.59ID:PoPpbfsh
求める値をf(a)とする
b+c=a, b<=c, b>0, c>0 となる全てのb,cに対して
max { f(b) f(c) } と a の大きい方
となる

f(a) を a=1 の時から順番に調べれば良い

aが十分大きくて小数も許すなら
e=2.7182818... に分けるのが最善
整数なら>>32の通りかな?
0035デフォルトの名無しさん
垢版 |
2019/11/28(木) 22:48:21.15ID:PoPpbfsh
1以外の時には1が出ない
5以上は2個以上に分けた方が大きい
4は2+2にしても同じ
6は2+2+2より3+3よ方が大きい

だから
a>=2の時には
2、3、4以外の値はあらわれず
2と4をあわせて6以上にはならないことがわかる

つまり、(順番を無視すれば)以下の形のみになる

3+3+...+3
3+3+...+3+2
3+3+...+3+2+2
3+3+...+3+4
0036デフォルトの名無しさん
垢版 |
2019/11/29(金) 15:19:10.07ID:Ursk3Xfl
>>35
なぜそれで「だから」となるのかわからない。
0037デフォルトの名無しさん
垢版 |
2019/11/29(金) 17:42:19.99ID:YkvT9y9m
2、3、4以外の値はあらわれず
2と4をあわせて6以上にはならない

どっちがわからない?
0038デフォルトの名無しさん
垢版 |
2019/11/29(金) 17:48:24.95ID:YkvT9y9m
.... が正として、

.... * n * 1 < .... * (n+1)
.... * n < .... * floor(n/2) * ceil(n/2) @nが5以上
.... * 2 * 2 * 2 < .... * 3 * 3
.... * 4 = .... * 2 * 2
0039デフォルトの名無しさん
垢版 |
2019/11/29(金) 17:57:55.99ID:YkvT9y9m
一応、
加算と乗算は交換法則と結合法則が成り立つ
ってのも必要な条件です
0040デフォルトの名無しさん
垢版 |
2019/11/29(金) 20:54:17.14ID:dycaAJcC
>>37
なぜ現れないとわかるのか?
0041デフォルトの名無しさん
垢版 |
2019/11/29(金) 21:03:35.14ID:M9vvD3Fp
>>40
38で書いてくれてる
5以上なら分割したほうが大きくなるから最終的な数字は5未満になる
0042デフォルトの名無しさん
垢版 |
2019/11/29(金) 21:19:59.63ID:dycaAJcC
え?そうなの?わかりづらいな。見てもわからんよ。
0044デフォルトの名無しさん
垢版 |
2019/11/29(金) 21:39:03.80ID:M9vvD3Fp
38の内容は
1行目で1が無意味なので1が出ない
2行目で5以上は分割したほうがでかくなる
3行目で2*2*2と3*3は同じ
4行目で2*2と4は同じ
を説明している
3行目4行目はパターンを列挙するために必要な内容
0045デフォルトの名無しさん
垢版 |
2019/11/30(土) 02:03:19.03ID:8/O2xSEo
5以上は分割した方が大きくなる事に関しては数学的に証明できてるってこと?
0047デフォルトの名無しさん
垢版 |
2019/11/30(土) 02:28:06.73ID:Qe4NE6bn
n/2*n/2=n^2/4
だからn=4ならnと同じ、5以上なら分子が大きくなるからnより大きくなる
整数でに分割なので↑は偶数のときに限定
奇数のときは
(n-1)/2*(n+1)/2=(n^2-1)/4
だからnが5以上ならnより大きい
0048デフォルトの名無しさん
垢版 |
2019/11/30(土) 07:09:20.92ID:WebQyLi7
>>45
より大きくなる具体的な分け方を>>38に書いた

半分の、小数点以下切り上げ
半分の、小数点以下切り捨て
に分ける

これの方が大きい証明はとても簡単
(でもあまりエレガントではない)

もちろんこの分け方が最大というわけではないが
最大の分け方が5以上を含むと仮定すると、
より大きなものが存在するので矛盾
だから5以上は含まない
と言う事が出来る
0049デフォルトの名無しさん
垢版 |
2019/11/30(土) 07:13:05.91ID:WebQyLi7
最大となる分け方が存在する
ってのは有限性から明らか

つまり、
少なくとも1個の分け方が存在する
分け方は有限個しかない
から明らか
0050デフォルトの名無しさん
垢版 |
2019/11/30(土) 11:15:44.62ID:WebQyLi7
n ≧ 5 の時

floor(n/2) * ceil(n/2) - n
> { (n - 1) / 2 } * { n / 2 } - n
= n (n - 5) / 4
≧ 0

よって
n < floor(n/2) * ceil(n/2)
0051デフォルトの名無しさん
垢版 |
2019/11/30(土) 17:07:38.94ID:0h0IqWCg
これでわからんのなら数学じゃなくて日本語が不自由と断言してよいレベルだな
0054デフォルトの名無しさん
垢版 |
2019/11/30(土) 18:08:13.55ID:+iwJeZ8g
>>44
今更だけど3行目の説明間違えてた
2*2*2より3*3が大きい
なので結果的に解は3がたくさん並んで後ろで足りない分を2、もしくは4つける形になる
0055デフォルトの名無しさん
垢版 |
2019/11/30(土) 18:12:03.75ID:hV/U21TG
>>26
https://ideone.com/nqON70
C++。理屈が良くわからんけど、これが俺の限界。
2で欠けたほうが普通はいいんだけど、3の倍数は2引くと1余るのでそういうところでコスト取られるのでしょうかねぇ??
プリミティブ触ったほうが詰め込めるというのは普遍的にあると思うのだけどね。。。
もしかしたら、どっかの素数がスイートスポットになってて変な切り方しないとうまくないってこともあるかもしれない。
0057デフォルトの名無しさん
垢版 |
2019/11/30(土) 18:18:52.60ID:hV/U21TG
2の倍数で且つ3の倍数の時は2を使うのがいいのか3を使うのがいいのか解らない。
0058デフォルトの名無しさん
垢版 |
2019/11/30(土) 18:25:54.08ID:hV/U21TG
>>55も若干間違ってるなぁ。
2と3の倍数を兼ねる数字はその数字単体によって切り方を変えないといけないんだと思う。
なんかゲーム的。
0064デフォルトの名無しさん
垢版 |
2019/11/30(土) 20:15:09.44ID:c0k0ajHF
>>26の出題者です。>>32で正解ですが、お題の指示通りに自然数の組み合わせを
出力してもらいたかったな。こういう綺麗な三角形ができるから。

1: [1]
2: [2]
3: [3]
4: [4]
4: [2, 2]
5: [2, 3]
6: [3, 3]
7: [3, 4]
7: [2, 2, 3]
8: [2, 3, 3]
9: [3, 3, 3]
10: [3, 3, 4]
10: [2, 2, 3, 3]
11: [2, 3, 3, 3]
12: [3, 3, 3, 3]
13: [3, 3, 3, 4]
13: [2, 2, 3, 3, 3]
14: [2, 3, 3, 3, 3]
15: [3, 3, 3, 3, 3]
16: [3, 3, 3, 3, 4]
16: [2, 2, 3, 3, 3, 3]
17: [2, 3, 3, 3, 3, 3]
18: [3, 3, 3, 3, 3, 3]
19: [3, 3, 3, 3, 3, 4]
19: [2, 2, 3, 3, 3, 3, 3]
20: [2, 3, 3, 3, 3, 3, 3]
21: [3, 3, 3, 3, 3, 3, 3]
22: [3, 3, 3, 3, 3, 3, 4]
(以下略)
0065デフォルトの名無しさん
垢版 |
2019/11/30(土) 20:17:08.99ID:c0k0ajHF
1から9までの行頭の半角空白が消えちゃったな。
0067デフォルトの名無しさん
垢版 |
2019/12/01(日) 01:13:31.67ID:2OVww3gB
「ループを使わずに1から100を順に出力するコードは書けますか」
0070デフォルトの名無しさん
垢版 |
2019/12/01(日) 02:00:13.95ID:vkZvYyYJ
>>67
void Array.from({length:100}, (_, i) => {
console.log(i + 1);
});
とか
let counter = 0;
void function count() {
if (counter++ < 100) {
console.log(counter);
count();
}
}();
とか。js
0071デフォルトの名無しさん
垢版 |
2019/12/01(日) 06:08:36.21ID:jm8+wa+d
>>67 Ruby アイデアは前スレの誰かのパクリ

p 10**303 / 999**2
# => 10020030040050060070080090100110120130140150160170180190200210220230240250260270
28029030031032033034035036037038039040041042043044045046047048049050051052053054
05505605705805906006106206306406506606706806907007107207307407507607707807908008
1082083084085086087088089090091092093094095096097098099100
0072デフォルトの名無しさん
垢版 |
2019/12/01(日) 09:04:24.78ID:lTEhnVlg
>>67 julia
println.(1:100)
0074デフォルトの名無しさん
垢版 |
2019/12/01(日) 18:17:04.86ID:54WkPiOY
>>67
Kotlin script

(1..100).forEach(::println)

今スマホから書いてて試せないんだが多分これでできる。
forEachはループだというならこれではダメだが(確かに中ではループしていると思う)。
0076デフォルトの名無しさん
垢版 |
2019/12/01(日) 19:26:37.77ID:IoGKXgrY
>>71
これが日本のIT産業。
0077デフォルトの名無しさん
垢版 |
2019/12/01(日) 21:21:54.10ID:3oGVZyBI
お題: アルファベットの文字列の大文字と小文字の対応を反転させて表示しろ

in < Hello, World!
out > hELLO, wORLD!
0080デフォルトの名無しさん
垢版 |
2019/12/01(日) 23:10:18.94ID:sAJI+X1W
>>77 Common Lisp
(defun string-invert-case (string)
  (map 'string
       (lambda (c)
         (if (lower-case-p c)
             (char-upcase c)
             (char-downcase c)))
       string))

(write-line (string-invert-case "Hello, World!"))
0082デフォルトの名無しさん
垢版 |
2019/12/02(月) 08:36:45.67ID:gdxsQr6e
>>67 PHP

<?=implode(range(1,100)," ")?>
0083デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:32:31.35ID:APM7ABg4
お題: コンビニでタバコ(マルボロ)を買いたい
喫煙者がコンビニでタバコを購入して喫煙するまでの疑似コードを書け
詳細にかつ現実的で、エラー/例外に可能な限り対応していれば高得点とする

例:
person.walk_to(conbini)
if conbini.has(person) {
employee = conbini.get_current_employee()
tobacco = person.request_to(employee, "マルボロ")
person.smoke(tobacco)
}
0084デフォルトの名無しさん
垢版 |
2019/12/02(月) 16:09:21.37ID:KwsHxcvC
ヤニカスはしね
0085デフォルトの名無しさん
垢版 |
2019/12/02(月) 17:33:22.44ID:54OAxivC
1,マルボロ吸いてー。
2,そうだコンビニへ行こう
3,財布を確認
4,どうやって行こうか
5,準備して家を出る
6,道中色々
7,コンビニ到着
8,コンビニ物色
9,予備で買わなければいいけないモノを示唆
10,カゴ買うモノを入れる
11,レジに行く
12,レジでタバコの番号を「N個クレ」という。
13,ホットスナックを示唆する
14,会計が出る
15,ポイントカードを出す
16,お金を払う
17,品物を受け取る
18,コンビニをでる
19,喫煙スポット検索
20,喫煙スポットへいく
21,道中色々
22,到着
23,タバコを開けて一本取り出す
24,ライターで火をつける
25,吸う
26ぷれじゅあぁあああああああああああ
0087デフォルトの名無しさん
垢版 |
2019/12/02(月) 21:58:19.49ID:gdxsQr6e
>>67 Pxthon

print(*range(1,101))
0088デフォルトの名無しさん
垢版 |
2019/12/02(月) 22:05:34.98ID:gdxsQr6e
>>87
すいません Python です
0091デフォルトの名無しさん
垢版 |
2019/12/03(火) 01:47:20.32ID:dBsSbed7
令和元年(2019年)8月25日(日)・(再)9月1日(日)
テーマ: 未来につながる力を学ぶ プログラミング教育
内容: 2020年度から小学校で始まる「プログラミング教育」。
一体どんな授業が行われるのか?番組では一足先に
プログラミングを取り入れた授業を行っている小学校を取材。
そこには生き生きと楽しく学ぶ子供たちの姿が。さらに、
実際に授業で使われている教材で、徳光さんがプログラミングに初挑戦!
今回は文部科学省プログラミング教育戦略マネージャーの中川哲さんと共に、
進化する学び、「プログラミング教育」に迫ります。
  https://www.gov-online.go.jp/pr/media/tv/shiritai/movie/20190825.html
動画は上のURLにある
0092デフォルトの名無しさん
垢版 |
2019/12/03(火) 17:02:12.57ID:/pkZgP0J
>>67 jq

range(1;101)
0094デフォルトの名無しさん
垢版 |
2019/12/03(火) 20:10:35.90ID:aor79FgV
>>67
Prel5 ってまだ出てないよね?

print join(' ', 1..100) . "\n";
0095デフォルトの名無しさん
垢版 |
2019/12/04(水) 09:18:44.13ID:MGV4EHAd
永久に出ないんじゃないかなPrel5なんて
0097デフォルトの名無しさん
垢版 |
2019/12/04(水) 12:58:50.91ID:61i6ZWvj
print(isletter(c)
0098デフォルトの名無しさん
垢版 |
2019/12/04(水) 13:07:17.16ID:61i6ZWvj
>>97
すいません。ブロックされて書き込みができないのでいろいろテスト中。
0099デフォルトの名無しさん
垢版 |
2019/12/04(水) 17:21:06.21ID:0j0R5u4a
>>95>>96
打ちまつがえた。
そしてリロードしてなくて書いた直後に上にPerl5の書き込みが出現orz
0103デフォルトの名無しさん
垢版 |
2019/12/05(木) 00:15:30.27ID:5juZ/T5v
>>101 julia

print(sum(1:100))
0107デフォルトの名無しさん
垢版 |
2019/12/05(木) 07:40:32.01ID:8H7awdOo
最適化されるから一緒
意図がわからない
変数に置き換えて汎用化できない

一時間しゃべってみろよおい
0112デフォルトの名無しさん
垢版 |
2019/12/05(木) 13:14:45.51ID:2uRKrxFi
+1
は手計算の手間もないし見ればわかる
非常に利点が少なく
文字入力の手間が相対的に大きくなる
■ このスレッドは過去ログ倉庫に格納されています

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