X



プログラミングのお題スレ Part10
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
垢版 |
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/

宿題は宿題スレがあるのでそちらへ。
0851デフォルトの名無しさん
垢版 |
2018/04/16(月) 15:43:24.03ID:4eWg6WR3
なるほど、最小って条件は止めるか
条件を変えるわ
解がN通りある時、それぞれの解の本数をa_i(1≦i≦N)とする
この時、任意のi,j(1≦i,j≦N)に対しa_j-a_i≧0を満たすa_iを出力してくれれば良いよ
>>845 隣接しない
隣接したらあみだくじとして成立しないしね
0852デフォルトの名無しさん
垢版 |
2018/04/16(月) 19:17:35.12ID:CKG1x9VY
>>841 J
2 echo 2&#;._2 stdin''
0854デフォルトの名無しさん
垢版 |
2018/04/16(月) 19:23:45.57ID:T6RcU2kF
多分最小を別の表現にしたつもりなんだろうけど
日本語がめちゃくちゃ
無理しなくて良いよ
0857デフォルトの名無しさん
垢版 |
2018/04/16(月) 20:06:21.68ID:w6kJX9+o
「任意のi,j(1≦i,j≦N)に対しa_j-a_i≧0を満たすa_iを出力」

意味がわかりません
0858 ◆QZaw55cn4c
垢版 |
2018/04/16(月) 20:08:00.59ID:yQIjKmTg
>>856
「任意の i, j」というのがおかしい、i を先に決定した上での「任意の j 」でいい
0866 ◆QZaw55cn4c
垢版 |
2018/04/16(月) 20:37:10.86ID:yQIjKmTg
>>859 >>861
一般ピープルが習得するとよい(大げさにいえば世界観が変わるような)数学の分野を教えていただければ嬉しいです
0869デフォルトの名無しさん
垢版 |
2018/04/16(月) 21:07:23.11ID:8eszbiHC
お題
マイナンバーが一部欠けてしまった
?部分を補完して可能性のあるマイナンバーをすべて列挙せよ

[example 1]
99999999999?
=>
999999999996

[example 2]
??9999999999
=>
069999999999
179999999999
289999999999
399999999999
509999999999
619999999999
729999999999
839999999999
949999999999
0871デフォルトの名無しさん
垢版 |
2018/04/16(月) 22:21:24.15ID:p2Ysyc3s
>>869 Ruby 全探索

A = (1..11).map{|i| i + 1 - i / 7 * 6}
%w[
99999999999? ??9999999999
].each{|s|
puts '', s, '=>'
10.**(s.count(??)).times{|i|
d = "%012d".%(i).chars
m = s.gsub(??){d.pop}.reverse.chars.map(&:to_i)
x = A.zip(m[1, 11]).map{|a, b| a * b}.sum % 11
puts m.reverse.join if (x == 1 ? 0 : -x % 11) == m[0]
}
}
#=>
99999999999?
=>
999999999996

??9999999999
=>
509999999999
619999999999
729999999999
839999999999
949999999999
069999999999
179999999999
289999999999
399999999999
0873デフォルトの名無しさん
垢版 |
2018/04/17(火) 10:02:17.20ID:XkVoPtoV
>>858 マジだわ、算数できない奴に噛み付いて自分がダメージ受けた
やはり数学で無理に語るべきではないな、専攻の情報の範囲だけにしとこ……
0874デフォルトの名無しさん
垢版 |
2018/04/17(火) 10:33:51.01ID:ePc5Lh3L
>>869 Squeak/Pharo Smalltalk

| check |

check := [:digitsStr |
 | digits checkDigit calcDigit |
 digits := digitsStr asArray collect: #digitValue.
 checkDigit := digits last.
 calcDigit := ((digits * #(6 5 4 3 2 7 6 5 4 3 2 0)) sum \\ 11
  in: [:x | x < 2 ifTrue: [0] ifFalse: [11 - x]]).
 checkDigit = calcDigit
].

#('99999999999?' '??9999999999') collect: [:incmpNum |
 | indices candNums |
 indices := incmpNum asArray collectWithIndex: [:chr :idx | chr == $? ifTrue: [idx] ifFalse: [0]].
 indices := indices reject: #isZero.
 candNums := OrderedCollection new.
 ($0 to: $9) asDigitsToPower: indices size do: [:digs |
  | candNum |
  candNum := incmpNum copy.
  indices with: digs do: [:idx :dig | candNum at: idx put: dig].
  (check value: candNum) ifTrue: [candNums add: candNum]
 ].
 incmpNum -> candNums asStringWithCr
]
0877デフォルトの名無しさん
垢版 |
2018/04/17(火) 16:49:46.20ID:KTfx2aCu
>>875

