プログラミングのお題スレ Part9 [無断転載禁止]©2ch.net

レス数が900を超えています。1000を超えると表示できなくなるよ。
2016/12/01(木) 16:58:30.97ID:gTkHDluD
プログラミングのお題スレです。

前スレ
プログラミングのお題スレ Part8©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1444216746/

【出題と回答例】
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/

宿題は宿題スレがあるのでそちらへ。
2017/12/07(木) 22:07:39.64ID:BdlZ1dXv
>>817の意味がわからん
解説よろしく!
820デフォルトの名無しさん
垢版 |
2017/12/07(木) 22:27:00.87ID:XIHsqoOR
>>801のように積へ変換した場合、どれ位の精度・桁数が必要なのか簡単にわからないな。
>>801でやると、誤差ありの巨大な数同士の掛け算になって、その結果誤差が拡大する。
和のままやると、適当に2ベキをかければ、各項の整数部分だけ計算すればよさそうだけど。
>>801は桁を十分にとったとしても、2進10桁以上の部分も計算途中で無視はできないか。
2017/12/07(木) 22:32:10.24ID:5gbe7aWB
グア。題意勘違いしてた。
直方体の対角線はいらんのか。うおー。
ばかばかー。
2017/12/07(木) 22:57:05.97ID:5gbe7aWB
>>807
https://ideone.com/Uipgvw
C++。書き直したら、>>816のパクリ見たくなった。
そしてそれでも遅いとかあかんなー。
うーん。なんでなんだろう・・・。
2017/12/07(木) 23:06:46.33ID:BdlZ1dXv
>>820
普通に、求めたい精度+α の精度を保てば十分かと
演算回数はlog(n)のオーダーなので
普通にlog(2)を求める時には使える手法
2017/12/07(木) 23:06:47.69ID:8KQwIEWy
>>819
https://ideone.com/ZCINKa
適当にコメント付けた
2017/12/07(木) 23:18:28.32ID:8ACt5G91
物体は表面だけでなく無数の内面を有するという考えは絶対に存在する
一方で全てを表面でしかとらえない人の存在も否定できない
2017/12/07(木) 23:24:59.96ID:BdlZ1dXv
このポエムをどうプログラミングしろと?
2017/12/08(金) 03:20:08.11ID:JkPU7Xcj
>>807 Ruby
https://ideone.com/3BPK13
20秒程かかってしまう
828デフォルトの名無しさん
垢版 |
2017/12/08(金) 12:45:22.72ID:lX5lg0SB
log2は>>801でもできそうだ。
積の先頭ほど精度が必要で、無視できる上限・下限を積の位置で可変にするか、
最初の積の計算で必要な精度をすべてに適用するかでいけそう。
2017/12/08(金) 14:42:05.63ID:3hyL4NRS
>>817
これパクってstd::bitset<10001>でやったら動かないかな
nextSetBitだけ作れば動きそう
2017/12/08(金) 17:20:05.13ID:qoqqt6pE
>>829
やってみた
いろいろ怪しいが速度は強烈に速いな

