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

■ このスレッドは過去ログ倉庫に格納されています
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/
520513
垢版 |
2019/12/31(火) 18:46:25.67ID:H+c+1UtF
>>513
64ビットに収まるようにしたので簡単でしたかね

C++
https://ideone.com/VRdN4q
2019/12/31(火) 18:47:43.73ID:H+c+1UtF
>>514でした
すみません
2019/12/31(火) 19:45:18.11ID:5fWgt8Ro
>>449
https://ideone.com/nisdwQ
C++。問題勘違いして全探索かいたんだよ〜。
おわらねー。Orz
523デフォルトの名無しさん
垢版 |
2019/12/31(火) 20:25:50.73ID:W8YPZd1D
>>522
100億人に2020になる素数をプレゼント出来そうだ。
2019/12/31(火) 20:58:55.61ID:5fWgt8Ro
>>523
100億!!???マジで??
そら手に余るわ。教えてくれてありがとう。

プレゼントするときは、「あなたに特別な2020を!」って感じか。
525デフォルトの名無しさん
垢版 |
2020/01/01(水) 07:48:09.89ID:W9Zu1XGU
>>523
素数2個の2020は41人しかあげられない。
2020/01/01(水) 12:10:34.36ID:WIYGoppO
あけおめ
2020/01/01(水) 12:56:41.11ID:WIYGoppO
お題

a^n + b^n + c^n = 2020
の整数解のうちnが最大の物を求めよ
2020/01/01(水) 15:06:53.67ID:/JBKhr80
あけおめ〜
2020/01/01(水) 15:29:53.46ID:qVK/11PV
A HAPPY NEW YEAR !!!

