プログラミングのお題スレです。
【出題と回答例】
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/
探検
プログラミングのお題スレ Part16
■ このスレッドは過去ログ倉庫に格納されています
2019/11/17(日) 09:00:22.10ID:xqEdXdr6
390383
2019/12/20(金) 14:24:42.29ID:A+TGdcd9 >>383
Ruby で、
ary = "MY FAVORITE SONGS".split.map( &:downcase ) # すべて小文字へ
puts ary.join( "_" ) #=> my_favorite_songs
puts ary.map( &:capitalize ).join #=> MyFavoriteSongs
puts ary.map.with_index { |word, idx|
if idx == 0
word # 最初だけ、そのまま
else
word.capitalize
end
}.join #=> myFavoriteSongs
Ruby で、
ary = "MY FAVORITE SONGS".split.map( &:downcase ) # すべて小文字へ
puts ary.join( "_" ) #=> my_favorite_songs
puts ary.map( &:capitalize ).join #=> MyFavoriteSongs
puts ary.map.with_index { |word, idx|
if idx == 0
word # 最初だけ、そのまま
else
word.capitalize
end
}.join #=> myFavoriteSongs
391デフォルトの名無しさん
2019/12/20(金) 17:55:37.64ID:KHh/7LOP392デフォルトの名無しさん
2019/12/20(金) 19:38:12.53ID:KibkA5Ab お題(>>346の改変版)
1から100万までの整数のうち、2か3か5か7か11か13か17か19の倍数の合計を
求める処理を3000回繰り返してから、結果を表示せよ。ただし、ideoneの
実行制限時間(5秒)以内に完了すること。
1から100万までの整数のうち、2か3か5か7か11か13か17か19の倍数の合計を
求める処理を3000回繰り返してから、結果を表示せよ。ただし、ideoneの
実行制限時間(5秒)以内に完了すること。
393デフォルトの名無しさん
2019/12/20(金) 20:40:12.54ID:l1czkVGZ394デフォルトの名無しさん
2019/12/20(金) 21:09:48.70ID:ZH5ZbPnE 今アップしようと思ったら
>>393とそっくりだった
>>393とそっくりだった
395デフォルトの名無しさん
2019/12/20(金) 21:22:01.32ID:ZH5ZbPnE 素数の数をカウントする代わりに
マイナスを付けて素数を掛け算してるのが違うくらい
マイナスを付けて素数を掛け算してるのが違うくらい
396デフォルトの名無しさん
2019/12/20(金) 21:28:45.69ID:ZH5ZbPnE お題
3000回じゃなくてもっとマシな出し方なかったのかね?
最適化で1回の結果を使い回されて何回やっても時間同じになっちゃってたよ
3000回数分合計して、最後に3000で割ってたんだけど
最適化が頭良すぎた
3000回じゃなくてもっとマシな出し方なかったのかね?
最適化で1回の結果を使い回されて何回やっても時間同じになっちゃってたよ
3000回数分合計して、最後に3000で割ってたんだけど
最適化が頭良すぎた
397デフォルトの名無しさん
2019/12/20(金) 21:49:16.14ID:qHTdS2+z やったー僕が考えた効率良いプログラムだと5秒以内で3000回も計算できたぞ!
そうだこれをお題にしてやろう!
そうだこれをお題にしてやろう!
398デフォルトの名無しさん
2019/12/20(金) 22:16:29.10ID:ZH5ZbPnE C/C++だと
ほんのちょっと数学の知識を使えば
コード上の工夫をまったくしなくても0.01秒
コード上の工夫でまだまだ速くなる
スクリプト系言語でも100倍はかからない気がする
なぜ5秒?
なぜ1000000?
なぜ3000回?
謎だ
ほんのちょっと数学の知識を使えば
コード上の工夫をまったくしなくても0.01秒
コード上の工夫でまだまだ速くなる
スクリプト系言語でも100倍はかからない気がする
なぜ5秒?
なぜ1000000?
なぜ3000回?
謎だ
399デフォルトの名無しさん
2019/12/20(金) 22:30:48.36ID:fz/tpFJr 些末な最適化など
数学的知識に基づくオーダーの低減に比べたらむなしい
数学的知識に基づくオーダーの低減に比べたらむなしい
400デフォルトの名無しさん
2019/12/20(金) 22:30:49.77ID:ZH5ZbPnE 数学的知識を使わないで
単純に足していくアルゴリズムを
コードの工夫で5秒切るって問題?
単純に足していくアルゴリズムを
コードの工夫で5秒切るって問題?
401デフォルトの名無しさん
2019/12/20(金) 22:38:11.88ID:PCNOOvYP402デフォルトの名無しさん
2019/12/20(金) 22:38:43.75ID:ZH5ZbPnE403デフォルトの名無しさん
2019/12/20(金) 22:39:52.16ID:ZH5ZbPnE ダブった
404デフォルトの名無しさん
2019/12/20(金) 22:50:38.46ID:qHTdS2+z 数学も計算機学もどっちも大事
405デフォルトの名無しさん
2019/12/20(金) 23:00:03.89ID:KibkA5Ab >>393
正解。ちなみにRで短く書いたプログラム: https://ideone.com/T9oDqa
結局、奇数個の積の倍数の個数の和から偶数個のそれを引くというやり方は同じだな。
>>397
そう。上のプログラムが5秒以内に余裕を持って終わるように繰り返し回数を設定したw
効率というより短いのが好きで書いた。
>>398
>>393をRにそのまま移植すると5秒以内に終わらず、1000回に減らしても
(https://ideone.com/K94wA8)4.56秒かかって、上のプログラムの2.43秒より
遅いよ。Rでは自前のループを書くよりも、関数や演算子を使って短く書いた方が
速くなることが多い。
正解。ちなみにRで短く書いたプログラム: https://ideone.com/T9oDqa
結局、奇数個の積の倍数の個数の和から偶数個のそれを引くというやり方は同じだな。
>>397
そう。上のプログラムが5秒以内に余裕を持って終わるように繰り返し回数を設定したw
効率というより短いのが好きで書いた。
>>398
>>393をRにそのまま移植すると5秒以内に終わらず、1000回に減らしても
(https://ideone.com/K94wA8)4.56秒かかって、上のプログラムの2.43秒より
遅いよ。Rでは自前のループを書くよりも、関数や演算子を使って短く書いた方が
速くなることが多い。
406デフォルトの名無しさん
2019/12/20(金) 23:06:22.58ID:ZH5ZbPnE407デフォルトの名無しさん
2019/12/20(金) 23:10:59.45ID:KibkA5Ab 1000までではなく与えられた自然数までということ以外は>>346と同じ問題が
オライリーの「Modern C++チャレンジ」に載っているが、示されている解答は
if (i % 3 == 0 || i % 5 == 0) sum += i; という単純に足していく方式だな。
本の副題は「C++17プログラミング力を鍛える100問」だが、何が鍛えられられるのか
よく分からない。
オライリーの「Modern C++チャレンジ」に載っているが、示されている解答は
if (i % 3 == 0 || i % 5 == 0) sum += i; という単純に足していく方式だな。
本の副題は「C++17プログラミング力を鍛える100問」だが、何が鍛えられられるのか
よく分からない。
408デフォルトの名無しさん
2019/12/20(金) 23:11:25.23ID:ZH5ZbPnE C/C++で1秒かかる問題は
C/C++限定になっちゃう感じだね
C/C++限定になっちゃう感じだね
409デフォルトの名無しさん
2019/12/20(金) 23:14:31.11ID:ZH5ZbPnE410デフォルトの名無しさん
2019/12/21(土) 05:43:11.08ID:vVh8rrgH 連投アスペ君うざいよ
学歴詐称までしてたみたいだけど
学歴詐称までしてたみたいだけど
411デフォルトの名無しさん
2019/12/21(土) 17:30:00.35ID:BSqycIZI お題
ビットコインの採掘問題です
000 〜 300 までの3桁の整数の文字列を、MD5 で暗号化した時に、
冒頭部分から、5 が最も多く続く、整数は何?
答え、239 : 555d6〜
ビットコインの採掘問題です
000 〜 300 までの3桁の整数の文字列を、MD5 で暗号化した時に、
冒頭部分から、5 が最も多く続く、整数は何?
答え、239 : 555d6〜
412デフォルトの名無しさん
2019/12/21(土) 21:23:49.40ID:WOeaPgYE413デフォルトの名無しさん
2019/12/21(土) 22:58:23.57ID:hbXQRpYW >>411 PowerShell
$MD5 = new-object "System.Security.Cryptography.MD5CryptoServiceProvider"
$a = 0..300
$hash = $a |% {-join ($MD5.ComputeHash([char[]]("{0:000}" -f $_)) |% {"{0:x2}" -f $_})}
$n = $hash |% {[RegEx]::Match($_, "^5+").length}
$max = ($n | measure -max).Maximum
$a |? {$n[$_] -eq $max} |% {"$_ : " + $hash[$_]}
-- 実行結果 --
239 : 555d6702c950ecb729a966504af0a635
$MD5 = new-object "System.Security.Cryptography.MD5CryptoServiceProvider"
$a = 0..300
$hash = $a |% {-join ($MD5.ComputeHash([char[]]("{0:000}" -f $_)) |% {"{0:x2}" -f $_})}
$n = $hash |% {[RegEx]::Match($_, "^5+").length}
$max = ($n | measure -max).Maximum
$a |? {$n[$_] -eq $max} |% {"$_ : " + $hash[$_]}
-- 実行結果 --
239 : 555d6702c950ecb729a966504af0a635
414デフォルトの名無しさん
2019/12/22(日) 03:50:07.73ID:lBW/6Z3k415デフォルトの名無しさん
2019/12/22(日) 14:00:57.91ID:sfBU8dhx >>411 Ruby
require 'digest'
p ("000".."300").map{|i|[Digest::MD5.hexdigest(i).index(/[^5]/),i]}.max[1]
require 'digest'
p ("000".."300").map{|i|[Digest::MD5.hexdigest(i).index(/[^5]/),i]}.max[1]
416411
2019/12/22(日) 19:20:37.12ID:u+b66RrE >>411 Ruby
require 'digest'
# :count は、先頭から続く、5の数
Result = Struct.new( :num, :md5, :count )
res = ( "000".."300" ).each_with_object( Result.new( nil, nil, -1 ) ) do |num, res|
md5 = Digest::MD5.hexdigest( num ) # ハッシュ化
md5.each_char.with_index do |char, idx| # 1文字ずつ処理する
if char != "5"
if idx > res.count # 大きい時だけ更新する
res.num = num
res.md5 = md5
res.count = idx
end
break
end
end
end
puts "#{ res.num } : #{ res.md5 }"
#=> 239 : 555d6702c950ecb729a966504af0a635
require 'digest'
# :count は、先頭から続く、5の数
Result = Struct.new( :num, :md5, :count )
res = ( "000".."300" ).each_with_object( Result.new( nil, nil, -1 ) ) do |num, res|
md5 = Digest::MD5.hexdigest( num ) # ハッシュ化
md5.each_char.with_index do |char, idx| # 1文字ずつ処理する
if char != "5"
if idx > res.count # 大きい時だけ更新する
res.num = num
res.md5 = md5
res.count = idx
end
break
end
end
end
puts "#{ res.num } : #{ res.md5 }"
#=> 239 : 555d6702c950ecb729a966504af0a635
417デフォルトの名無しさん
2019/12/23(月) 15:49:57.54ID:8tSOZ4fL418デフォルトの名無しさん
2019/12/24(火) 02:05:20.47ID:3/kDRwCG >>377
>>389
・n=13 のとき
条件(2,2)
{12345678} = A, {9,10} = B, 11=C, 12=D, 13=E と略記する。
ABCDE, -, -, -
手順1
CDE, -, -, AB
手順2
CD, E, -, AB
ACD, E, -, B
手順3
ACD, -, -, BE
CD, -, -, ABE
手順2
C, D, -, ABE
AC, D, -, BE
手順3
AC, -, -, BDE
C, -, -, ABDE
-, C, -, ABDE
A, C, -, BDE
手順3
A, -, -, BCDE
-, -, -, ABCDE
にて可能。
>>389
・n=13 のとき
条件(2,2)
{12345678} = A, {9,10} = B, 11=C, 12=D, 13=E と略記する。
ABCDE, -, -, -
手順1
CDE, -, -, AB
手順2
CD, E, -, AB
ACD, E, -, B
手順3
ACD, -, -, BE
CD, -, -, ABE
手順2
C, D, -, ABE
AC, D, -, BE
手順3
AC, -, -, BDE
C, -, -, ABDE
-, C, -, ABDE
A, C, -, BDE
手順3
A, -, -, BCDE
-, -, -, ABCDE
にて可能。
419デフォルトの名無しさん
2019/12/24(火) 02:16:33.78ID:3/kDRwCG #A = f(2,1) = 8, #B = 2
* 手順1
ABX, -, -, -
BX, -, -, A
OX, 9, -, A
AOX, 9, -, -
AOX, -, -, 9
OX, -, -, A9
X, O, -, A9
AX, O, -, 9
AX, O, 9, -
AX, -, 9, O
AX, -, -, B
X, -, -, AB
*手順2
CDY, -, -, *
DY, C, -, *
Y, C, D, *
Y, -, CD, *
-, Y, CD, *
-, CY, D, *
D, CY, -, *
CD, Y, -, *
* 手順3
*, Y, -, BZ
*, 9Y, -, OZ
*, 9Y, O, Z
*, Y, B, Z
*, -, B, YZ
*, 9, O, YZ
*, 9, -, OYZ
*, -, -, BYZ
* 手順1
ABX, -, -, -
BX, -, -, A
OX, 9, -, A
AOX, 9, -, -
AOX, -, -, 9
OX, -, -, A9
X, O, -, A9
AX, O, -, 9
AX, O, 9, -
AX, -, 9, O
AX, -, -, B
X, -, -, AB
*手順2
CDY, -, -, *
DY, C, -, *
Y, C, D, *
Y, -, CD, *
-, Y, CD, *
-, CY, D, *
D, CY, -, *
CD, Y, -, *
* 手順3
*, Y, -, BZ
*, 9Y, -, OZ
*, 9Y, O, Z
*, Y, B, Z
*, -, B, YZ
*, 9, O, YZ
*, 9, -, OYZ
*, -, -, BYZ
420デフォルトの名無しさん
2019/12/24(火) 06:16:15.22ID:cUFUrp77 おめでとう
次は(2,2,2)
次は(2,2,2)
421デフォルトの名無しさん
2019/12/24(火) 06:33:05.83ID:cUFUrp77 n=13を考えるとき
真ん中2本が空いてる時にはn=12までは動かせる
っていう仮定を使うと
考え方が楽になりますよ
これが出来たら
あとは(2,1)のn=8から1枚ずつ増やしていく帰納法が使えます
真ん中2本が空いてる時にはn=12までは動かせる
っていう仮定を使うと
考え方が楽になりますよ
これが出来たら
あとは(2,1)のn=8から1枚ずつ増やしていく帰納法が使えます
422デフォルトの名無しさん
2019/12/24(火) 07:26:03.90ID:cUFUrp77 a≧b≧c≧d≧e≧1
f(a,b,c,d,e)=f(a-1,b,c,d,e)+2n+1
n = max { a, f(b-1,c,d,e) }
+ max { b, f(c-1,d,e) }
+ max { c, f(d-1,e) }
+ e
f(a,b,c,d,e)=f(a-1,b,c,d,e)+2n+1
n = max { a, f(b-1,c,d,e) }
+ max { b, f(c-1,d,e) }
+ max { c, f(d-1,e) }
+ e
423デフォルトの名無しさん
2019/12/24(火) 07:43:48.05ID:cUFUrp77 (a,b,c,d,e) の動かしかた
A : 小さい f(a-1,b,c,d,e) 枚
X : 最大の1枚
(n) : A,X以外の任意のn枚
n : >>422で定義
A(2n)X / - / -
(n)X / - / A(n)
(n) / X / A(n)
A(n) / X / (n)
A(n) / - / (n)X
- / - / A(2n)X
A : 小さい f(a-1,b,c,d,e) 枚
X : 最大の1枚
(n) : A,X以外の任意のn枚
n : >>422で定義
A(2n)X / - / -
(n)X / - / A(n)
(n) / X / A(n)
A(n) / X / (n)
A(n) / - / (n)X
- / - / A(2n)X
424デフォルトの名無しさん
2019/12/24(火) 07:48:24.24ID:cUFUrp77 ミスった
n = min { a, f(b-1,c,d,e) }
+ min { b, f(c-1,d,e) }
+ min { c, f(d-1,e) }
+ e
n = min { a, f(b-1,c,d,e) }
+ min { b, f(c-1,d,e) }
+ min { c, f(d-1,e) }
+ e
425デフォルトの名無しさん
2019/12/24(火) 19:47:21.14ID:cUFUrp77 動かせる枚数だけですがコードにしました
https://ideone.com/X01d46
https://ideone.com/X01d46
426デフォルトの名無しさん
2019/12/25(水) 16:51:57.78ID:eBvDhPt7 [お題] 2020と素数
"2020"の省略形は"20"
異なる素数を20個使って、総合計で2020を作る。
1) 何種類できるか(組合せで)。 --> ?
以下 数列は昇順でソート済みでの比較
2) 数列の比較で(辞書順)最小な数列を出力。
--> [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,73,1381]
3) 数列の比較で(辞書順)最大な数列を出力。
--> ?
例) 総合計 26 で要素数 3の場合
種類は[2,5,19],[2,7,17],[2,11,13]の3種類、
最小は[2,5,19], 最大は[2,11,13]
"2020"の省略形は"20"
異なる素数を20個使って、総合計で2020を作る。
1) 何種類できるか(組合せで)。 --> ?
以下 数列は昇順でソート済みでの比較
2) 数列の比較で(辞書順)最小な数列を出力。
--> [3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,73,1381]
3) 数列の比較で(辞書順)最大な数列を出力。
--> ?
例) 総合計 26 で要素数 3の場合
種類は[2,5,19],[2,7,17],[2,11,13]の3種類、
最小は[2,5,19], 最大は[2,11,13]
427デフォルトの名無しさん
2019/12/25(水) 19:05:13.68ID:LrSoTBV6 2) 3) は瞬時だけど
1) は難しい
出題者は出来たんだよね?
1) は難しい
出題者は出来たんだよね?
428426
2019/12/25(水) 19:20:25.05ID:eBvDhPt7429デフォルトの名無しさん
2019/12/25(水) 22:46:56.00ID:LrSoTBV6430デフォルトの名無しさん
2019/12/25(水) 22:48:16.07ID:LrSoTBV6 合ってる?
431デフォルトの名無しさん
2019/12/25(水) 22:57:35.89ID:LrSoTBV6 辞書順最後は
{ 53, 59, 61, 67, 71, 73, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151 }
{ 53, 59, 61, 67, 71, 73, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151 }
432426
2019/12/25(水) 23:33:28.28ID:eBvDhPt7 >>429, 431 当方とおなじです。
>>426
https://ideone.com/SuOGod
数が程々なので、まとめて手抜きの"文字列DP"をやってます。
(pypyで1秒以内で回っているのだから、真面目にやる必要ないでしょう)
>>426
https://ideone.com/SuOGod
数が程々なので、まとめて手抜きの"文字列DP"をやってます。
(pypyで1秒以内で回っているのだから、真面目にやる必要ないでしょう)
433デフォルトの名無しさん
2019/12/26(木) 01:18:40.30ID:rIhsLdYp434デフォルトの名無しさん
2019/12/26(木) 01:28:39.37ID:rIhsLdYp C++だから速いはず
だけど大差無いって事は
アルゴリズムで負けてる?
だけど大差無いって事は
アルゴリズムで負けてる?
435デフォルトの名無しさん
2019/12/26(木) 04:04:05.93ID:Wc5llTmi436デフォルトの名無しさん
2019/12/26(木) 07:13:27.63ID:rIhsLdYp437デフォルトの名無しさん
2019/12/26(木) 07:22:33.88ID:rIhsLdYp438デフォルトの名無しさん
2019/12/26(木) 07:28:47.21ID:rIhsLdYp439蟻人間 ◆T6xkBnTXz7B0
2019/12/26(木) 15:19:10.12ID:Npbug+/w お題: 半角英数からなるユーザーIDとパスワードで認証できるアカウントのシステムを以下の要件で作る。
1.新規登録を選んでユーザーIDとパスワードとメールアドレスを入力するとアカウント登録ができる。
2. 複数アカウント対応。ユーザーIDの重複はダメ。
3. アカウント一覧を選ぶとアカウントの一覧とログイン状態が見える。
4. ログインを選んでユーザーIDとパスワードの入力が一致すればログインできる。
5. ログアウトを選べばログアウトできる。
6. パスワードを忘れたとき、アカウントの回復を選んでメルアド入力すると、メールが来てパスワードがリセットされる。
1.新規登録を選んでユーザーIDとパスワードとメールアドレスを入力するとアカウント登録ができる。
2. 複数アカウント対応。ユーザーIDの重複はダメ。
3. アカウント一覧を選ぶとアカウントの一覧とログイン状態が見える。
4. ログインを選んでユーザーIDとパスワードの入力が一致すればログインできる。
5. ログアウトを選べばログアウトできる。
6. パスワードを忘れたとき、アカウントの回復を選んでメルアド入力すると、メールが来てパスワードがリセットされる。
440デフォルトの名無しさん
2019/12/26(木) 19:06:46.63ID:ArA1I+l7441デフォルトの名無しさん
2019/12/26(木) 19:20:20.20ID:nVG7mTn1442デフォルトの名無しさん
2019/12/26(木) 21:44:10.91ID:nVG7mTn1 https://ideone.com/XFJToQ
vectorを使いまわしするようにしたら速くなった
vectorを使いまわしするようにしたら速くなった
443デフォルトの名無しさん
2019/12/27(金) 00:16:14.43ID:N7T+QvJX https://ideone.com/tm5nPe
まだ省くことができた
まだ省くことができた
444蟻人間 ◆T6xkBnTXz7B0
2019/12/27(金) 18:58:01.81ID:0l4cUgpw Web系もプログラミングの一種なんだけど、日本のIT教育では軽視されてるみたいなんだ。
445デフォルトの名無しさん
2019/12/27(金) 20:56:28.17ID:JVKHwIo7 <('o')>フーン
>>444
web 系をはじめるには、どういう環境で学べばいいですか?
web 系をはじめるには、どういう環境で学べばいいですか?
447デフォルトの名無しさん
2019/12/27(金) 21:12:37.24ID:IA42SgXa448デフォルトの名無しさん
2019/12/27(金) 21:14:11.36ID:IA42SgXa449デフォルトの名無しさん
2019/12/27(金) 22:14:31.51ID:novkoLBo >>426 類似問題
素数を20個使って、総合計で2020を作る。
(同じ素数を複数使ってよい)
何種類できるか(組合せで)。 -->?
(同じ数字は区別しない -> ソートして数列が異なるもので1種類)
ちなみに、辞書順最小が[ 2(* 18), 5, 1979] 、最大が[ 101(* 20)]になる。
※ 2020で20個なら、まだint64_tでおさまる
素数を20個使って、総合計で2020を作る。
(同じ素数を複数使ってよい)
何種類できるか(組合せで)。 -->?
(同じ数字は区別しない -> ソートして数列が異なるもので1種類)
ちなみに、辞書順最小が[ 2(* 18), 5, 1979] 、最大が[ 101(* 20)]になる。
※ 2020で20個なら、まだint64_tでおさまる
450デフォルトの名無しさん
2019/12/27(金) 22:54:15.08ID:IA42SgXa ↑
>>429の+1を消すだけ
>>429の+1を消すだけ
451デフォルトの名無しさん
2019/12/27(金) 22:58:27.12ID:Wx5tgQ31 お題: 「Happy New Year!!」と出力するプログラムを2020年元日に投稿せよ
452デフォルトの名無しさん
2019/12/27(金) 23:32:30.61ID:novkoLBo >>450
やっぱり(既にできていて)、その程度なのだろう。
自分の方も、ユニーク時は更新が伝播しないように
逆順で処理していたのを、伝播するよう正順に戻すだけ。
>>449
https://ideone.com/nQJWLb
やっぱり(既にできていて)、その程度なのだろう。
自分の方も、ユニーク時は更新が伝播しないように
逆順で処理していたのを、伝播するよう正順に戻すだけ。
>>449
https://ideone.com/nQJWLb
453デフォルトの名無しさん
2019/12/27(金) 23:43:22.25ID:IA42SgXa454デフォルトの名無しさん
2019/12/28(土) 01:41:03.72ID:HU/ZZyYG455デフォルトの名無しさん
2019/12/28(土) 03:25:23.74ID:HeaGj5a1 >>423
m≧n≧1 のとき
ピン2に大円盤が1枚以下のときは、ピン0⇔ピン1間、ピン1⇔ピン3間で
n枚組の円盤を移動できますね。 (3ピン手順)
A: 1,2,・・・・,x のx個組 ただし x=f(m-1,n)
B: x+1,...,x+n のn個組
C: x+n+1,・・・・,x+2n+1 のn個組
D: x+2n+1
とする。
m≧n≧1 のとき
ピン2に大円盤が1枚以下のときは、ピン0⇔ピン1間、ピン1⇔ピン3間で
n枚組の円盤を移動できますね。 (3ピン手順)
A: 1,2,・・・・,x のx個組 ただし x=f(m-1,n)
B: x+1,...,x+n のn個組
C: x+n+1,・・・・,x+2n+1 のn個組
D: x+2n+1
とする。
456デフォルトの名無しさん
2019/12/28(土) 03:28:09.64ID:HeaGj5a1 ABCD, -, -, -
BCD, -, -, A
手順2
BC(2..n)D, -, C(1), A
ABC(2..n)D, -, C(1), -
ABC(2..n)D, -, -, C(1)
BC(2..n)D, -, -, AC(1)
手順2
BC(3..n)D, -, C(2), AC(1)
ABC(3..n)D, -, C(2), C(1)
手順3
ABC(3..n)D, -, -, C(1..2)
・・・・
同様にしてC(k)とDを移動する。(k=1..n)
・・・・
ABD, -, -, C
BD, -, -, AC
手順2
B, -, D, AC
AB, -, D, C
手順3
AB, -, -, CD
B, -, -, ACD
B(2..n), -, B(1), ACD
AB(2..n), -, B(1), CD
AB(2..n), -, -, B(1)CD
B(2..n), -, -, AB(1)CD
B(3..n), -, B(2), AB(1)CD
AB(3..n), -, B(2), B(1)CD
手順3
AB(3..n), -, -, B(1..2)CD
BCD, -, -, A
手順2
BC(2..n)D, -, C(1), A
ABC(2..n)D, -, C(1), -
ABC(2..n)D, -, -, C(1)
BC(2..n)D, -, -, AC(1)
手順2
BC(3..n)D, -, C(2), AC(1)
ABC(3..n)D, -, C(2), C(1)
手順3
ABC(3..n)D, -, -, C(1..2)
・・・・
同様にしてC(k)とDを移動する。(k=1..n)
・・・・
ABD, -, -, C
BD, -, -, AC
手順2
B, -, D, AC
AB, -, D, C
手順3
AB, -, -, CD
B, -, -, ACD
B(2..n), -, B(1), ACD
AB(2..n), -, B(1), CD
AB(2..n), -, -, B(1)CD
B(2..n), -, -, AB(1)CD
B(3..n), -, B(2), AB(1)CD
AB(3..n), -, B(2), B(1)CD
手順3
AB(3..n), -, -, B(1..2)CD
457デフォルトの名無しさん
2019/12/28(土) 03:34:05.21ID:HeaGj5a1 B(3..n), -, -, AB(1..2)CD
・・・・・
同様にしてB(k) を移動する。(k=1..n)
・・・・・・
B(n), -, -, AB(1..n-1)CD
-, -, B(n), AB(1..n-1)CD
A, -, B(n), B(1..n-1)CD
手順3’
A, -, -, BCD
-, -, -, ABCD
∴ f(m,n) ≧ f(m-1,n) + 2n + 1,
・手順2
BC(k..n)D, -, -, *
C(k..n)D, B, -, *
C(k+1..n)D, B, C(k), *
BC(k+1..n)D, -, C(k), *
・手順3
*, -, C(k), C(1..k-1)
*, C(1..k-1), C(k), -
*, C(1..k-1), -, C(k)
*, -, -, C(1..k)
・手順3’
*, -, B(k), B(1..k-1)CD
*, B(1..k-1), B(k), CD
*, B(1..k-1), -, B(k)CD
*, -, -, B(1..k)CD
・・・・・
同様にしてB(k) を移動する。(k=1..n)
・・・・・・
B(n), -, -, AB(1..n-1)CD
-, -, B(n), AB(1..n-1)CD
A, -, B(n), B(1..n-1)CD
手順3’
A, -, -, BCD
-, -, -, ABCD
∴ f(m,n) ≧ f(m-1,n) + 2n + 1,
・手順2
BC(k..n)D, -, -, *
C(k..n)D, B, -, *
C(k+1..n)D, B, C(k), *
BC(k+1..n)D, -, C(k), *
・手順3
*, -, C(k), C(1..k-1)
*, C(1..k-1), C(k), -
*, C(1..k-1), -, C(k)
*, -, -, C(1..k)
・手順3’
*, -, B(k), B(1..k-1)CD
*, B(1..k-1), B(k), CD
*, B(1..k-1), -, B(k)CD
*, -, -, B(1..k)CD
458デフォルトの名無しさん
2019/12/28(土) 12:49:55.64ID:eBmyBfXD いつまでハノイのメモ帳続けるんだよw
459デフォルトの名無しさん
2019/12/28(土) 16:57:29.50ID:hZH7LPev >>453
本気でやるには、"もらう"へ作り変える必要もあり、辛い
4つ程度なら、4倍回して出しちゃうだろう。
(四重ループで汚すぎるのでソースは非公開)
4と6の結果のみ載せておこう、あっているかも微妙。
合計: 2020 使用個数: 20 複数制限: 4-->
15100329420197868
[2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 11, 11, 17, 1913]
[89, 89, 89, 97, 97, 97, 101, 101, 101, 101, 103, 103, 103, 103, 107, 107, 107, 107, 109, 109]
********************************************* 0.43922sec ********************
合計: 2020 使用個数: 20 複数制限: 6-->
16509239212753751
[2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 1951]
[97, 97, 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 107, 107]
********************************************* 0.30568sec ********************
本気でやるには、"もらう"へ作り変える必要もあり、辛い
4つ程度なら、4倍回して出しちゃうだろう。
(四重ループで汚すぎるのでソースは非公開)
4と6の結果のみ載せておこう、あっているかも微妙。
合計: 2020 使用個数: 20 複数制限: 4-->
15100329420197868
[2, 2, 2, 2, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 11, 11, 17, 1913]
[89, 89, 89, 97, 97, 97, 101, 101, 101, 101, 103, 103, 103, 103, 107, 107, 107, 107, 109, 109]
********************************************* 0.43922sec ********************
合計: 2020 使用個数: 20 複数制限: 6-->
16509239212753751
[2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 7, 7, 1951]
[97, 97, 97, 97, 97, 97, 101, 101, 101, 101, 101, 101, 103, 103, 103, 103, 103, 103, 107, 107]
********************************************* 0.30568sec ********************
460デフォルトの名無しさん
2019/12/28(土) 19:46:33.82ID:mH66EenF >>426の1)はRで短く書ける(先頭・末尾行は正味の実行時間計測用)。
https://ideone.com/7eV3Kh
Rでは整数は32ビットまでなので、浮動小数点型(double型)で計算しているが、
double型の有効桁数は15桁なので、小数部を非表示にすれば、答である13桁の
整数は正しく表示される。
64ビット整数を扱うbit64というパッケージも一応あるが、それを使うと
正味の実行時間が4.3倍もかかってしまう。
https://ideone.com/hzr0rq
https://ideone.com/7eV3Kh
Rでは整数は32ビットまでなので、浮動小数点型(double型)で計算しているが、
double型の有効桁数は15桁なので、小数部を非表示にすれば、答である13桁の
整数は正しく表示される。
64ビット整数を扱うbit64というパッケージも一応あるが、それを使うと
正味の実行時間が4.3倍もかかってしまう。
https://ideone.com/hzr0rq
461デフォルトの名無しさん
2019/12/28(土) 21:25:10.79ID:4BOt7DVD462デフォルトの名無しさん
2019/12/28(土) 22:48:40.84ID:AtehPr/g お題
最小値のあるインデックスから離れるほど数字が大きくなる数列があります
増加量はランダムです
その数列の中から効率よく最小値を探してください
入力: 115, 109, 107, 101, 92, 85, 76, 66, 65, 62, 53, 49, 40, 38, 35, 25, 23, 17, 9, 2, 0, 5, 8, 10, 11, 20, 30, 37, 42, 47
出力: 0
入力: 110, 104, 96, 93, 84, 83, 87, 93, 98, 103, 113, 120, 121, 128, 133, 134, 142, 152, 159, 169, 171, 174, 183, 186, 196, 203, 210, 212, 221, 224
出力: 83
入力: 138, 135, 127, 124, 122, 112, 103, 98, 92, 87, 77, 73, 71, 63, 59, 51, 41, 36, 45, 54, 63, 71, 81, 88, 90, 98, 105, 112, 114, 119
出力: 36
最小値のあるインデックスから離れるほど数字が大きくなる数列があります
増加量はランダムです
その数列の中から効率よく最小値を探してください
入力: 115, 109, 107, 101, 92, 85, 76, 66, 65, 62, 53, 49, 40, 38, 35, 25, 23, 17, 9, 2, 0, 5, 8, 10, 11, 20, 30, 37, 42, 47
出力: 0
入力: 110, 104, 96, 93, 84, 83, 87, 93, 98, 103, 113, 120, 121, 128, 133, 134, 142, 152, 159, 169, 171, 174, 183, 186, 196, 203, 210, 212, 221, 224
出力: 83
入力: 138, 135, 127, 124, 122, 112, 103, 98, 92, 87, 77, 73, 71, 63, 59, 51, 41, 36, 45, 54, 63, 71, 81, 88, 90, 98, 105, 112, 114, 119
出力: 36
463デフォルトの名無しさん
2019/12/28(土) 23:28:52.09ID:mH66EenF464デフォルトの名無しさん
2019/12/28(土) 23:34:06.76ID:AtehPr/g >>463
私が用意してた答えは二分探索ではありませんでしたが二分探索でできるんですねすごいです
私が用意してた答えは二分探索ではありませんでしたが二分探索でできるんですねすごいです
465デフォルトの名無しさん
2019/12/28(土) 23:38:08.54ID:mH66EenF466デフォルトの名無しさん
2019/12/28(土) 23:42:14.62ID:mH66EenF 再度訂正。1行目が消えていた。
https://ideone.com/mgNo9a
https://ideone.com/mgNo9a
467デフォルトの名無しさん
2019/12/28(土) 23:45:03.69ID:4BOt7DVD 最初に思いつくのが二分探索だからそれより速い方法があるんだろうなと思った
468デフォルトの名無しさん
2019/12/29(日) 00:04:58.67ID:Jtzyjysr469デフォルトの名無しさん
2019/12/29(日) 00:15:11.87ID:Jtzyjysr470デフォルトの名無しさん
2019/12/29(日) 00:41:31.56ID:wJ/DeyFk471デフォルトの名無しさん
2019/12/29(日) 02:13:42.53ID:2ZGuf6bc >>462
Java 三分探索で2/3に範囲を狭めてく
https://paiza.io/projects/NjNBWH-afFYHO5H9w8EJeQ
1/2に減らせる二分探索には敵わない
傾きを二分探索するって発想はなかったわー
Java 三分探索で2/3に範囲を狭めてく
https://paiza.io/projects/NjNBWH-afFYHO5H9w8EJeQ
1/2に減らせる二分探索には敵わない
傾きを二分探索するって発想はなかったわー
472デフォルトの名無しさん
2019/12/29(日) 02:17:13.97ID:2ZGuf6bc >>468
実装の効率はパないすね、効率はそういう意味でもありましたホントです
実装の効率はパないすね、効率はそういう意味でもありましたホントです
473デフォルトの名無しさん
2019/12/29(日) 09:24:17.66ID:Y3W4ZjXN いやいや
ただのリニア検索より遅いのはあり得ん
ただのリニア検索より遅いのはあり得ん
474デフォルトの名無しさん
2019/12/29(日) 19:39:43.67ID:Jtzyjysr でも出てる中で一番速いけど。
475デフォルトの名無しさん
2019/12/29(日) 21:33:41.90ID:wJ/DeyFk >>474
そりゃ、例の数列では要素数が少なくてアルゴリズムの差が出にくいからだろ。
「効率よく」とわざわざ書いてある問題なんだから、もっと大きなデータを与えた
場合も想定して答えるのが普通。
例えば、100万から1までの連番の後に2から50万までの連番が続く数列を与えれば
アルゴリズム間の違いは歴然。
Rで二分探索、min関数、sort関数で求めたときの1回あたり平均実行時間を計測すると、
0.132, 2.08, 55.2ミリ秒で桁が違う (PCでは二分探索はもう少し速かった)。
計算量オーダーがO(log n), O(n), O(n log n)だから当たり前だが。
https://ideone.com/kuqONz
C++の>>468に同じデータを与えると108ミリ秒かかり、何とRのsort関数より遅い。
Rの関数はCで書かれているものが多いから、この差はつまりはCとC++のSTLの
性能差によるものだろう。
https://ideone.com/jMCCfP
そりゃ、例の数列では要素数が少なくてアルゴリズムの差が出にくいからだろ。
「効率よく」とわざわざ書いてある問題なんだから、もっと大きなデータを与えた
場合も想定して答えるのが普通。
例えば、100万から1までの連番の後に2から50万までの連番が続く数列を与えれば
アルゴリズム間の違いは歴然。
Rで二分探索、min関数、sort関数で求めたときの1回あたり平均実行時間を計測すると、
0.132, 2.08, 55.2ミリ秒で桁が違う (PCでは二分探索はもう少し速かった)。
計算量オーダーがO(log n), O(n), O(n log n)だから当たり前だが。
https://ideone.com/kuqONz
C++の>>468に同じデータを与えると108ミリ秒かかり、何とRのsort関数より遅い。
Rの関数はCで書かれているものが多いから、この差はつまりはCとC++のSTLの
性能差によるものだろう。
https://ideone.com/jMCCfP
477デフォルトの名無しさん
2019/12/29(日) 21:41:48.80ID:2ZGuf6bc なんかすまんなみんな、ワイのせいで・・・ワイのせいで・・・ワイは悪くない
478デフォルトの名無しさん
2019/12/29(日) 22:06:29.15ID:Y3W4ZjXN >>462くらい乱数に法則があれば2分検索より速いアルゴリズムを作れる
例としてはイマイチ
例としてはイマイチ
479デフォルトの名無しさん
2019/12/29(日) 22:38:51.59ID:Byl7yBSZ このスレだけマジで何言ってんのか理解できない
やっぱまずいよなあ、数学勉強し直さなきゃなあ
やっぱまずいよなあ、数学勉強し直さなきゃなあ
480デフォルトの名無しさん
2019/12/29(日) 22:43:46.32ID:KptD7+e9 >>426
1)数百万規模でありそう。
1)数百万規模でありそう。
481デフォルトの名無しさん
2019/12/30(月) 08:49:27.55ID:1DW7Hzfm >>475
最適化されたCとC++のSTLならCのほうが分があるということ?
最適化されたCとC++のSTLならCのほうが分があるということ?
482デフォルトの名無しさん
2019/12/30(月) 09:13:40.00ID:W9rqQHA3 突き詰めた機械語にコンバートされるCと
汎用性のSTL
どちらに分があるのか
汎用性のSTL
どちらに分があるのか
483デフォルトの名無しさん
2019/12/30(月) 11:48:55.51ID:1DW7Hzfm 戦争になりそうだが、俺は膝にassertを受けちまってな
皆の力にはなれない、すまない
皆の力にはなれない、すまない
484デフォルトの名無しさん
2019/12/30(月) 13:23:07.59ID:I3iMR+1Y Rのsortは基数ソート使ってるらしいからその差かもしれない
c++のもこのデータの場合stable_sortに変えると3倍くらい速くなった
c++のもこのデータの場合stable_sortに変えると3倍くらい速くなった
485デフォルトの名無しさん
2019/12/30(月) 15:32:52.11ID:fFRqMrLq いいっすねー、新しいお題用意してるからちょっとまってて
486デフォルトの名無しさん
2019/12/30(月) 15:44:13.04ID:fFRqMrLq お題
四角形の縦の長さの数列と
四角形の横の長さの数列と
四角形の面積が与えられます
縦の長さと横の長さを組み合わせて
与えられた面積と一致する四角形をいくつ
作ることができるか求めてください
入力: 41, 9, 25, 92, 48, 15, 69, 61, 85, 22, 82, 79, 7, 34, 86, 29, 36, 77, 16, 79, 57, 8, 9, 58, 86, 0, 24, 83, 63, 46
入力: 12, 79, 11, 65, 9, 33, 44, 54, 30, 43, 76, 23, 24, 86, 15, 35, 21, 97, 57, 96, 6, 3, 59, 51, 29, 58, 93, 94, 49, 8
入力: 195?
四角形の縦の長さの数列と
四角形の横の長さの数列と
四角形の面積が与えられます
縦の長さと横の長さを組み合わせて
与えられた面積と一致する四角形をいくつ
作ることができるか求めてください
入力: 41, 9, 25, 92, 48, 15, 69, 61, 85, 22, 82, 79, 7, 34, 86, 29, 36, 77, 16, 79, 57, 8, 9, 58, 86, 0, 24, 83, 63, 46
入力: 12, 79, 11, 65, 9, 33, 44, 54, 30, 43, 76, 23, 24, 86, 15, 35, 21, 97, 57, 96, 6, 3, 59, 51, 29, 58, 93, 94, 49, 8
入力: 195?
487デフォルトの名無しさん
2019/12/30(月) 15:45:24.75ID:fFRqMrLq 195の後ろの文字化けは無視してください
195と書きたかったのです
195と書きたかったのです
488デフォルトの名無しさん
2019/12/30(月) 15:47:28.48ID:fFRqMrLq 入力の数列の長さが数万になってもちょっぱやで計算できるとなお良いです
489デフォルトの名無しさん
2019/12/30(月) 16:18:52.49ID:pgNmBWor 四角形の縦の長さの定義は?
まさか四角形=長方形じゃないでしょ
まさか四角形=長方形じゃないでしょ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「もうキモくてキモくて…」29歳女性が語る“おぢアタック”の実態。「俺ならイケるかも」年下女性を狙う勘違い中年男性に共通点が★2 [Hitzeschleier★]
- 日本語が話せない「外国籍」の子が急増中、授業がストップ、教室から脱走も…先生にも大きな負担「日本語支援」追いつかず [七波羅探題★]
- 自ら「パンセクシュアル」だと明かし、東由貴・東京都議(立憲民主)が「パートナーシップ」施策の充実求める:東京新聞 [少考さん★]
- 【女子カーリング】五輪出場決定!女子日本代表の「フォルティウス」チーム名は「より強く」の意味 [征夷大将軍★]
- 「暖房が使えない」「食費が高くて子どもの栄養が…」 物価高に苦しむ子育て世帯、政府に期待する支援は [蚤の市★]
- パワフル女性世界3位に高市首相 米誌フォーブス選出 [蚤の市★]
- 高市を支持する日本人さんはなにが理由なの?円安進行、国債金利爆上げ、最大貿易国との摩擦とたった1ヶ月で国益を棄損してるのに [472617201]
- (´・ω・`)お!ま!え!ら!ぁ~!!!
- エナジードリンク、危険だった。飲酒喫煙もせずランニングが趣味の54歳の若者が毎日たった8本飲むだけで脳卒中に [742348415]
- Twitter医師ら「死ぬほど勉強して博愛精神求められるとかそらみんな美容外科なるわ。嫌なら普通の医療も保険診療廃止しろ!」 [762037879]
- 【超緊急】中国・ロシア、四国爆撃!!!!!!!!!!へ!! [347834418]
- 在宅なのにここ見てる奴wwwwwwwwwwww
