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/
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
は手計算の手間もないし見ればわかる
非常に利点が少なく
文字入力の手間が相対的に大きくなる
0115デフォルトの名無しさん
垢版 |
2019/12/05(木) 14:27:21.66ID:esMh+bxM
>>101
Kotlin script

println((1..100).sum())
0116デフォルトの名無しさん
垢版 |
2019/12/05(木) 14:31:48.40ID:esMh+bxM
ま、しかし、昔々算数で四角を描いて 100 * (100 + 1) / 2 で出来ると習ったような気がするので馬鹿正直に1から100まで足す必要はないな。
0128デフォルトの名無しさん
垢版 |
2019/12/05(木) 23:12:12.53ID:2GEt9xQA
俺は別にうざがってないぞ
なに全員がうざがってるみたいなまとめ方するんだよ
0130デフォルトの名無しさん
垢版 |
2019/12/05(木) 23:25:08.31ID:8H7awdOo
小一時間問い詰めるとか
具体的に想像すると陰湿極まりないパワハラが思い浮かぶ
0133デフォルトの名無しさん
垢版 |
2019/12/05(木) 23:56:23.39ID:uvnytkqs
こんな煽り合い久々に見たw
0137デフォルトの名無しさん
垢版 |
2019/12/06(金) 03:33:54.64ID:BprTHIND
ものすごい速度で羊を数えてください
1 sheep two sheep three sheep four sheep ...........
0140デフォルトの名無しさん
垢版 |
2019/12/06(金) 14:03:18.53ID:zI729h7a
>>101 julia
f(a,b)=(a+b)*(b-a+1)÷2
f(1,100) #-> 5050
f(50,80) #-> 2015
0142デフォルトの名無しさん
垢版 |
2019/12/06(金) 22:53:13.95ID:7FicwbM7
>>101 Perl5

sub Y_combinator { my $f = shift;
 sub { my $x = shift; $x->($x) }->(
  sub { my $y = shift;
     $f->(sub {$y->($y)(@_)}) }
 )
}
my $series = sub {my $f = shift;
 sub { my $n = shift; $n and $n + $f->($n - 1) }
};
print Y_combinator($series)->(100);
0143蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/12/06(金) 23:19:56.34ID:jz2bvt/z
お題: 丸カッコと空白の並びで構成される入力文字列がある。丸カッコは入れ子になっていてそれぞれペアになっている。入力文字列は奇数文字数である。
プレーヤー1は、最初に入力文字列の一番左端に居る。プレーヤー2は最初に入力文字列の一番右端に居る。各プレーヤーは一回のアクションで次のいずれかの動作が可能。

(あ) カッコを飛び越えずにひとつ左か右に移動する。ただし、入力文字列の外側には移動できない。
(い) プレーヤーXがカッコAの外側に居て、AとXが隣接しているとき、XがカッコAに対応する別のカッコBの外側の端に移動する。
(う) カッコをひとつまたいでひとつ左か右に移動する。

入力文字列に対してプレーヤー1と2を何度もターン制でアクションをさせてプレーヤーの位置が衝突するまで鬼ごっこをさせよ。
動かすのはランダムでも知能つきでも構わない。アクションごとに位置を表示せよ。
0144蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/12/06(金) 23:33:56.47ID:jz2bvt/z
知能戦略の例)
鬼はなるべく近くなる方を選ぶ。
子どもは鬼からなるべく遠ざかるように動く。
0145デフォルトの名無しさん
垢版 |
2019/12/07(土) 00:07:48.78ID:n8phrA6e
動き方がわかりません

