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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2018/01/01(月) 11:15:04.40ID:2Vr1CPKy
プログラミングのお題スレです。

前スレ
プログラミングのお題スレ Part9
https://mevius.5ch.net/test/read.cgi/tech/1480579110/

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

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文

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

宿題は宿題スレがあるのでそちらへ。
2018/04/17(火) 17:32:19.21ID:dXM64r3I
>>877
ありがとうございます
879デフォルトの名無しさん
垢版 |
2018/04/17(火) 19:05:05.39ID:S4fl8nYd
>>322 J
echo !23x
2018/04/17(火) 19:21:24.18ID:g5yHmTYu
>>879
どうなってんのこれ
2018/04/18(水) 00:46:46.99ID:fMrElfkf
お題
0〜N-1の数字を1つずつ使ったN進数表記でN桁の数のうち、最も多くの素因数を持つ数を求めよ

N=2
→10

N=5
→34210 (10進数で2430=2*3^5*5, 素因数は7個)

N=10
→???
2018/04/18(水) 00:56:38.62ID:JUjvxXNW
全てを探索
しかない気がする

N=14くらいが限度か
2018/04/18(水) 01:23:42.06ID:UfQjex1N
まーた数学の問題か。
まーたマウント取りたいセンセの荒らしか。
うんざり
2018/04/18(水) 03:59:26.48ID:Acg84ZKa
アルゴリズムと数学は切り離せないものだし数学が役立つ場面はもちろん多いんだけど、数学だけで完結しちゃう問題では、プログラミングのお題としては面白味がないよね。
むしろこのスレに的には悪問と言ってもよいと個人的には思う。

素直なプログラミングでは複雑になってしまうところを数学を使うことでスマートに解けるとか、逆に数学を使うことで全く別のアプローチの解法があるとかだと、面白いと思う。
必ずしも速い、安い、上手いが正義じゃなくて、そんな解き方もあるのねとか、それどうなってんの?と不思議に思えるような解法とかも見てみたいし、そんな解法が見られるお題が面白いと思う。
2018/04/18(水) 04:07:00.58ID:Acg84ZKa
追加すると、言語によって異なる記述能力や得手不得手を活かして上手く解いたとか簡潔に書けたとか、逆にわざわざそんな敢えて難しいやり方をするかとか、そういうのも面白いなと思います。
2018/04/18(水) 06:03:49.90ID:iqodOpJQ
数学で完結してんのかこれ
コンピュータ使わない解法思いつかんが
2018/04/18(水) 07:07:15.79ID:qlMtX02l
素因数の個数って何だっけ
互いに素な約数の個数なら、N=5の時33220(=2310=2*3*5*7*11)の方が多いし、素因数分解で出てくる素数の個数ならN=5の時31143(=2048=2^11)の方が多いし
私が文を読めていないだけ?
2018/04/18(水) 07:22:32.10ID:pdl2KQl9
ただ列挙して調べなきゃいけないとすると面白くもなんともない。
いい解を作ろうとすれば、できるかどうかはともかく
数学ひねり回すのだけがメインの仕事になるみたいな。
2018/04/18(水) 07:24:04.47ID:pdl2KQl9
>>887
0から4を全部使うという制約。
2018/04/18(水) 08:01:49.71ID:iqodOpJQ
J ブルートフォース