というコード。
2020/01/02(木) 04:45:53.28ID:cCzcmPOa
>>451
2020/01/02(木) 14:00:53.09ID:2eGsq/cP
(´;ω;`)
2020/01/03(金) 03:43:04.42ID:ct9N0pK8
お題

a^3 + b^3 + c^3 = 2020 * 2
の整数解を求めよ。
2020/01/03(金) 03:49:51.76ID:ct9N0pK8
追加

a^3 + b^3 + c^3 = 2020 / 2・2
の整数解を求めよ。
534デフォルトの名無しさん
垢版 |
2020/01/03(金) 03:54:35.20ID:pVliia9g
>>486
Kotlin
https://paiza.io/projects/5OHDudzLFUjSV6DAdxFcfw

こんなので良いの?単に掛け算して一致するか比較しているだけなんだけど。
オマケとして重複しないようにはしているが。
535デフォルトの名無しさん
垢版 |
2020/01/03(金) 04:17:21.42ID:pVliia9g
>>532
C
https://paiza.io/projects/vMRPBddVA6FgCl6AHaGXOw

どう?
536デフォルトの名無しさん
垢版 |
2020/01/03(金) 04:18:44.02ID:pVliia9g
>>533
最後の 2・2 の部分って何? 2.2? こっちで文字化けしてちゃんと表示されてないだけ?
2020/01/03(金) 09:45:42.54ID:+RiBlMC+
>>536
2020 / 2・2 = 2020 / 2 * 2 = 2020
2020/01/03(金) 12:48:37.25ID:3k7MKqlh
>>532
200万以下だと38通り
(並び替えも数えるとその6倍)

>>533
2020は解無し
1010は100万までには解は無い
505は100万までに18個
2020/01/03(金) 12:51:02.88ID:3k7MKqlh
>>527
n乗して64bitの範囲だとn=2しか発見出来なかった
2020/01/03(金) 20:05:33.33ID:3k7MKqlh
>>532
C
https://ideone.com/ctjDC0

38個見つけるのに1時間くらいかかりました
38個目 (1661082, 440694, -1671358)

こういうのはC/C++が得意でしょう
他の言語で出来ます? (挑戦)
541デフォルトの名無しさん
垢版 |
2020/01/04(土) 17:22:50.50ID:HJ66bOYq
お題
>>514に関連して、F(F(80))の桁数を求めよ。

計算式は簡単だが…
2020/01/04(土) 17:47:47.60ID:6lKY6ugm
over flow周りはあってるんだかわからん
https://i.imgur.com/PndnV6t.png
2020/01/04(土) 19:01:02.66ID:hAlxX0tq
Mathematica ?
2020/01/04(土) 20:28:18.17ID:rMjoeVI8
お題: 文字列を逆順にしてコピーするreverse関数を定義せよ(既存のライブラリを使ってはならない)
2020/01/04(土) 20:40:17.01ID:YRTK1M0u
>>544 Ruby

puts 'ABCDEF'.chars.then{|a| a.size.times.map{a.pop}}.join

# => FEDCBA
546デフォルトの名無しさん
垢版 |
2020/01/04(土) 20:46:16.21ID:HJ66bOYq
>>544 PowerShell

function reverse($s) {-join $s[-1..-$s.length]}
reverse 文字列を逆順にしてコピーするreverse関数を定義せよ

-- 実行結果 --
よせ義定を数関esreverるすーピコてしに順逆を列字文
2020/01/04(土) 21:12:58.70ID:AqMdau2S
>>544 Ruby
def reverse( s ); s.chars.inject(:prepend); end
2020/01/04(土) 21:13:39.03ID:rMjoeVI8
>>544 C
https://ideone.com/8mVMpf
549デフォルトの名無しさん
垢版 |
2020/01/04(土) 21:26:02.66ID:e7dEja3I
>>544
Java
https://paiza.io/projects/t01pm19B5qJfhk_bOyJXMQ
550デフォルトの名無しさん
垢版 |
2020/01/05(日) 00:51:01.04ID:Y4p4/H36
>>544
Kotlin
https://paiza.io/projects/RdcgXqdUDC52BTO0y9n1zw

Kotlin の String には reversed() という文字列順序逆転のための拡張関数が最初からあって紛らわしいので rev() という名前で自作した。
2020/01/05(日) 08:25:52.70ID:h+ccWvVu
>>532
 {a, b, c} = {-12, -4, 18} {-4, 2, 16} など
>>533
 {a, b, c} = {-6, -2, 9} {-2, 1, 8} など
552デフォルトの名無しさん
垢版 |
2020/01/05(日) 08:35:04.57ID:OU8kozEP
>>544 Ruby
def rev(s)
(1..s.size).map{|i|s[-i]}.join
end
553デフォルトの名無しさん
垢版 |
2020/01/05(日) 11:04:36.67ID:Z8HxF2cT
>>544 Common Lisp
https://ideone.com/cORf5W
https://ideone.com/NbfBax
2020/01/05(日) 15:25:24.03ID:+tGOF19X
>>544 Python
def reverse(s):
return s[::-1]
555デフォルトの名無しさん
垢版 |
2020/01/05(日) 16:01:41.83ID:8nvrboOv
>>540
こういうのを見ると我々は離散数学についてはほぼ無力と思う。
2020/01/05(日) 17:02:46.74ID:x729cdax
>>555
勉強しとけ
557デフォルトの名無しさん
垢版 |
2020/01/05(日) 21:49:56.17ID:2Fq0AHrI
>>544 R
https://ideone.com/mfvWPO

>>546のPowerShellと違って、U+10000以上の文字が含まれていても正しく逆順にできる。
558デフォルトの名無しさん
垢版 |
2020/01/05(日) 21:52:10.17ID:2Fq0AHrI
>>542
仮数部も指数部も間違っている。整数で1の位まで正確に求められるよ。
2020/01/05(日) 22:31:31.58ID:h+ccWvVu
>>540 サンクス

>>532 の解
{13, 11, 8}
{15, 9, -4}
{8, 1, -2} * 2
{9, -2, -6} * 2
{16, -6, -15} * 2
{74, -23, -73}
{43, -27, -39} * 2
{171, -75, -166}
{169, 64, -172} * 2
{516, 93, -517}
{414, 385, -504} * 2
{530, 337, -572}
{1098, 939, -1291}
{1290, 171, -1291}
{1626, -957, -1507}
{2251, -712, -2227}
{3107, -587, -3100}
{3299, 1018, -3331}
{3509, -2525, -3004}
{4022, -3163, -3221}
{2673, 1114, -2736} * 2
{13571, -9259, -11948}
{15291, -8419, -14388}
{10102, 674, -10103} * 2
{43943, 28524, -47631}
{23689, -3382, -23666} * 2 など。
2020/01/05(日) 22:41:01.23ID:h+ccWvVu
>>533 の解
{8, 1, -2}
{9, -2, -6}
{16, -6, -15}
{43, -27, -39}
{169, 64, -172}
{414, 385, -504}
{530, 337, -572}
{2673, 1114, -2736}
{10102, 674, -10103}
{23689, -3382, -23666}
 ・・・ ・・・
{830541, 220347, -835679} など。
2020/01/05(日) 22:48:30.69ID:bLPoA6E7
>>541
C++
https://ideone.com.VJk9QA

倍精度だと微妙に精度が足りないので
擬似4倍精度で計算してみた

4倍精度や多倍長が使える言語やライブラリを使えば一瞬で書けるんだけど
2020/01/05(日) 22:49:34.33ID:bLPoA6E7

https://ideone.com/VJk9QA
でした
563デフォルトの名無しさん
垢版 |
2020/01/05(日) 23:29:51.01ID:2Fq0AHrI
>>562
正解。

Rには多倍長浮動小数点パッケージRmpfrがあるので、120ビット精度での計算をさっと書ける。
多倍長整数パッケージgmpにはフィボナッチ数列の第n項を求める関数があるので、第80項を
自分で求める必要すらない。
https://ideone.com/VcxXIm

C/C++にもlong double型があるので楽勝!と思っていると罠に嵌まる。Visual C++では
long doubleは移植性(単にコンパイルが通るという意味で)のために定義されているだけで、
double精度しかないので使えない。GNU C++ではlong doubleが本当のlong doubleなので使える。
https://ideone.com/3puKYQ

これをVisual C++やGNU Cで実行すると、1の位が2大きい不正確な値が表示されてしまう。
https://ideone.com/Md5qZz
564デフォルトの名無しさん
垢版 |
2020/01/05(日) 23:41:09.00ID:2Fq0AHrI
GNU C++にも罠があって、https://ideone.com/3puKYQ はideoneでは結果が正しく
表示されているが、Windows版でコンパイルすると「-0桁」になってしまう。
printfの%Lf書式指定子が何故か正常に機能しないようなので、long longに変換して
%lld書式指定子を使う必要がある。
2020/01/05(日) 23:58:45.24ID:Z3Lsb/Mg
>>562は擬似4倍精度の四則演算やルートがコンパクトにまとまっており参考になるかと思います

logは手抜きですが
2020/01/06(月) 00:24:13.90ID:MKFPBGLf
x87の80bit形式久々に聞いた
intelの失敗仕様

本当のlong doubleって言ったら128bitの事だと思う
567デフォルトの名無しさん
垢版 |
2020/01/07(火) 12:16:08.47ID:lAASQTDH
本当の?
568デフォルトの名無しさん
垢版 |
2020/01/07(火) 13:02:38.21ID:PuPIfAOU
大きさと精度が一致しないということでは。
例えば、16ビット整数の加算において255+1で桁あふれが発生するのは、勘弁してほしい。
16ビット整数であれば精度も16ビットあってほしい。
2020/01/07(火) 13:13:00.08ID:4oL1Xwrc
intelの拡張小数は箱も中身も80bitだぞ
隠れた1bitも隠さないから中身は79bitとも言えるかもしれないけど
570デフォルトの名無しさん
垢版 |
2020/01/07(火) 13:43:12.96ID:PuPIfAOU
GCCのlong doubleは128ビットあるから。
2020/01/07(火) 22:24:41.07ID:Y9qs9jpB
ひさびさにx87命令を使ってみた
masm形式なのでideoneでは動作しませんが
https://ideone.com/CdzenK
2020/01/07(火) 22:38:44.27ID:Y9qs9jpB
↑の出力結果

4893806799921043 (4893806799921042 + 0.855469)

丸める前の正確な値は
4893806799921042.8564973677594677....
なので小数第二位まで合っています
80bitでもギリギリって感じ

2進数だと
上位62bitまで正確、下位2bitが計算誤差
ということになります
2020/01/07(火) 23:09:32.62ID:Y9qs9jpB
https://pc.watch.impress.co.jp/docs/article/toku0101/plan8.htm
2020/01/08(水) 17:55:41.24ID:E2HYW9Z+
お題
フィボナッチ数列のn番目をF(n)とした時
F(F(F(80)))の下位4桁を求めよ

フィボナッチ数列は以下で定義される数列である
F(1)=1
F(2)=1
F(n)=F(n-2)+F(n-1)
2020/01/08(水) 18:47:53.52ID:bVQLyL/p
フィフィフィボナッチ数列はお腹いっぱい
2020/01/08(水) 19:48:23.85ID:npJkZznC
>>571
x87 すごくいいです!私も 9801FA に i487SX をようやく搭載して準備完了です!
577デフォルトの名無しさん
垢版 |
2020/01/08(水) 20:00:11.84ID:naqRCa+g
お前は昭和何年からタイムスリップしてきたんだ
578デフォルトの名無しさん
垢版 |
2020/01/08(水) 20:33:31.36ID:DEoUiUkq
>>574
R
https://ideone.com/lpnhLq
2020/01/08(水) 21:16:17.44ID:E2HYW9Z+
正解

C++
https://ideone.com/iSMABZ
2020/01/08(水) 23:38:33.13ID:3Vg9kR1l
>>544 Perl5

use feature qw{say signatures};
sub reverse($s) {
 map {substr $s, -$_, 1} 1..length $s;
}
say &reverse('reverse');
2020/01/10(金) 10:41:25.62ID:lJ/gG0sx
お題:自分用expm1()的なもの。底はe以外でも良い。不正な引数でのエラー処理は
考慮しなくても良い。
2020/01/10(金) 13:20:18.79ID:KXQq2+DU
目的が高精度なのかSIMDなのか単に出題者が勉強したいだけなのか
もしかしてx87命令を使わせたい?
583デフォルトの名無しさん
垢版 |
2020/01/10(金) 20:53:23.97ID:1usNcOvE
>>581
expm1()って何?
2020/01/10(金) 21:01:53.36ID:jjOShzcG
エキスペディション・マグニチュードワンのことやろな
585581
垢版 |
2020/01/10(金) 22:06:13.03ID:lJ/gG0sx
>>582
SIMDやx87命令は考えてませんでした。
四則演算とexpm1()以外のライブラリ関数は使用可って事で。
やっぱし無難にテイラー展開で求めるのが楽?

>>583
例えば
ttps://linuxjm.osdn.jp/html/LDP_man-pages/man3/expm1.3.html
2020/01/10(金) 22:10:45.27ID:lApN4p1F
四則演算も使ったらダメなのかい
587581
垢版 |
2020/01/10(金) 22:42:31.47ID:lJ/gG0sx
>>586
訂正:
四則演算と、「expm1()以外の」ライブラリ関数は使用可
2020/01/11(土) 06:32:12.11ID:wIXPHQcF
出題者が方法を知りたいだけだよね?
なら質問スレ/宿題スレの方が適切
589デフォルトの名無しさん
垢版 |
2020/01/11(土) 09:22:26.15ID:R1f0qLP3
お題
素数番目の素数をスーパー素数と言う。
スーパー素数の最初の100個を求める。
2020/01/11(土) 10:27:02.77ID:LQrvWU7L
>>589 Ruby 2.7.0

require 'Prime'
p Prime.take(100).then{|p| Prime.take(p.last).select.with_index{p.include?(-~_2)}}

# => [3, 5, 7, [中略], 3761, 3911]
2020/01/11(土) 10:31:32.27ID:LQrvWU7L
typo

# => [3, 5, 11, 17, 31, [中略], 3733, 3761, 3911]
2020/01/11(土) 10:52:09.93ID:VG9fEjGe
お題
5の倍数の素数を5の倍数素数という
5の倍数素数を全て求めよ
2020/01/11(土) 11:10:43.29ID:V+Dyph4l
5の倍数の素数ってどういうことですか?
文字通りの意味なら5だけだと思うんですけど
2020/01/11(土) 13:10:43.10ID:JM9/51Sk
>>544 Perl4

use feature qw{say signatures};
sub rev($s) {
 $s ne '' and substr ($s, -1, 1, '') . rev($s)
}
say rev('string');

てす
2020/01/11(土) 13:14:26.71ID:JM9/51Sk
>>594 Perl5 だった…orz
しかし、このソースの「substr (」のrと(の間のスペース文字を省くと
スレへの書き込みで
HTTP/1.1 403 Forbidden
が起きて書き込めなかったのは謎…
2020/01/11(土) 14:01:21.01ID:M68szGrA
>>592
echo 5
597デフォルトの名無しさん
垢版 |
2020/01/11(土) 20:08:39.02ID:go77StkR
お題
20200111の階乗を素因数分解したとき、すべての因数の積は20200111の階乗だが、
すべての因数の和は何か。
598デフォルトの名無しさん
垢版 |
2020/01/11(土) 20:55:04.41ID:r5wulSj/
ナベアツ理論か。
2020/01/12(日) 00:39:46.42ID:PW2KE/yt
>>595
書き込めないコマンドは、一杯ある。
「ls −l」とか

5ch は、特定の命令によって、表示の見た目を変えることができるから、
単に、表示する文字列に変換するだけじゃなくて、

投稿されたテキストから、命令を抽出したりしているから、
バグりそうなテキストを排除しているのだろう
2020/01/12(日) 10:30:24.93ID:Cuf7XVQy
>>597
C++
https://ideone.com/30RQZF
2020/01/12(日) 16:28:53.41ID:Svv4a/Ag
お題: バイナリ―サーチを実装せよ(自分の記憶だけで書かなければならない)
602デフォルトの名無しさん
垢版 |
2020/01/12(日) 16:52:57.01ID:qRMFtMw7
>>601
Java
https://paiza.io/projects/y4RxMakkRM6x88qm5GGMvA
2020/01/12(日) 17:33:54.06ID:kqg5PnqA
>>601 Ruby

def bs(ary, &cond)
  return ary[0] && cond.call(ary[0]) ? ary[0] : ary[1] && cond.call(ary[1]) ? ary[1] : nil if ary.size < 3
  mid = ary.size / 2
  bs(ary[cond.call(ary[mid]) ? 0..mid : mid + 1..-1], &cond)
end

p bs([1,3,5,7,9]){|i| i > 0} # => 1
p bs([1,3,5,7,9]){|i| i > 3} # => 5
p bs([1,3,5,7,9]){|i| i > 9} # => nil
2020/01/12(日) 17:39:35.02ID:ZvwnN6DP
>>601
C++
https://mevius.5ch.net/test/read.cgi/tech/1434079972/33
std::set<int> の再実装にて、内部にバイナリーサーチを含んでいます
2020/01/12(日) 17:41:03.57ID:ZvwnN6DP
>>601
>(自分の記憶だけで書かなければならない)
これは重要かつ役に立つ訓練のしかたですね、この前は pthread の mutex と cond が理解できているかどうかを、この縛りのもとにコードを書いて試みました
2020/01/12(日) 18:20:53.87ID:Xff8C4Cf
>(自分の記憶だけで書かなければならない)

お題は全てそういうものだと思ってたが
みんなカンニングして回答してるの?
607デフォルトの名無しさん
垢版 |
2020/01/12(日) 19:59:45.88ID:qRMFtMw7
お題1
10ビットの乱数を10個作成して
2進数に変換して出力してください
10ビットに満たない数は0埋めしてください

例)
1101101110
1000100011
0100111001
1110000001
1001001100
0010001111
1111001000
1010110111
1100001001
0100110111

お題2
縦方向、または、横方向に1が連続しているところを調べて
最も1が連続しているところの1の数を出力してください
ビット数や乱数の数が増えてもちょっぱやで処理できるとなお良いです
608デフォルトの名無しさん
垢版 |
2020/01/12(日) 20:38:11.83ID:xWFTg64o
>>600
正解。あなたには簡単すぎただろうが。

Rで書いた解答例はPCでは2秒台で実行できたのに、ideoneでは制限時間5秒以内に
終わらなかったので、C++で書いた方を貼る。https://ideone.com/DFDdtr
>>600とほぼ同じだが、掛け算が減る分だけ速いな。
609デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:27:08.47ID:xWFTg64o
>>607
R
https://ideone.com/iTihQo
610デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:44:57.86ID:qRMFtMw7
>>609
ありがとうございます、そして申し訳ないです

11
11
こうなってたら4と出力してほしくて
連続じゃないですね、隣接といえばよかったかもしれません

縦方向、横方向に1が隣接してる領域のうち最大の領域の1の数を出力して欲しいのです
611デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:45:02.91ID:xWFTg64o
>>607
ビット数と乱数の数を別々に指定できるように訂正
https://ideone.com/cYMlMO
612デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:48:51.97ID:qRMFtMw7
すみません・・・平にご容赦いただきたく
613デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:48:57.49ID:xWFTg64o
>>610
隣接している領域は矩形でなければいけないのか、そうでなくても良いのか。例えば、

1110
0110
0111

は前者なら6個で、後者なら8個になる。
614デフォルトの名無しさん
垢版 |
2020/01/12(日) 21:52:58.77ID:qRMFtMw7
>>613
矩形じゃなくていいです8個パターンです!
2020/01/13(月) 04:22:53.20ID:5GjUS2iX
質問なら質問スレに
宿題なら宿題スレに

回答を用意してない出題は禁止
2020/01/13(月) 04:47:28.11ID:5GjUS2iX
昔ながらのPAINTアルゴリズム
検索すれば色々と出てくるよ
617デフォルトの名無しさん
垢版 |
2020/01/13(月) 05:51:52.90ID:9cAJpR6a
>>589 J
smoutput 10 10 $ p: <: p: i.100
実行結果
3 5 11 17 31 41 59 67 83 109
127 157 179 191 211 241 277 283 331 353
367 401 431 461 509 547 563 587 599 617
709 739 773 797 859 877 919 967 991 1031
1063 1087 1153 1171 1201 1217 1297 1409 1433 1447
1471 1499 1523 1597 1621 1669 1723 1741 1787 1823
1847 1913 2027 2063 2081 2099 2221 2269 2341 2351
2381 2417 2477 2549 2609 2647 2683 2719 2749 2803
2897 2909 3001 3019 3067 3109 3169 3229 3259 3299
3319 3407 3469 3517 3559 3593 3637 3733 3761 3911
2020/01/13(月) 09:11:38.57ID:a0NWv3WS
>>607はAOJにあった島の数の問題じゃないの
そうじゃなくてもぷよぷよは大抵コレでしょ
619デフォルトの名無しさん
垢版 |
2020/01/13(月) 12:20:35.97ID:AM9JqLhx
>>607
>>615だそうだが、既にほぼ書いてしまっていたから、完成させたのを載せる。
R
https://ideone.com/eECxW1
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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