1文字右が ( の場合

(あ)1文字右に動く
(い)右の ( に対応する ) の右の文字に動く
(う)2文字右に動く
のいずれかが出来る

ただし、(い) (う) の移動先が文字列の外になる場合は移動出来ない

でいい?
0147デフォルトの名無しさん
垢版 |
2019/12/07(土) 00:25:52.72ID:7zlttp1T
>>101 Perl5

no warnings 'experimental::signatures';
use feature qw(say signatures);

sub f($n) {$n and $n + f($n - 1)};
say f(100);

sub Y($f) { sub {$f->(Y($f))->(@_)} }
say Y(sub($f) { sub($n) { $n and $n + $f->($n - 1) } })->(100);
0148デフォルトの名無しさん
垢版 |
2019/12/07(土) 00:44:47.39ID:7zlttp1T
>>101 Perl5

no warnings 'experimental::signatures';
use feature qw(say signatures);

sub Y($f) { sub {$f->(Y($f))->(@_)} } # Y combinator w/ recursive
$s = sub ($n) {$n and $n + $s->($n - 1)}; # calc series recursive
say Y(sub ($f) { $s })->(100);
0150デフォルトの名無しさん
垢版 |
2019/12/07(土) 03:39:00.62ID:GrS1V5od
お題

1以上、20以下の整数がランダムに10個与えられます。

与えられた整数の集合から1つ以上の整数を抜き出し、残った整数の集合からまた1つ以上の整数を抜き出します。

この時2つの抜き出した整数の集合のそれぞれの和が同値であり、かつ最小のものを出力して下さい。



与えられた整数の集合 : 2 3 4 5 6 7 8 9 10 11
期待される出力 : 5
この場合、与えられた整数の集合から
「2,3」「5」の整数を抜き出しています。
0152デフォルトの名無しさん
垢版 |
2019/12/07(土) 04:00:27.84ID:G4M88S/c
・「同値」の意味が謎

・解がない時の処理が謎(e.g. input: 9 10 11 12 13 14 15 16 17 18

・同値の使い方が間違っているのでそもそも「集合」の元が重複しないものとしてよいものか悩ましい
0153デフォルトの名無しさん
垢版 |
2019/12/07(土) 04:23:11.90ID:GrS1V5od
>>152
同値は単に同じ(等しい)値という意味で使っています。

解が存在しない場合は「ないよー」と出力して下さい。

与えられる整数は重複する可能性があります。
0154デフォルトの名無しさん
垢版 |
2019/12/07(土) 05:16:02.53ID:HQTo5ewj
ならば結局こういうことでよいのかね.
もとのスレを見ても出題者本人の主張が不明瞭なうえに二転三転していて気持ち悪いが.

与えられた数列を {a_n} に対して,
{a_n} の異なる項からなる任意の部分列の内それぞれの和が等しくなるものを {b_n}, {c_n} として
Σb_n (= Σc_n) が最小となる {b_n}, {c_n} を求めよ.

そして今回は b, c の項数をそれぞれ 2, 1 に限るものとすると.
0155デフォルトの名無しさん
垢版 |
2019/12/07(土) 05:38:25.75ID:GrS1V5od
もう少し例を載せるべきでした。
すいません。

例えば
>>152
さんの解が存在しないとしているものですが、
9 10 11 12 13 14 15 16 17 18
を与えられた場合の出力は
21となります。(10,11と9,12)


入力が
1 1 1 1 1 1 1 1 1 1
の場合の出力は
1となります。(1と1)
0157デフォルトの名無しさん
垢版 |
2019/12/07(土) 09:57:16.56ID:WrheNqRo
>>150
取り敢えずRで力任せ。これでも瞬時に終わるので工夫の必要なし。
https://ideone.com/pCp36v
0158デフォルトの名無しさん
垢版 |
2019/12/07(土) 15:33:28.08ID:WrheNqRo
実は>>157は「残った整数の集合から」の条件を忘れていて、元の集合から抜き出すと
勘違いして書いてしまったプログラム。

が、改めて条件を考えてみると、既に抜き出された数と同じものを選んでしまうのは、
「片方の部分集合の要素が2個以上で、もう片方の部分集合の要素が3個以上の場合」(A)
に限られる。例えば、2+9=11と2+3+6=11。この場合、2回選んでしまった2を取り除いた
部分集合は、和9=9と3+6=9が11より小さく、かつ(A)の場合に該当しないので2回選んで
しまった数は存在しない。

だから結局、>>157のプログラムのままで正解が得られることになる。
0159デフォルトの名無しさん
垢版 |
2019/12/07(土) 16:28:15.65ID:tj55yZgB
へなへななお題へなへなな回答
0160デフォルトの名無しさん
垢版 |
2019/12/07(土) 20:45:08.83ID:HU7sPj+p
>>150
この問題から関連して考えてたんだけど
5を
1 1 1 1 1
1 1 1 2
1 1 3
1 2 2
1 4
2 3
5
このように分割する方法は7通り、10だと42通りあった
数が与えられたとき何通りの分け方があるかどうやって計算するのか考えてたけど
そんな簡単な問題ではないようだった

とりあえず数が与えられたら上の例のように全ての分け方を列挙する
というのを問題としてみる
0167デフォルトの名無しさん
垢版 |
2019/12/08(日) 14:22:15.55ID:FOSx0Jk/
その制限が無い方がアルゴリズムとしておもしろい
制限があるとつまらなすぎる
0170デフォルトの名無しさん
垢版 |
2019/12/08(日) 19:17:22.87ID:DgjgjjxW
別に項数の制限はつけていませんよ
「項数の制限が無い」という事を省略したのに怒っているのならすいません。
ですが制限があるのなら普通に問題文に加えますし、別に書くほどの事では無いかな〜と
0174デフォルトの名無しさん
垢版 |
2019/12/08(日) 20:35:11.71ID:KCeBLlvA
ギャグですけど、並列化は比較的簡単なのでそれで時間短縮はできます。
底の値をシェアードにすると早く終わります。Nになってると思うんだけど。
0175デフォルトの名無しさん
垢版 |
2019/12/08(日) 20:48:51.01ID:KCeBLlvA
一回を関数に切り出して実行した場合、
一回のイテレーションが大体100回のループに収まるはずなのでザクザクおわります。
多分。
0176デフォルトの名無しさん
垢版 |
2019/12/08(日) 20:49:16.37ID:KCeBLlvA
一回を関数に切り出して実行した場合、
一回のイテレーションが大体100回のループに収まるはずなのでザクザクおわります。
多分。
0178デフォルトの名無しさん
垢版 |
2019/12/08(日) 21:17:04.79ID:FKbRmDMb
>>150
これは問題の設定がつまらないな。1〜20の中から10個を選んで元の集合を作るから、
結果に1個か2個の和しかほとんど現れず、集合の最初の方をパッと見ただけで
暗算でも分かってしまう。1〜5000の中から10個を選ぶ設定にすると、
結果がなしだったり、3個の和と4個の和だったり、2個の和と6個の和だったり、
変化に富んで面白くなる。https://ideone.com/kmihyT

例えば、リンク先にある

入力: [63, 70, 269, 949, 1337, 2670, 3538, 3764, 4183, 4320]
出力: Σ[3764, 4183] = Σ[63, 70, 269, 1337, 2670, 3538] = 7947

なんてパッと見では思いつかないから、コンピュータに探させる意義がある。
0180デフォルトの名無しさん
垢版 |
2019/12/08(日) 22:01:27.05ID:h14g0YSH
サンプルだから人間が簡単に検証できるようにしてるんでしょ
普通それぐらいはわかりそうなもんだけど、>>165みたいに項数だと思う奴とか>>178みたいにイチャモンつける奴とか世の中広いわw
0181デフォルトの名無しさん
垢版 |
2019/12/08(日) 22:35:33.47ID:FKbRmDMb
>>180
そんなことは分かっているよ。だから、お題通りの1〜20の場合も>>157でちゃんと回答した。
その上で、もっと面白い場合の追加を提案してみただけ。
0188デフォルトの名無しさん
垢版 |
2019/12/09(月) 04:54:54.63ID:wE9bCkNR
>>181
わかってたら
> これは問題の設定がつまらないな。
なんていう物言いにはならんだろ

>>187
夜中まで必死だな…
何に必死なのかよくわからんけどw
■ このスレッドは過去ログ倉庫に格納されています

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