0296 デフォルトの名無しさん 2017/06/26 21:09:32

前にあったやつ。??

回転寿司にやってきた私は、コンベア上の寿司をすべて食べて帰ることにしている。??
コンベアは毎秒1皿分の速度で流れ、目の前の皿を取るか取らないかを選ぶことができる。??
皿取ると同時に食べ始め、食べている間は次の皿を取ることができない。??
私が取る以外、皿は追加されたり無くなったりしない。??
コンベアの状態が次のような文字列で与えられる。 ??
"31_2"??
数字はその皿を食べ終えるのにかかる秒数を表し、_は皿がないことを表す。1文字目が目の前にあり毎秒、左へ回転する。??
例えば、"31_2"で最初の皿を食べたとき食べ終わった時の状態は、"2_1_"となる。??

すべての寿司を食べ終えるまで最短何秒かかるか求めよ。??
"12_3" > 6秒??
"313__" > 8秒??
"4_35_1264_23_434" > 60秒??
"123456789123456789" > 98秒??
"88967472612377988186" > 149秒??
"19898693316679441672" > 170秒??
"93769682716711132249893" > ?
0879デフォルトの名無しさん
垢版 |
2018/04/17(火) 19:05:05.39ID:S4fl8nYd
>>322 J
echo !23x
0881デフォルトの名無しさん
垢版 |
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
→???
0883デフォルトの名無しさん
垢版 |
2018/04/18(水) 01:23:42.06ID:UfQjex1N
まーた数学の問題か。
まーたマウント取りたいセンセの荒らしか。
うんざり
0884デフォルトの名無しさん
垢版 |
2018/04/18(水) 03:59:26.48ID:Acg84ZKa
アルゴリズムと数学は切り離せないものだし数学が役立つ場面はもちろん多いんだけど、数学だけで完結しちゃう問題では、プログラミングのお題としては面白味がないよね。
むしろこのスレに的には悪問と言ってもよいと個人的には思う。

素直なプログラミングでは複雑になってしまうところを数学を使うことでスマートに解けるとか、逆に数学を使うことで全く別のアプローチの解法があるとかだと、面白いと思う。
必ずしも速い、安い、上手いが正義じゃなくて、そんな解き方もあるのねとか、それどうなってんの?と不思議に思えるような解法とかも見てみたいし、そんな解法が見られるお題が面白いと思う。
0885デフォルトの名無しさん
垢版 |
2018/04/18(水) 04:07:00.58ID:Acg84ZKa
追加すると、言語によって異なる記述能力や得手不得手を活かして上手く解いたとか簡潔に書けたとか、逆にわざわざそんな敢えて難しいやり方をするかとか、そういうのも面白いなと思います。
0887デフォルトの名無しさん
垢版 |
2018/04/18(水) 07:07:15.79ID:qlMtX02l
素因数の個数って何だっけ
互いに素な約数の個数なら、N=5の時33220(=2310=2*3*5*7*11)の方が多いし、素因数分解で出てくる素数の個数ならN=5の時31143(=2048=2^11)の方が多いし
私が文を読めていないだけ?
0888デフォルトの名無しさん
垢版 |
2018/04/18(水) 07:22:32.10ID:pdl2KQl9
ただ列挙して調べなきゃいけないとすると面白くもなんともない。
いい解を作ろうとすれば、できるかどうかはともかく
数学ひねり回すのだけがメインの仕事になるみたいな。
0890デフォルトの名無しさん
垢版 |
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
0891デフォルトの名無しさん
垢版 |
2018/04/18(水) 08:02:43.21ID:JUjvxXNW
素因数の個数だと2^11は2の1個だけなんだけどなあ
例だと11個と数えたいようだけど
0894デフォルトの名無しさん
垢版 |
2018/04/18(水) 08:15:58.76ID:iqodOpJQ
>>891
問題の着目点に応じて相異なる素因数の数になるか重解を許すか解釈すればいいんじゃないの