https://ideone.com/d4dU1Q
2017/12/09(土) 00:08:31.54ID:NdkcUgXa
>>828
時間的に無理だろって話
832デフォルトの名無しさん
垢版 |
2017/12/09(土) 02:59:25.21ID:C21Kkp0z
>>807
これでいいかな?
Kotlin で書いた。しかしpaiza.ioの制限なのか、何故か import kotlin.math.* がエラーだったので java.lang.Math の関数を使っている。
https://paiza.io/projects/ImbYdf3NSWgW-zj8Ke6cDw
833デフォルトの名無しさん
垢版 |
2017/12/09(土) 09:05:25.04ID:WAlxvB4a
お題
10,000以下の三角形数をもとめる
2017/12/09(土) 09:42:44.72ID:HfcuYzyJ
>>833
三角数だよね?
.js
https://ideone.com/WZBIFF
2017/12/09(土) 10:35:24.71ID:PLdtTEIG
>>833 ruby
i,j=0,-1;p i while(i+=j+=1)<10000
2017/12/09(土) 21:40:06.26ID:PLdtTEIG
>>833 Brainf**k ワンライナー(笑)
https://ideone.com/TyMeco
遅すぎて8bitまでしか計算できなかった
2017/12/09(土) 23:46:47.87ID:3TNSAl29
ideone.comはたいして最適化しないBrainf**k処理系だからな
838デフォルトの名無しさん
垢版 |
2017/12/10(日) 00:50:34.10ID:J0bkBqjd
>>833
1+2+3+... だよね? じゃあこうだ。
perl -e '$i=0;$n=1;while(($i+=$n)<=10000){print"$i\n";++$n}'
839デフォルトの名無しさん
垢版 |
2017/12/10(日) 00:52:24.37ID:J0bkBqjd
>>833
while じゃなくて for にするとこう。
perl -e 'for($i=0,$n=1;($i+=$n)<=10000;++$n){print"$i\n"}'
840デフォルトの名無しさん
垢版 |
2017/12/10(日) 08:00:18.20ID:uc7Ht429
>833 R
cat(cumsum(0:140))
841デフォルトの名無しさん
垢版 |
2017/12/10(日) 09:05:44.08ID:gZDGKqrG
>>801は精度管理の手間を考えたら、そのまま級数計算するのと大差ないと諦めたが。
こうすれば割り算の小数計算がほぼでないからいいのでは? 既に実装済?


an = 1/n、r = 2として、Σ an/r^n を定数C倍したやつの整数部分の取り出し。
C*anを再びanとおく。
Σ an/r^n
= a2/r^2 + a4/r^4 +・・・+ aN(2)/r^N(2) (添え字は2の倍数を動く)
+ a3/r^3 + a9/r^9 + a15/r^15 + ・・・+ aN(3)/r^N(3)
+ ap/r^p + ・・・+ aq/r^q + ・・・ (pは素数、qはp未満の数で割り切れないpの倍数)

= 1/N(2)r^N(2) * ( N(2)*a2*r^(N(2)-2) + ・・・ + N(2)*aN(2) ) + ・・

この分子部分は、各項、整数でそのまま計算しても>>801でも速くなるはず。
842デフォルトの名無しさん
垢版 |
2017/12/10(日) 21:52:17.18ID:gZDGKqrG
>>841は添え字に被りが出ていて間違えてた。
2017/12/10(日) 22:07:36.99ID:XvO3Mos9
やってみて時間教えて
2017/12/10(日) 22:08:42.09ID:XvO3Mos9
>>805 >>811 を抜ける?
845デフォルトの名無しさん
垢版 |
2017/12/10(日) 22:22:45.57ID:gZDGKqrG
秒数ではCPU依存するから正確に比較できない。
掛ける2だけのループを10^10回するだけでも19秒では終わらない。
無料のideone codepadなどの実行可能時間以内にできる範囲とか、
ベースとなる簡単なコード、関数の何倍時間がかかるかなどだと比較できるけど。
2017/12/10(日) 22:36:08.95ID:3sNoocWL
演算回数の見積りは?
84735歳
垢版 |
2017/12/11(月) 02:10:45.96ID:OsSLt9Cy
Bronze取りました
84835歳
垢版 |
2017/12/11(月) 02:11:34.08ID:OsSLt9Cy
Bronze取りました
2017/12/11(月) 04:58:28.24ID:zs4BBX0s
くだらん話かも知れんけど
竹内関数のメモ化

https://ideone.com/sVhke1