q =: >./&(+/&|:&(0&<)&q:&(#. (i.@! A. i.)))"0

iPhone の J インタプリタでは N=8 までが限界だった
q 2 3 4 5 6 7 8
1 2 6 7 13 10 16
2018/04/18(水) 08:02:43.21ID:JUjvxXNW
素因数の個数だと2^11は2の1個だけなんだけどなあ
例だと11個と数えたいようだけど
2018/04/18(水) 08:04:10.88ID:iqodOpJQ
9 も大丈夫だった
q 9
12
2018/04/18(水) 08:04:22.36ID:JUjvxXNW
>>888
数学ひねり回してどうにかなる気はしない
2018/04/18(水) 08:15:58.76ID:iqodOpJQ
>>891
問題の着目点に応じて相異なる素因数の数になるか重解を許すか解釈すればいいんじゃないの

そうしないと高校数学に良くある(このスレにも出てるな)
「n! の素因数2の個数を求めよ」の答えが恒等的に1になってしまう。
知らんけど。
2018/04/18(水) 08:33:43.28ID:CiWWe7S5
重解
因数

意味を知らんヤツが問題を作る
2018/04/18(水) 08:39:01.69ID:loM0N11v
重解じゃなくて重根な
2018/04/18(水) 08:40:26.67ID:CiWWe7S5
www
同じだろ
2018/04/18(水) 08:48:02.15ID:iqodOpJQ
いや重解は変換ミス
それに重複を許さない個数でも問題は成立するな、
良く考えると。
2018/04/18(水) 08:53:49.03ID:loM0N11v
>>897
解と根は本来、別の用語だよ
今はごっちゃに使われてるけど
2018/04/18(水) 09:55:28.20ID:8LhMtFC1
>>898
例を出さなかったらそれぞれの解釈が見れて面白かったかも

>>899
それで言い訳になってると思ってんの?
2018/04/18(水) 10:31:06.41ID:SkflZos/
自演乙
2018/04/18(水) 11:13:23.97ID:2HNL8zBg
>>889 Thanks、理解した
全探索しか思いつかなかったorz
903デフォルトの名無しさん
垢版 |
2018/04/18(水) 14:43:49.71ID:mfkhz8pH
>>816 J
200$(#~ 2&=@#@q:)2+i.1000
2018/04/18(水) 15:36:58.27ID:8LhMtFC1
このスレを見ると
世の中のソフトが重くなる理由がよく分かる
2018/04/18(水) 17:14:39.91ID:AXVF0Rxy
>>903
それ1000までの間に半素数が200個存在するってあらかじめ分かってなきゃ使えなくない
2018/04/18(水) 17:19:26.83ID:8LhMtFC1
あらかじめ調べておけばいい
どうせなら半素数自体もしらべてテーブルにしておけば
2018/04/18(水) 18:12:40.76ID:AXVF0Rxy
だから調べてテーブル作るお題やろ
2018/04/18(水) 18:20:10.32ID:8LhMtFC1
コンパイラが究極に進化するとそうなる
今でも純関数&定数指定にすれば
2018/04/18(水) 18:35:30.37ID:MXcoXWvI
究極に進化して、ある数を素因数分解しろとか離散対数求めろと言われたら、
何桁でもテーブルにあって即答ってか?
暗号死ぬわ。
2018/04/18(水) 18:51:51.73ID:8LhMtFC1
当然限度はある
当たり前
2018/04/18(水) 19:18:25.23ID:SkflZos/
君さ、ちょっと黙ってて
912デフォルトの名無しさん
垢版 |
2018/04/18(水) 20:18:15.86ID:mfkhz8pH
>>816 J
>>817のやり方で
/:~~.,*/~p:i.20
913デフォルトの名無しさん
垢版 |
2018/04/18(水) 23:38:59.46ID:BI6oaZDa
>>871
Kotlin
https://paiza.io/projects/BHMBjMpBsKkeWxw_1WxpQw
何も考えずに総当たり。7桁以上は多すぎるのでやらないようにした。
914デフォルトの名無しさん
垢版 |
2018/04/18(水) 23:39:47.19ID:BI6oaZDa
ごめん。アンカ間違えた。>>869だった。
2018/04/18(水) 23:57:26.29ID:+652BqLv
トップバストとアンダーバストがmm単位で与えられるので
JIS L 4006におけるカップ体型区分を出力せよ
なお、与えられた体系が当該規格の数値と一致しない場合は
最も差の少ない体型区分を選べ

-*- input -*-
880 815
999 799
755 480

-*- output -*-
AA
E
H
2018/04/19(木) 00:17:12.74ID:7EnHL2Zb
JISの抜粋はよ
2018/04/19(木) 01:14:32.58ID:AYGORpen
三人目、人間?
2018/04/19(木) 01:50:36.78ID:uvuGKqvu
>>915 Ruby
2018/04/19(木) 01:51:08.23ID:uvuGKqvu
ミス
>>915 Ruby

#!ruby -na
puts ['AA',*?A..?I][(eval($F*?-)/25.0-3).round.clamp(0,9)]
2018/04/19(木) 02:02:41.15ID:FEDLlhkO
Jアニキはよ
2018/04/19(木) 04:01:30.95ID:4mrmpy84
このスレは、素数表を使う問題が多い

一方、プログラミング・コンテストでは、自作ライブラリも持ち込めるから、
素数表・ZDD を持ち込んで、解けるような問題は少ない

数学的な解法がなくて、全探索して見つけるものが多い
2018/04/19(木) 09:28:13.47ID:/i49YDDr
じゃあここで出てる問題をまず最初にNP完全かどうかを判定すればいい
競技プログラミングに適している問題かどうかを証明してから、改めてプログラミングにあたる
2018/04/19(木) 09:46:04.07ID:6rKghp/7
出題者がPと証明してから出すのが筋だろ
2018/04/19(木) 09:51:24.98ID:4mrmpy84
プログラミング・コンテストの良問は、
持ち込みの自作ライブラリでは解けないもので、

素直に全探索すると、計算回数が1億回以上になって、2秒以内に解けないもの

ここで、パズル的に考えて、数学的な法則を使うことで、
枝切り・ショートカットして、計算回数が1千万回以下になるもの
925デフォルトの名無しさん
垢版 |
2018/04/19(木) 10:05:22.86ID:ffBaMipw
>>915 J
f=:{&(25#'AA'';;/'ABCDEFGHI')@<.@-&62.5&(-/)
2018/04/19(木) 12:09:31.59ID:2nanKMvG
>>925
分かりにくいのは毎度の事だが今回はあんまり短くもならないんだな。
2018/04/19(木) 20:55:00.88ID:WIjUPUdP
JアプリみつけたのでJで遊んでる初学者だけど
参考にするコード見つけにくい(少ない検索し難い読みにくい)から
>>925の人の存在は有り難い

見所はインデックスを25で割らずテーブルを25倍にしてるとこか
2018/04/21(土) 20:19:05.79ID:ZknFSnjD
お題:文字列の配列をカンマ区切りで表示せよ
複数の方法を用いること

ruby
https://ideone.com/cKprYN
2018/04/21(土) 21:12:35.96ID:nWGazij5
配列を、って言ってるのに%wでスペース区切りの文字列から作るの?
てかrubyの%wって何のためにあるの?
splitあるのに組み込みので提供するほどのもの?
他言語者からしたらsplitは分かってもらえると思うが%wは分からんと思うぞ?
やっぱ書くだけの書き捨て言語なんかな。
2018/04/21(土) 21:20:16.29ID:20hKSpui
>>928 common lisp

(let ((a '("java" "ruby" "rust")))
  (format t "~{~A~^, ~}~%" a)
  (princ (reduce (lambda ($0 $1) (concatenate 'string $0 ", " $1)) a))
)
; java, ruby, rust
; java, ruby, rust
2018/04/21(土) 22:20:27.52ID:6J3G0l4e
>>929
>てかrubyの%wって何のためにあるの?

まさに今回のような場合に配列リテラルを作るためのものだろ
各要素が所与なのになんでわざわざ繋いだ文字列リテラル書いてsplitしようとするの?
2018/04/21(土) 22:36:51.73ID:QInDazsH
>>928 ruby
puts a[0...-1].inject(''){|r,s| r << s << ',' } + a.last
puts a.inject(''){|r,s| r << s << ',' }.chop
puts a.map{|s| [s, ','] }.join.chop
b = a.join
a[0...-1].inject(0){|r,s| r += s.length + 1; b = b.insert(r-1, ','); r }
puts b
2018/04/21(土) 22:45:40.32ID:QInDazsH
>>929
Perl だと
@week = qw(Sun Mon Tue Wed Thu Fri Sat)
2018/04/21(土) 23:51:06.09ID:Ktcilsrm
>>931
今回のような??
今回の問題文、「文字列の配列をカンマ区切りで表示せよ」ってなってんだが…
スペース区切りの文字列から始めてどうする。
それじゃ%wで配列にするまでもなく正規表現でスペースをカンマに置換すればいいじゃん。
935デフォルトの名無しさん
垢版 |
2018/04/22(日) 02:37:42.05ID:J/MYnpG1
>>928
Kotlin
https://paiza.io/projects/ZW2Hjc9tfnlrMwqvblaKlw
文字列は1行づつ入力から読んで MutableList に add して終わったら Array に変換して文字列の配列にしている。
2018/04/22(日) 02:46:31.80ID:9vFMU6Rd
>>928 javascript

var langs = ['javascript', 'python', 'go']
console.log(langs.join()) //ES5
console.log(langs.reduce((acc, elm) => `${acc},${elm}`)) //ES2015
langs |> ary => ary.join() |> console.log //ESNext
console.log((langs + ',').slice(0, -1)) //ES5
2018/04/22(日) 03:13:36.97ID:9vFMU6Rd
一番かんたんなの忘れてた
console.log(langs.toString())
console.log(langs + '')
console.log(`${langs}`)
2018/04/22(日) 03:19:59.16ID:9vFMU6Rd
console.log(String(langs))
langs |> String |> console.log //ESNext
2018/04/22(日) 06:29:12.88ID:xtwb4rw1
>>928 Squeak Smalltalk

| arr |
arr := #(java rust ruby).
arr asCommaString. "=> 'java, rust, ruby' "
arr asCommaStringAnd. "=> 'java, rust and ruby' "

String streamContents: [:ss |
arr do: [:each | ss << each] separatedBy: [ss << ', ']
]. "=> 'java, rust, ruby' "
2018/04/22(日) 10:27:04.31ID:H/AU6k7y
>>928
join一発でできるようなことをわざわざ問題にするなよ...
2018/04/22(日) 12:09:53.80ID:q7xT1ItO
誰かにコードを教えてもらう為に「お題」と言ってるだけじゃね?
2018/04/22(日) 13:43:01.03ID:RVJCTQ5T
不快に思うなら取り組まなきゃいいだけ
2018/04/22(日) 13:54:40.34ID:teaX0R9Y
サムダウンボタンがあったら容赦なく押していたよ
2018/04/22(日) 13:57:18.11ID:6NfC/koQ
数学センセが嫉妬かみっともない
開口の広いお題が繁盛すんのは当たり前
2018/04/22(日) 14:03:07.52ID:vUs8xFXM
餌ならなんでも構わない卑しい豚だからでは?
2018/04/22(日) 15:12:26.16ID:6BdKES38
そろそろ次スレの予感
947デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:37:13.02ID:J/MYnpG1
>>841
Kotlin
https://paiza.io/projects/IMnM2t1z4XvL1y3JtdIScg
948928
垢版 |
2018/04/22(日) 15:38:01.72ID:tE7JnHSh
蛇足で無粋でしょうけど寸評をもってお礼に代えさせて下さい

寸評:
>>930 素早くreduce拾って下さったのと、コードのリズム感が目に優しくてすこ
formatたる謎の戦法も興味深い
>>932 chop戦略を出して下さって感謝。bを使ったほうはフフッときた
>>935 Kotlinのコードいつも楽しく拝見してます
「先頭別で、二個目からカンマくっつけ戦法」出してくれて感謝
>>936 joinでカンマついちゃうのが他言語から見たら興味深い
>>939 いつも楽しく拝見してます、相変わらずギョッとさせられる
じつは当初、andつきのほうをお題にしようかとも迷いましたが
不要な複雑さを持ち込んでしまうと危惧して止めたんですがさすがのSmalltalk

総評:
joinでの解決一個だけで回答されるのが一番つまらないので
それを暗に防ぐために複数の方法っていう指定をした
二番目三番目の方法となると、見てて楽しい、言語ごとの工夫が見えてくる
おまえらありがとう
949デフォルトの名無しさん
垢版 |
2018/04/22(日) 15:42:18.97ID:J/MYnpG1
そういや昨日本屋に行ったら「C言語による標準アルゴリズム事典」が売られてて、うわー懐かしいまだ売ってたのかこれ
と思ってよく見たら今年出たばかりの第2版だった。

[改訂新版]C言語による標準アルゴリズム事典 Software Technology
http://amzn.asia/bjcCLfp

この本はある意味お題になりそうな問題の宝庫ではないかと思う。
2018/04/22(日) 15:52:17.03ID:LFntnsZQ
まだJニキの回答が来てない…
2018/04/22(日) 15:57:34.72ID:bjDlbJPk
>>949
おう!
pascal 版を見たことがある、と思ってたんですが、気のせいだったのかな?
2018/04/22(日) 17:34:57.39ID:xCJicIF5
>>939
その文字列化メソッドの充実っぷりはすごい
953デフォルトの名無しさん
垢版 |
2018/04/22(日) 18:31:51.83ID:J/MYnpG1
>>951
それはおそらくこれだな。著者は同じ奥村さんだ。

Software Technology 12 コンピュータアルゴリズム事典
http://amzn.asia/b82A7jP

こちらは Pascal なので再販されそうな感じがしないね。
2018/04/22(日) 19:36:01.52ID:YjWQK7FP
[[['[] ]]] { {] ]][ '[][][] [][] [][][]  [] '[] []
2018/04/22(日) 19:59:42.16ID:bjDlbJPk
>>953
thx!
956デフォルトの名無しさん
垢版 |
2018/04/22(日) 21:54:24.98ID:DtOQlBfz
お題

再帰関数を使ってC++で次の問題の会を出すプログラム書いたんですけど、なんかミスばっかでダメなので、だれかどういうプログラム書けばいいのか教えてもらえませんか?

九つの椅子が正方形に並んでおり、はじめに数字の書いた札を持った何人かが座っているとする


○○5
○9○
12○

さらに他にも何人か数字の書いた札を持った人がいて、その人たちが空いてる席に順番に座って行くとする
全員座った後、それぞれの点数を数えるとする、ただし点数は前後左右の人が持ってる札の数字を足し算する


○○5
○9○
12○
で 3さん→4さん→7さん とすわり
○75
493
12○
となった、9の点数は7+4+3+2

この時、それぞれが自分の点数を最大になるように座ったら最終的にはどういう配置になるでしょう?ただし
・それぞれは座る順番を知っている
・その次に座る人達がどこに座るかまで考慮に入れて考える
・自分以外の点数は気にしない
・誰もいないところは0
・次の人が何箇所か座る候補があり絞れない時は常に予想図の最小値をとって考えるとする、つまり極端にリスクを恐れる
2018/04/22(日) 22:21:48.98ID:l7RA/Oa5
>>702
宿題は自分で解くから価値があるんだよ
2018/04/22(日) 22:38:26.14ID:7GS5N7oQ
自分より後の人のならび順、番号、人数はわかっている?

全員が天才で、その事を自分は知っている?
2018/04/22(日) 22:39:06.13ID:bjDlbJPk
>>957
このスレでそんな発言に意味があるのかな?
お題として面白ければ回答がつくだろうし糞だったら回答はつかないし、少なくともそれが宿題かどうかは関係ない
2018/04/22(日) 22:47:33.55ID:7GS5N7oQ
みんなが宿題を「お題」としてあげはじめたら
糞「お題」率が上がる

糞「お題」ばかりだとおれはこのスレを見なくなるだろう
2018/04/22(日) 22:56:47.60ID:l7RA/Oa5
>>959
宿題を書く奴は問題の解き方を理解できていないので、
ここに書かれる問いは「不完全な」問題になる。

お題として不適切なんだから、スレ違い
2018/04/22(日) 22:59:00.47ID:bjDlbJPk
>>960
宿題問題がすべて糞お題とは限らないだろう?
問題が宿題かどうかは問題ではなくて、問題が糞お題じゃなくて良問かどうかだろう?
2018/04/22(日) 23:01:16.13ID:bjDlbJPk
>>961
確かに宿題お題を出そうとする人間は、その問題が良問かどうかの判断すらできないから、必然的に「不完全な」出題になる傾向にある、というのはいえるかもしれないね
2018/04/22(日) 23:09:15.49ID:7GS5N7oQ
>>962
率の話

女は会社を辞める率が高いとか
黒人は犯罪率が高いとか
2018/04/22(日) 23:13:50.93ID:h9VBvdWZ
何のために宿題スレから分離したんだよ
2018/04/22(日) 23:19:32.66ID:bjDlbJPk
>>964
実は、出題者は(それが一部にせよ)教育的意図を抱いて問題を作成しているのだから、宿題問題には良問題が少ないとはいいきれない、と考えている
宿題問題でもそれが良問であれば、このスレで取り上げられてもいい、と思っている、まあ、ここんところは私見だが
で、ついた回答の多寡でこのスレの意志がある程度あらわされるんじゃないか、あからさまな宿題問題だったらこのスレでは回答はつかないからね

だから >>957 のようなことを書く人の考えていることがわからない、というか、>>957 は何も考えずに言葉のオートマタ(自動機械)的にレスを書いているんだね
そりゃなにも考えていないんだから、「考えていることがわからない」のも道理だと思いました
2018/04/22(日) 23:30:42.42ID:9Np5N8Zp
ふーん、でムーミン谷はどこにあるの?
2018/04/22(日) 23:31:41.45ID:7M0SJ8xj
>>966
お前の方こそ>>957がレスしてる元の流れを読まずにレスしてるオートマタでないか?
2018/04/23(月) 00:36:44.58ID:TheGSrgB
>>966
出題スレで「教えて下さい」「これ解いて下さい」等という感じの

「本人が問題の肝を理解していない」

ものに関しては須く「宿題は自分でやれ」と回答するのが出題スレだと思うが。
宿題なのか自作アプリで詰まってるのか知らんけど
出題スレで質問が許容されると他の人も懸念してる通り。
2018/04/23(月) 01:01:35.25ID:zSvvNM2R
問題が不完全だと思ったら好きに解釈して条件を決めて答えるのがこのスレ
宿題スレじゃないので出題者の意図・期待はどうでもいいからうっちゃって
面白そうだと思えば回答するのみ
2018/04/23(月) 01:41:00.51ID:Lxhtz3Yj
>>968
流されずに良く読んでるな
注意深いw
2018/04/23(月) 01:57:48.83ID:vGDXyrLu
>>969

>出題スレで質問が許容される
と糞お題が増える」
という懸念は、
このスレの性質上必然的に淘汰されるので、一時的に勃興したとしても、自然になくなるのでは?
必要のない縛りはない方がいい

>>971
>>968 は感心するほど注意深いね…
2018/04/23(月) 06:31:57.22ID:lnjW6wzS
「必要のない縛り」とは思ってない

「お題」スレであり質問スレではない
スレチを許容してたらスレの質が下がるのは明らか
2018/04/23(月) 06:33:05.46ID:lnjW6wzS
宿題は宿題スレがあるのでそちらへ。
2018/04/23(月) 09:49:33.46ID:7KuSA8wR
スレチが許されるなら数学の話も許されるはずだね
ましてや出題に関連した数学ならスレチとも言えないはずだが
2018/04/23(月) 10:42:43.85ID:n8Ml8Rp3
このスレで宿題が許容されたら宿題スレの存在意義が無くなるんでないか?
実質、スレタイの違う宿題スレが二つあるようなものなのでは?
2018/04/23(月) 11:00:07.86ID:7mKpSOdS
宿題にも良問があるかもと思う奴が自分で宿題スレを覗いて良問を待ってればいいだけの話で、このスレでは宿題は一切禁止でいいと思う。
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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