そうしないと高校数学に良くある(このスレにも出てるな)
「n! の素因数2の個数を求めよ」の答えが恒等的に1になってしまう。
知らんけど。
0898デフォルトの名無しさん
垢版 |
2018/04/18(水) 08:48:02.15ID:iqodOpJQ
いや重解は変換ミス
それに重複を許さない個数でも問題は成立するな、
良く考えると。
0903デフォルトの名無しさん
垢版 |
2018/04/18(水) 14:43:49.71ID:mfkhz8pH
>>816 J
200$(#~ 2&=@#@q:)2+i.1000
0906デフォルトの名無しさん
垢版 |
2018/04/18(水) 17:19:26.83ID:8LhMtFC1
あらかじめ調べておけばいい
どうせなら半素数自体もしらべてテーブルにしておけば
0909デフォルトの名無しさん
垢版 |
2018/04/18(水) 18:35:30.37ID:MXcoXWvI
究極に進化して、ある数を素因数分解しろとか離散対数求めろと言われたら、
何桁でもテーブルにあって即答ってか?
暗号死ぬわ。
0912デフォルトの名無しさん
垢版 |
2018/04/18(水) 20:18:15.86ID:mfkhz8pH
>>816 J
>>817のやり方で
/:~~.,*/~p:i.20
0914デフォルトの名無しさん
垢版 |
2018/04/18(水) 23:39:47.19ID:BI6oaZDa
ごめん。アンカ間違えた。>>869だった。
0915デフォルトの名無しさん
垢版 |
2018/04/18(水) 23:57:26.29ID:+652BqLv
トップバストとアンダーバストがmm単位で与えられるので
JIS L 4006におけるカップ体型区分を出力せよ
なお、与えられた体系が当該規格の数値と一致しない場合は
最も差の少ない体型区分を選べ

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

-*- output -*-
AA
E
H
0921デフォルトの名無しさん
垢版 |
2018/04/19(木) 04:01:30.95ID:4mrmpy84
このスレは、素数表を使う問題が多い

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

数学的な解法がなくて、全探索して見つけるものが多い
0922デフォルトの名無しさん
垢版 |
2018/04/19(木) 09:28:13.47ID:/i49YDDr
じゃあここで出てる問題をまず最初にNP完全かどうかを判定すればいい
競技プログラミングに適している問題かどうかを証明してから、改めてプログラミングにあたる
0924デフォルトの名無しさん
垢版 |
2018/04/19(木) 09:51:24.98ID:4mrmpy84
プログラミング・コンテストの良問は、
持ち込みの自作ライブラリでは解けないもので、

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

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

見所はインデックスを25で割らずテーブルを25倍にしてるとこか
0929デフォルトの名無しさん
垢版 |
2018/04/21(土) 21:12:35.96ID:nWGazij5
配列を、って言ってるのに%wでスペース区切りの文字列から作るの?
てかrubyの%wって何のためにあるの?
splitあるのに組み込みので提供するほどのもの?
他言語者からしたらsplitは分かってもらえると思うが%wは分からんと思うぞ?
やっぱ書くだけの書き捨て言語なんかな。
0930デフォルトの名無しさん
垢版 |
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
0931デフォルトの名無しさん
垢版 |
2018/04/21(土) 22:20:27.52ID:6J3G0l4e
>>929
>てかrubyの%wって何のためにあるの?

まさに今回のような場合に配列リテラルを作るためのものだろ
各要素が所与なのになんでわざわざ繋いだ文字列リテラル書いてsplitしようとするの?
0932デフォルトの名無しさん
垢版 |
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
0934デフォルトの名無しさん
垢版 |
2018/04/21(土) 23:51:06.09ID:Ktcilsrm
>>931
今回のような??
今回の問題文、「文字列の配列をカンマ区切りで表示せよ」ってなってんだが…
スペース区切りの文字列から始めてどうする。
それじゃ%wで配列にするまでもなく正規表現でスペースをカンマに置換すればいいじゃん。
0935デフォルトの名無しさん
垢版 |
2018/04/22(日) 02:37:42.05ID:J/MYnpG1
>>928
Kotlin
https://paiza.io/projects/ZW2Hjc9tfnlrMwqvblaKlw
文字列は1行づつ入力から読んで MutableList に add して終わったら Array に変換して文字列の配列にしている。
0936デフォルトの名無しさん
垢版 |
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
0937デフォルトの名無しさん
垢版 |
2018/04/22(日) 03:13:36.97ID:9vFMU6Rd
一番かんたんなの忘れてた
console.log(langs.toString())
console.log(langs + '')
console.log(`${langs}`)
0939デフォルトの名無しさん
垢版 |
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' "
0948928
垢版 |
2018/04/22(日) 15:38:01.72ID:tE7JnHSh
蛇足で無粋でしょうけど寸評をもってお礼に代えさせて下さい

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

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

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

この本はある意味お題になりそうな問題の宝庫ではないかと思う。
0951 ◆QZaw55cn4c
垢版 |
2018/04/22(日) 15:57:34.72ID:bjDlbJPk
>>949
おう!
pascal 版を見たことがある、と思ってたんですが、気のせいだったのかな?
レス数が950を超えています。1000を超えると書き込みができなくなります。

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