これはC++によるものだけど、C++や他の言語でもっと高速に書く方法はあるか?
2017/12/11(月) 05:19:34.19ID:zs4BBX0s
あ、ちなみにideoneの結果は間違っている
多分スタックオーバーフローしている
100, 50, 0の場合は答えは100
2017/12/11(月) 05:38:23.74ID:pBTqvDfH
>>849
constexprにすれば実行時はほぼ計算無しにできると思う。
コンパイル時間半端ないけど。
2017/12/11(月) 05:45:19.55ID:pBTqvDfH
ところで、いくらメモ化してても5回しか呼ばれないってことがあるのか?って気はする。
2017/12/11(月) 07:04:34.34ID:pBTqvDfH
https://ideone.com/Y9WhRz
竹内関数constexprにしてみた。
ウチの環境だとこの辺のパラメータが限界っぽいかな。
100,50,0だとメモリ使い切るらしい。
2017/12/11(月) 07:09:30.00ID:pBTqvDfH
あら、コンパイルエラーになっちゃった。
VCだと通ったんだけど。もちろんステップ数とか設定はいじってるが。
855デフォルトの名無しさん
垢版 |
2017/12/11(月) 08:32:22.37ID:gAGFZ0s2
>>849
こんなのとか?

たらいを回すならHaskella
2006年04月07日 22:09
http://blog.livedoor.jp/dankogai/archives/50447103.html
856デフォルトの名無しさん
垢版 |
2017/12/11(月) 12:03:51.37ID:uZdMj4Ux
お題
6つの辺の長さが 与えられた4面体の体積を求める
2017/12/11(月) 13:07:53.63ID:iSg/oyC4
お題
8つの辺の長さが与えられた超5面体の体積を求める
2017/12/11(月) 14:29:31.82ID:hKbhSguL
お題
与えられた自然数を高々四個の四角数(平方数)の和で表せ
2017/12/11(月) 14:35:19.85ID:k7Z6O4lr
>>856 Ruby
https://ideone.com/qbHExm
ただし四面体ABC-Dに対して入力の順序は
AB BC CA CD DA BD とする
2017/12/11(月) 16:06:12.32ID:k7Z6O4lr
>>857
8つだと多胞体が一意に定まらないと思うんだが
2017/12/11(月) 16:48:32.53ID:qWzXCzKk
>>853
64bit環境でやったらスラッシング起きて\(^o^)/
2017/12/11(月) 16:53:24.07ID:iSg/oyC4
>>860
じゃあ10個で
2017/12/11(月) 17:03:18.77ID:k7Z6O4lr
>>862
10でも足りないと思うんだけどひょっとして超五面体って五胞体のつもりで言ってる?
2017/12/11(月) 17:31:58.31ID:iSg/oyC4
4次元の5胞体
2017/12/11(月) 17:32:53.55ID:iSg/oyC4
5C2=10
2017/12/11(月) 22:30:10.81ID:pBTqvDfH
>>861
ウチはi6700メモリ8Gだな。20秒くらいボケーっとしてたらコンパイル完了する。
実実行より全然早い。
2017/12/11(月) 23:43:41.01ID:jF/PrBtV
>>866
んー32bitでコンパイルしてみるかな
64bitはマジ卍ヤバい
2017/12/12(火) 00:19:40.23ID:JpJzeAvs
>>866
悪い
VCで /constexpr:steps 1000000を付けてコンパイルしたら4秒ほどでコンパイルが終わった
多分/MPも付けてるからだと思う
実行結果は25になった

gcc 7.2.0 64bitだとどんどんメモリを食って行って最後にスラッシングが起きる
馬鹿正直な実装をしているからかも知れないね

VCの方がいろいろとメモリを食わないように工夫されてるのかも

Clangでも/constexpr:steps は -fconstexpr-steps という形でサポートされてるようだから
多分行けると思う
メモリ64G積んでるし
2017/12/12(火) 01:27:56.58ID:qpuoD4bc
>>868
いいマシーンだな。
まぁ、ウチはあれくらいで資源尽きちゃうけど、メモリ64Gもあったらもっと行けるな。
気が向いたらどうぞ。
2017/12/12(火) 04:08:00.08ID:SvlIPxM4
>>858 Java
https://ideone.com/ND4D2n
2017/12/12(火) 22:52:21.86ID:38dJ/vud
以下のURLのように、同じ色の点同士をつなぐゲームがある。
https://play.google.com/store/apps/details?id=com.bigduckgames.flow

N×Mの2次元配列が与えられる。配列の各要素は半角英字('a'-'z')または'*'である。
半角英字は色付きの点を表し、'*'は空のマスを表す。
'*'以外の文字は、配列中に必ず2個ずつ存在する。

このパズルの解を一つ出力せよ。
・'-'は左右のマスをつなぐ
・'|'は上下のマスをつなぐ
・'.'はマスをつながない

解がない場合は"No solution"と出力せよ。

[input]
***rg
**bg*
r****
ob*yo
****y

[output]
*-*-*-r.g
|.......|
*.*-b.g-*
|.|......
r.*.*-*-*
..|.|...|
o.b.*.y.o
|...|.|..
*-*-*.*-y
872デフォルトの名無しさん
垢版 |
2017/12/15(金) 09:30:54.91ID:gDuLBiTf
>>841
やってはないけど、そもそもこれ間違ってるのと、同じような発想でやるとしても
全ての素数での分類ではなく、3分割くらいのほうが効率がいいのと、
Σ (2の倍数) + Σ (3の倍数かつ2の倍数でない) + Σ (2と3で割り切れない) 
分割する事もなく、N項の和だとしたらNの階乗か分数をなくせる最小公倍数かけてもいい。それだと掛け算もしくは割り算がいくつも出てくるが。
873デフォルトの名無しさん
垢版 |
2017/12/16(土) 14:04:43.43ID:+Cq6iaDY
>>871
等幅フォントで表示しているエディタにコピペしてようやっと何を言わんとしているか分かった。
それってマスとマスの間に - または | を入れて繋ぐってことでいいんだよね? で、つながない所がピリオドだと。
(まあ等幅フォントのASCIIでやるならそれしか方法ないとは思うけど)。
874デフォルトの名無しさん
垢版 |
2017/12/16(土) 14:07:59.25ID:+Cq6iaDY
しかしピリオドは

**
**

の時に

*.*
...
*.*

のようになって中央のピリオドが本来なら不要なものになるわけだが、それはスペースでなくても良いのかな?
まあただの幅合わせだからどうでもいいものではあるが。
2017/12/17(日) 12:04:31.10ID:V69L7+t+
>>801 の方法で出来ると書いてるけど
結局誰もやってないのか

個人的には(高速には)出来ないと思っている
2017/12/17(日) 12:18:14.72ID:V69L7+t+
>>871
課題じゃなくて
単にソルバーの作成依頼でしょ
2017/12/17(日) 17:50:05.54ID:3PMrWzl3
無理に線引かないでrだのgだので埋めた方がわかりやすいと思うがな
すべてのマスを埋めなければならないルールが抜け落ちてるみたいだから
実は別物のゲームで交差があるとかなったらそうはいかないが
878デフォルトの名無しさん
垢版 |
2017/12/17(日) 20:33:27.61ID:0HU8GFa9
ブレゼンハム的なやつって、始点と傾き(と区間や境界等で決まる明示されない終点)が
与えられた際に、終点座標を求めてから始点に向かうのってアリなんだろうか?
879デフォルトの名無しさん
垢版 |
2017/12/18(月) 08:21:39.40ID:T+ClDj4W
ここでやるには問題がでかすぎ
100分割してほしい
2017/12/21(木) 14:37:42.61ID:/SOyyWKP
>>871 Ruby
https://ideone.com/EOj9mz
ただし解は1つでありかつ線が通らないマスは無いことを前提とする
問題はここから引用:→http://www.nikoli.com/ja/puzzles/numberlink
2017/12/21(木) 14:38:13.66ID:/SOyyWKP
あ、あと出力方法は自分好みに適当にいじってる
2017/12/21(木) 15:58:54.33ID:jrnuCabF
訂正
ただし解は1つでありかつ線が通らないマスは無いことを前提とする
ではなく
解が存在すればすべての解は全てのマスを通ることを前提とする
883デフォルトの名無しさん
垢版 |
2017/12/22(金) 19:30:58.88ID:PPoMR9m8
お題
22の分割(たとえば3+3+5+8)のうち
分割したそれぞれの数の逆数の和が1になるものを求める
884デフォルトの名無しさん
垢版 |
2017/12/22(金) 19:39:05.90ID:PPoMR9m8
早速間違えましたすみません
3 +5 +6 +8
でした
2017/12/22(金) 20:06:25.02ID:FRcsVGN9
>>883 ruby
f=->n,k{n==1?[[k]]:(1..k/n).flat_map{|i|f[n-1,k-i].map{|j|[i,*j].sort}}.uniq}
(1..22).each{|i|f[i,22].each{|a|p a if a.map{|e|1r/e}.sum==1}}

#=>[2, 4, 8, 8]
[2, 5, 5, 10]
[3, 3, 4, 12]
2017/12/22(金) 21:21:23.60ID:Mb+deFNF
C++で書いたけど、オセー。
デバッグ大変だ。
うーん。困ったなぁ。
2017/12/22(金) 22:04:05.10ID:Mb+deFNF
https://ideone.com/3ZWKv1
C++。こんなコード書いてみたけど、無理ゲー。
ちょっと厳しいなぁ。最近解けてないなぁ。
ちなみにデバッグ不完全なのであしからず。
2017/12/22(金) 22:16:42.15ID:cfNB9eDL
こういう数学的な問題を解くにはやっぱりプログラミング以前に数学を勉強した方がいいのでしょうか?
2017/12/22(金) 22:23:25.38ID:Mb+deFNF
>>888
数学は大事だよー。
俺数学出来ないから、解けない問題がそれなりにある。
算数では限界だ〜〜。
まぁ、数学とプログラミングって習得時はオーバーラップするところが少ないから融合するまでちょっと大変かな。
でも数学は強力なツールです。
2017/12/22(金) 22:40:51.06ID:wxhiocJz
一般論でいえば必要だろうけど>>883なんて全部列挙したところで計算量はたかが知れてるし
目下必要なのは論理学的思考能力なのでは
2017/12/22(金) 22:51:38.40ID:rSDEoHGj
>>883 Java
https://ideone.com/WiMkNl

22くらいなら大丈夫だけど桁が増えると(´・ω・`)
2017/12/23(土) 10:08:16.78ID:t1pvAVGb
お題
52をいくつかの自然数に分解して
それらの最小公倍数を最大化せよ
2017/12/23(土) 10:30:51.64ID:NDYwz7Jw
分解って、積じゃなくて和で良いんだよね?
数学の知識を使うと一瞬だけど
894デフォルトの名無しさん
垢版 |
2017/12/23(土) 10:47:21.72ID:xQ13BTQc
>>892
2*3*5*7*11*23
2017/12/23(土) 10:51:04.98ID:NDYwz7Jw
>>894
ダメだろ
2017/12/23(土) 10:54:01.61ID:NDYwz7Jw
数学の知識が無いなら素直にコンピューターの力を借りなさい
2017/12/23(土) 11:07:49.77ID:afY4COyy
そもそも数学で簡単にとけない問題を力わざでとくための計算機だろ
2017/12/23(土) 11:20:55.96ID:2Y/dvvuZ
>>894
よくわからんが52の場合は
180180 [3, 4, 5, 7, 9, 11, 13]
ということらしいぞ
899デフォルトの名無しさん
垢版 |
2017/12/23(土) 11:22:52.27ID:TLP4YLw7
2+3+5+7+11+13+11=52
2017/12/23(土) 11:23:44.11ID:ZIVZRbx3
C++17発行されたから開発環境がさっさと対応してGCDくらい使えるようになりたい。
2017/12/23(土) 20:45:26.14ID:PT43Bq9S
>>768の問題で0<=b<10,0<c<10という制限がついた時
移動を何回か繰り返すと必ず元に戻るんだけど
その回数はbには無関係にc,10-c,10の最小公倍数で
okかな?
2017/12/23(土) 23:54:31.73ID:PT43Bq9S
一回の移動ではd=1ね。
ま、その制限を付けなくともd,c,10-c,10の最小公倍数になるんだろうけど
2017/12/24(日) 06:15:12.28ID:C5ELqEVz
>>901-902
10-c,10の最小公倍数じゃね?
2017/12/24(日) 12:14:01.21ID:PCWcyI8B
>>899
>>896
905デフォルトの名無しさん
垢版 |
2017/12/24(日) 13:55:05.53ID:aCkD6VOe
数学云々言ってる奴って、何故かその成果見せないよな。
俺でも出来そうなFUD、いやマウントかな。
906デフォルトの名無しさん
垢版 |
2017/12/24(日) 16:16:06.49ID:7ASFTRv4
ていうか、計算機はどちらかというと算数だよな。
数学は公式とか証明とか、そういう手順みたいなものを考えるわけで、プログラミングに近い。
コンピュータは作られたプログラムに従って計算結果を出すだけ。
もちろんプログラムそのものをコンピュータに作らせることも可能だけどね。これは次元が違う話だよね。
2017/12/24(日) 20:21:20.17ID:TJswah5E
プログラムには算数と三角関数とかがあればいい
あとN進法
2017/12/24(日) 22:49:45.08ID:ke4WkGne
行列演算とか諸々の配列操作関数がないと無理だな
2017/12/24(日) 23:49:37.37ID:HHMC0VFW
では簡単なお題を
bを底とする値vを、2〜36進数に変換し表示してください。
なお、bは2〜36の整数、vは0以上の整数とし、不正な入力はないものとしてよい。
また、底と値の区切り文字は入出力ともに特に問わない。
[入力例]
16 deadbabe
[出力例]
2#11011110101011011011101010111110
3#100122100210210001200
4#3132223123222332
5#30122344134421
6#1414413520330
7#161402600604
8#33653335276
9#10570723050
10#3735927486
11#1647919685
(略)
27#9h9ll1i
28#7l225hi
29#6842o9l
30#53m7kg6
31#46f9hir
32#3farelu
33#2tf7mor
34#2e7m366
35#214kbpb
36#1ps9w3i
2017/12/25(月) 00:09:45.09ID:3pQBp6tI
>>909 Java 手抜き実装二つ
https://ideone.com/jybq1N
https://ideone.com/Wm8OQ2
2017/12/25(月) 00:32:41.94ID:LEWwY/wL
>>909
c++old http://mevius.2ch.net/test/read.cgi/tech/1434079972/29
2017/12/25(月) 02:44:06.33ID:FXcNW9u1
>>909 ruby
n=eval"%2$p.to_i %1$d"%"16 deadbabe".split
(2..36).each{|i|puts"%d#%s"%[i,n.to_s(i)]}
2017/12/25(月) 04:27:01.50ID:Cnt90MG5
>>909
https://ideone.com/dxqIrP
C++。まぁこれくらいなら算数でも解ける範囲やな。
ただしコードがバグってないとは言ってない。へへ。
914デフォルトの名無しさん
垢版 |
2017/12/25(月) 06:21:01.65ID:P1JMpVx5
>>909 lisp
https://ideone.com/6D7LRp
915デフォルトの名無しさん
垢版 |
2017/12/25(月) 12:28:00.12ID:Lg9qxqUa
>>909
Kotlinらしくしてみようとはしたが、あまりにも短く、更に俺がまだよくKotlinを知らないためにこんな風になった。
https://paiza.io/projects/BpAXUQuDCaOSD6Q6GN4O8A
肝心な所はJavaとほぼ同じ。
2017/12/25(月) 19:56:50.93ID:IEH/2als
>>909 F#
https://ideone.com/rRZ949
2017/12/26(火) 10:23:38.85ID:Hd2qVaf/
>>909 Squeak/Pharo Smalltalk

| n |
n := '16 deadbabe' replaceAll: Character space with: $r; asNumber.
2 to: 36 do: [:i | Transcript cr; show: i; space; show: (n radix: i) asLowercase]
2017/12/28(木) 04:53:27.57ID:N8L362th
お題を捏造してやるぜ。
アンサーが42になる式を捏造せよ。という数学パズル。
小難しい式をでっち上げた人が優勝。
算数から数学、物理まで式になってればすべての手法が使用可能。統計とかでもいいよ。
制約は答えが42になることのみ。
解けるものはいるか?
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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