プログラミングのお題スレです。
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
※前スレ
プログラミングのお題スレ Part18
https://mevius.5ch.net/test/read.cgi/tech/1594702426/
探検
プログラミングのお題スレ Part19
■ このスレッドは過去ログ倉庫に格納されています
2020/11/30(月) 00:04:05.21ID:TF2Czp0y
160デフォルトの名無しさん
2021/01/02(土) 21:54:03.91ID:YfZD//vW メモリが安くなったとはいえ
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので
やはりメモリの制限は必要では?
無尽蔵にあるわけではないので
161蟻人間 ◆T6xkBnTXz7B0
2021/01/04(月) 22:40:39.15ID:RRkyDjZk お題: 四方に広がる無限のサイズの方眼紙があって、1マス1マスに一個のアラビア数字を一度だけ記入できる。
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)
方眼紙に記録したデータの一部は「仮想画面」に出力できる。
マス(x, y)に数字dを記入することを「P(x, y, d)」と表すことにする(x, yは任意の整数)。
(a) 3桁の自然数が2つ与えられる。その足し算の筆算を実演するアルゴリズムを出力するプログラムを書け。
(b) 任意の自然数が2つ与えられる。(以下略)
162蟻人間 ◆T6xkBnTXz7B0
2021/01/04(月) 22:51:58.92ID:RRkyDjZk 補記。
マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。
また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。
マス(x, y)にある数字を「P(x, y)」と表すことにする。マス(x, y)に数字がなければP(x, y)==0とする。
また、マス(x, y)に数字がなければE(x, y)==1とし、数字があればE(x, y)==0とする。
163デフォルトの名無しさん
2021/01/05(火) 22:28:39.68ID:JVpboZJX お題: ランダムな数列を生成せよ
数列の長さは4 <= len <= 20とし、これもランダムとする
数列の長さは4 <= len <= 20とし、これもランダムとする
164デフォルトの名無しさん
2021/01/05(火) 22:36:13.47ID:3bhht3A2165デフォルトの名無しさん
2021/01/06(水) 10:45:40.05ID:0+tWp1dI >>163 js
const rand = (a, b) => Math.floor(Math.random() * (b - a + 1)) + a
const range = (n) => [...Array(n).keys()]
range(rand(4, 20)).map(Math.random)
const rand = (a, b) => Math.floor(Math.random() * (b - a + 1)) + a
const range = (n) => [...Array(n).keys()]
range(rand(4, 20)).map(Math.random)
166デフォルトの名無しさん
2021/01/06(水) 10:46:52.82ID:0+tWp1dI ruby 3 はどのくらい変わったの
167デフォルトの名無しさん
2021/01/06(水) 14:12:34.77ID:0ypUbOKE >>163
Kotlin または Kotlin script
以下は kotlinc コマンドで REPL で実行した時のコピー。
(先頭の >>> はプロンプト)
>>> (1..(4..20).random()).map { kotlin.random.Random.nextInt() }
res0: kotlin.collections.List<kotlin.Int> = [1712097059, 2034192723, -1232228362, 634194098, 1788814029, -1878195330, -2043751487, 933285281, 1116738696, -934057871, -1657983454, -1761832713, -1836302098, -902578867, -1306790359, 1824207694, 386095401, -389307033, 380242891, -2028767653]
>>>
実行結果は何処にも出力しようとしてしていないが REPL なので自動で出力されている。
Kotlin または Kotlin script
以下は kotlinc コマンドで REPL で実行した時のコピー。
(先頭の >>> はプロンプト)
>>> (1..(4..20).random()).map { kotlin.random.Random.nextInt() }
res0: kotlin.collections.List<kotlin.Int> = [1712097059, 2034192723, -1232228362, 634194098, 1788814029, -1878195330, -2043751487, 933285281, 1116738696, -934057871, -1657983454, -1761832713, -1836302098, -902578867, -1306790359, 1824207694, 386095401, -389307033, 380242891, -2028767653]
>>>
実行結果は何処にも出力しようとしてしていないが REPL なので自動で出力されている。
168デフォルトの名無しさん
2021/01/06(水) 19:38:44.63ID:ySlgJWsk >>163 Ruby
# こんな意味だと解釈した
puts ( '%020b' % rand(1<<20) )[ 0, 4+rand(17) ] # ( 2進) '0000'-'00000000000000000000'..'1111'-'11111111111111111111'
puts ( '%020d' % rand(1e20) )[ 0, 4+rand(17) ] # (10進) '0000'-'00000000000000000000'..'9999'-'99999999999999999999'
# こんな意味だと解釈した
puts ( '%020b' % rand(1<<20) )[ 0, 4+rand(17) ] # ( 2進) '0000'-'00000000000000000000'..'1111'-'11111111111111111111'
puts ( '%020d' % rand(1e20) )[ 0, 4+rand(17) ] # (10進) '0000'-'00000000000000000000'..'9999'-'99999999999999999999'
169デフォルトの名無しさん
2021/01/06(水) 23:58:46.35ID:N14y+/j1 お題
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください
入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
アルファベットの開始の文字、アルファベットの終了の文字を
入力としてうけとり下記のように文字列を出力してください
入力: a,k
出力:
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
170デフォルトの名無しさん
2021/01/07(木) 00:11:25.06ID:bv7Qweso 意味不明な途中省く
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk
sh & perl5
echo "a,k" | perl -lane 'm/(\w),(\w)/; print ($1..$2)'
abcdefghijk
171デフォルトの名無しさん
2021/01/07(木) 00:20:29.22ID:iqGL0Mlk 省いちゃダメなの!
172デフォルトの名無しさん
2021/01/07(木) 00:29:54.66ID:Vd9hikpg >>169
Haskell
import Data.List
consecutiveAlph a z = tail $ inits $ [ a .. z ]
main = mapM_ putStrLn $ consecutiveAlph 'a' 'k'
----
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
Haskell
import Data.List
consecutiveAlph a z = tail $ inits $ [ a .. z ]
main = mapM_ putStrLn $ consecutiveAlph 'a' 'k'
----
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
173(u_・y)
2021/01/07(木) 00:56:12.00ID:oTn3YI8v174デフォルトの名無しさん
2021/01/07(木) 02:01:24.63ID:GGtjVNVk >>169 Common Lisp
https://ideone.com/yWJWQf
参考:
CLHS: Section 13.1.6 Ordering of Characters
http://www.lispworks.com/documentation/HyperSpec/Body/13_af.htm
https://ideone.com/yWJWQf
参考:
CLHS: Section 13.1.6 Ordering of Characters
http://www.lispworks.com/documentation/HyperSpec/Body/13_af.htm
1759
2021/01/07(木) 02:13:26.61ID:t9BUPUyy >>169 Perl5
@a = split',', <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
実行結果
~ $ echo 'a,k' | perl 19_169_a,k.pl
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
@a = split',', <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
実行結果
~ $ echo 'a,k' | perl 19_169_a,k.pl
a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
1769
2021/01/07(木) 02:17:47.93ID:t9BUPUyy つか、これでよかったわ
@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
@a = eval <>;
print($a[0]..$_, "\n") for $a[0]..$a[1];
177デフォルトの名無しさん
2021/01/07(木) 11:50:26.21ID:oTn3YI8v お題
オセロのようなルールでひっくり返しを行う処理を実装せよ
変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒
入力:01202113112120
出力:01202222222120
オセロのようなルールでひっくり返しを行う処理を実装せよ
変数のイメージ
0 = 置かれてない場所
1 = 黒
2 = 白
3 = 今のターンで置いた黒
入力:01202113112120
出力:01202222222120
178デフォルトの名無しさん
2021/01/07(木) 11:52:33.15ID:oTn3YI8v ちょい訂正
3 = 今のターンで置いた白だった
3 = 今のターンで置いた白だった
179デフォルトの名無しさん
2021/01/07(木) 12:05:34.54ID:TYHzopEy180デフォルトの名無しさん
2021/01/07(木) 12:06:14.88ID:TYHzopEy あ、1=3=黒なのね
失礼しました
失礼しました
181デフォルトの名無しさん
2021/01/07(木) 12:32:35.52ID:TYHzopEy >>177
haskell
twosTurn x = let
( pre, ( '3' : post ) ) = span (/='3') x
revOne y = let
( pre02 , post02 ) = span ( == '1' ) $ y ++ "0"
twos = zipWith const ( repeat '2' ) pre02
in if ( head post02) == '0'
then y
else take ( length y ) ( twos ++ post02 )
revOne' = reverse . revOne . reverse
in ( revOne' pre ) ++ "2" ++ ( revOne post )
sample = "01202113112120"
main = print $ twosTurn sample
haskell
twosTurn x = let
( pre, ( '3' : post ) ) = span (/='3') x
revOne y = let
( pre02 , post02 ) = span ( == '1' ) $ y ++ "0"
twos = zipWith const ( repeat '2' ) pre02
in if ( head post02) == '0'
then y
else take ( length y ) ( twos ++ post02 )
revOne' = reverse . revOne . reverse
in ( revOne' pre ) ++ "2" ++ ( revOne post )
sample = "01202113112120"
main = print $ twosTurn sample
182デフォルトの名無しさん
2021/01/07(木) 12:50:45.25ID:sEmeEMut >>177 Ruby
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }
board = '01202113112120'
puts board
puts board.sub( /2(1*)3(1*)2/ ){ "2#{'2'* ($1.size)}2#{'2' * $2.size}2" }
183182
2021/01/07(木) 13:05:54.80ID:sEmeEMut >>182 は間違いでした
board = '01202113112120'
puts board
puts board.sub( /2(1*)3/ ){ "2#{'2'* ($1.size)}3" }.sub( /3(1*)2/ ){ "3#{'2'* ($1.size)}2" }.tr( '3', '2' )
board = '01202113112120'
puts board
puts board.sub( /2(1*)3/ ){ "2#{'2'* ($1.size)}3" }.sub( /3(1*)2/ ){ "3#{'2'* ($1.size)}2" }.tr( '3', '2' )
184デフォルトの名無しさん
2021/01/07(木) 20:21:05.95ID:n2K5l1bF 仕様を出来るだけ簡潔にしたかったんだろうけどやり過ぎてモヤる
下位から
第1bit 駒有無
第2 駒種別
第3 now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now
と置いてnowの結果を出力の方が良くね
下位から
第1bit 駒有無
第2 駒種別
第3 now flag
として
0:駒無し
1:白, 3:黒
5:白now, 7:黒now
と置いてnowの結果を出力の方が良くね
185デフォルトの名無しさん
2021/01/07(木) 21:58:01.92ID:pRSWPdMl この問題の本命は、オセロを作るっていうお題にしたつもりじゃないからw
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な
スレに居る人はオセロくらい作ったことある人しかいないと思っているし
ゲームのアルゴリズムの一端を文字列処理として見るのも可能っていう点な
186デフォルトの名無しさん
2021/01/08(金) 02:42:54.86ID:pELUdJTO >>184
お前がそういうお題を新たに出せば良い。
お前がそういうお題を新たに出せば良い。
187デフォルトの名無しさん
2021/01/08(金) 07:57:49.81ID:AIrixKby >>184 Ruby
board = [0b000,0b011,0b001,0b000,0b001,0b011,0b011,0b101,0b011,0b011,0b001,0b011,0b001,0b000].pack('C*')
if board["\x05"]
board = board.sub( /\01(\03*)\x05/ ){ "\01#{"\01"* ($1.size)}\x05" }.sub( /\x05(\x03*)\x01/ ){ "\x05#{"\x01"* ($1.size)}\x01" }.tr( "\x05", "\x01" )
else
board = board.sub( /\03(\01*)\x07/ ){ "\03#{"\03"* ($1.size)}\x07" }.sub( /\x07(\x01*)\x03/ ){ "\x07#{"\x03"* ($1.size)}\x03" }.tr( "\x07", "\x03" )
end
puts board.unpack('C*').map{|b| '0b%03b' % b.ord }.join(',')
#=>0b000,0b011,0b001,0b000,0b001,0b001,0b001,0b001,0b001,0b001,0b001,0b011,0b001,0b000
board = [0b000,0b011,0b001,0b000,0b001,0b011,0b011,0b101,0b011,0b011,0b001,0b011,0b001,0b000].pack('C*')
if board["\x05"]
board = board.sub( /\01(\03*)\x05/ ){ "\01#{"\01"* ($1.size)}\x05" }.sub( /\x05(\x03*)\x01/ ){ "\x05#{"\x01"* ($1.size)}\x01" }.tr( "\x05", "\x01" )
else
board = board.sub( /\03(\01*)\x07/ ){ "\03#{"\03"* ($1.size)}\x07" }.sub( /\x07(\x01*)\x03/ ){ "\x07#{"\x03"* ($1.size)}\x03" }.tr( "\x07", "\x03" )
end
puts board.unpack('C*').map{|b| '0b%03b' % b.ord }.join(',')
#=>0b000,0b011,0b001,0b000,0b001,0b001,0b001,0b001,0b001,0b001,0b001,0b011,0b001,0b000
188デフォルトの名無しさん
2021/01/08(金) 21:29:33.72ID:Uhe1x+T1189デフォルトの名無しさん
2021/01/09(土) 02:47:05.51ID:yzrxyAxR190デフォルトの名無しさん
2021/01/09(土) 03:00:30.54ID:yzrxyAxR >>169
Perl5
コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)
perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'
Perl5
コマンドラインからこんな風に入力して実行する。(実際に試した shell は bash)
perl -ne 'chomp;@d=split/,/;print join("\n", map { join("", $d[0]..$_) } $d[0]..$d[1])."\n";'
191デフォルトの名無しさん
2021/01/09(土) 03:18:08.87ID:yzrxyAxR192デフォルトの名無しさん
2021/01/09(土) 08:04:43.95ID:7SSQ0Zys193デフォルトの名無しさん
2021/01/09(土) 20:59:35.76ID:71nzX3jh194デフォルトの名無しさん
2021/01/09(土) 21:04:47.77ID:71nzX3jh195デフォルトの名無しさん
2021/01/09(土) 21:40:06.97ID:71nzX3jh196デフォルトの名無しさん
2021/01/09(土) 23:28:46.26ID:MPKG4kVI お題
N個の時系列データが与えられる。i番目のデータはa_iである
i=1〜Nについて、以下の条件を満たすx_iを出力せよ
x_i : 直近c個でa_iが最大となるようなcのうち、最大のもの
[入力]
N
a_1 a_2 ... a_N
[出力]
x_1 x_2 ... x_N
(例1)
5
3 1 2 6 6
=> 1 1 2 4 5
3 = max(3)
1 = max(1) //今までの中で最小
2 = max(1, 2) //直近2個で最大
6 = max(3, 1, 2, 6) //直近4個で最大 (直近3個でも最大だが、cの値として最大のものを選ぶ)
6 = max(3, 1, 2, 6, 6) //直近5個で最大(最大タイ)
(例2)
3
100 10 1
=> 1 1 1
N個の時系列データが与えられる。i番目のデータはa_iである
i=1〜Nについて、以下の条件を満たすx_iを出力せよ
x_i : 直近c個でa_iが最大となるようなcのうち、最大のもの
[入力]
N
a_1 a_2 ... a_N
[出力]
x_1 x_2 ... x_N
(例1)
5
3 1 2 6 6
=> 1 1 2 4 5
3 = max(3)
1 = max(1) //今までの中で最小
2 = max(1, 2) //直近2個で最大
6 = max(3, 1, 2, 6) //直近4個で最大 (直近3個でも最大だが、cの値として最大のものを選ぶ)
6 = max(3, 1, 2, 6, 6) //直近5個で最大(最大タイ)
(例2)
3
100 10 1
=> 1 1 1
197デフォルトの名無しさん
2021/01/10(日) 03:36:08.11ID:lRaYSXSv198デフォルトの名無しさん
2021/01/10(日) 05:17:09.34ID:5hwhwjPe >>169 bat
@echo off &setlocal
set ALL=abcdefghijklmnopqrstuvwxyz
call :RANGE a,k
pause &exit /b
:RANGE
setlocal enabledelayedexpansion
if "%1" GTR "%2" echo ERROR: Invalid argument&exit /b
set STR=!ALL:*%1=%1!
if not "%2"=="z" call set STR=%%STR:!ALL:*%2=!=%%
:LENGTH
set /a n+=1
if not "!STR:~0,-%n%!"=="" goto :LENGTH
for /L %%n in (1,1,%n%) do echo !STR:~0,%%n!
@echo off &setlocal
set ALL=abcdefghijklmnopqrstuvwxyz
call :RANGE a,k
pause &exit /b
:RANGE
setlocal enabledelayedexpansion
if "%1" GTR "%2" echo ERROR: Invalid argument&exit /b
set STR=!ALL:*%1=%1!
if not "%2"=="z" call set STR=%%STR:!ALL:*%2=!=%%
:LENGTH
set /a n+=1
if not "!STR:~0,-%n%!"=="" goto :LENGTH
for /L %%n in (1,1,%n%) do echo !STR:~0,%%n!
199デフォルトの名無しさん
2021/01/10(日) 09:32:44.37ID:aiEZ01BF >>196
完全に全く意味がわからないお題を久々に見た
完全に全く意味がわからないお題を久々に見た
200デフォルトの名無しさん
2021/01/10(日) 09:35:06.95ID:aiEZ01BF あ、イヤわかった最小はタイポか
201デフォルトの名無しさん
2021/01/10(日) 09:41:46.50ID:nmvnbhWr202デフォルトの名無しさん
2021/01/10(日) 09:45:08.12ID:aiEZ01BF >>196
haskell
import Data.List
c = id
. map length
. map (\x -> takeWhile ( <= ( last x ) ) . reverse $ x)
. tail
. inits
main = do
print $ c [ 3, 1, 2, 6, 6 ]
----
[1,1,2,4,5]
haskell
import Data.List
c = id
. map length
. map (\x -> takeWhile ( <= ( last x ) ) . reverse $ x)
. tail
. inits
main = do
print $ c [ 3, 1, 2, 6, 6 ]
----
[1,1,2,4,5]
203デフォルトの名無しさん
2021/01/10(日) 13:04:37.47ID:26KuLTT9204デフォルトの名無しさん
2021/01/11(月) 00:16:30.88ID:NK5j5E+l 196読めた奴すごいな
205158
2021/01/11(月) 02:25:11.67ID:HKU1hsOJ206デフォルトの名無しさん
2021/01/11(月) 02:44:15.64ID:HKU1hsOJ お題
>>196を小学生にも理解できるぐらいのやさしい日本語に翻訳せよ。
>>196を小学生にも理解できるぐらいのやさしい日本語に翻訳せよ。
207デフォルトの名無しさん
2021/01/11(月) 03:09:40.17ID:H8GM2Hiz 無理です
チンパンカンプン
チンパンカンプン
208デフォルトの名無しさん
2021/01/11(月) 03:11:51.27ID:yhMi8PUx このスレの住人なら日本語分からなくても例だけ見れば普通に理解できるだろ
IQテストみたいなもんだ
IQテストみたいなもんだ
209デフォルトの名無しさん
2021/01/11(月) 03:26:31.03ID:yIQfxhn8 >>206
こういう事じゃない?
入力値が遡って比較する最大個数と値を兼ねてるんでしょ
同値ならindex(1始まり)の大きい方
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 (2 6 6 4)] →3
こういう事じゃない?
入力値が遡って比較する最大個数と値を兼ねてるんでしょ
同値ならindex(1始まり)の大きい方
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 (2 6 6 4)] →3
210デフォルトの名無しさん
2021/01/11(月) 03:36:50.19ID:yhMi8PUx >>209
最後の4違うぞ
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 2 6 6 (4)] →1
x_iは要素数。上の例でいうと()の中の数が何個あるかってこと。で、(右から)直近の要素の中での最大値が一番右の数字になるのは最大でいくつかってこと。
一番下の4のケースでは次の6を含んでしまうとMAXが4にはならないので要素数1で打ち止め。
最後の4違うぞ
入力:3 1 2 6 6 4
3 [(3)] →1
1 [3 (1)] →1
2 [3 (1 2)] →2
6 [(3 1 2 6)] →4
6 [(3 1 2 6 6)] →5
4 [3 1 2 6 6 (4)] →1
x_iは要素数。上の例でいうと()の中の数が何個あるかってこと。で、(右から)直近の要素の中での最大値が一番右の数字になるのは最大でいくつかってこと。
一番下の4のケースでは次の6を含んでしまうとMAXが4にはならないので要素数1で打ち止め。
211デフォルトの名無しさん
2021/01/11(月) 12:34:34.25ID:kY9pcTJO 現在地から前に遡って見ていって自分と同じか小さい要素が続く数を
最初から最後まで求めるだけ
もっと早く一発で求める方法があるかは分からないけど
最初から最後まで求めるだけ
もっと早く一発で求める方法があるかは分からないけど
212デフォルトの名無しさん
2021/01/11(月) 12:57:43.66ID:ySa6yihW >>206
長さ N の整数列 A が与えられる
A の連続した部分列であって、各 i (1≦i≦N) について次の条件を満たすものをすべて求めなさい
・整数 j (1≦j≦i) を max(A_j, A_{j+1}, ..., A_i) = A_i を満たす最小の j とし i - j + 1 の値
長さ N の整数列 A が与えられる
A の連続した部分列であって、各 i (1≦i≦N) について次の条件を満たすものをすべて求めなさい
・整数 j (1≦j≦i) を max(A_j, A_{j+1}, ..., A_i) = A_i を満たす最小の j とし i - j + 1 の値
213デフォルトの名無しさん
2021/01/11(月) 13:02:19.99ID:H8GM2Hiz 最高水準位アルゴリズムで
最高値更新したら発表?
最高値更新したら発表?
214デフォルトの名無しさん
2021/01/11(月) 14:52:41.81ID:SkhM8/Y0 >>196 C++ O(N log N)
セグメント木を使うと区間 max の二分探索を O(log N) で行える
atcoder の aclib を使用
https://wandbox.org/permlink/8rm8MsauDMJhvpAf
セグメント木を使うと区間 max の二分探索を O(log N) で行える
atcoder の aclib を使用
https://wandbox.org/permlink/8rm8MsauDMJhvpAf
215デフォルトの名無しさん
2021/01/11(月) 15:14:59.89ID:WVZOdukT >>214
しゅんごい
しゅんごい
216デフォルトの名無しさん
2021/01/14(木) 09:22:07.11ID:0HXe7q2K お題
将棋のルールで可能な最初の2手を全て求める。
将棋のルールで可能な最初の2手を全て求める。
217デフォルトの名無しさん
2021/01/14(木) 11:00:00.08ID:5lV9HJJA なるほど
(∞,0)のみからなるリストから始めて(-値、インデックス)についての辞書式順序(ただしインデックスは降順)でリストに追加していくと考えればいいのか
i番目の要素(v,i)が来た時(u,h)<(w,j)の間に入るならvより大きい最大のインデックスはjだからi番目の出力はi-jになるのか
(∞,0)のみからなるリストから始めて(-値、インデックス)についての辞書式順序(ただしインデックスは降順)でリストに追加していくと考えればいいのか
i番目の要素(v,i)が来た時(u,h)<(w,j)の間に入るならvより大きい最大のインデックスはjだからi番目の出力はi-jになるのか
>>216
すてきなお題ですね!
すてきなお題ですね!
219デフォルトの名無しさん
2021/01/14(木) 19:35:36.96ID:oX4ff6VG >>216
先手後手ともに可能性が30通りあるのでそれらを単純に組み合わせて出力すれば良い
先手後手ともに可能性が30通りあるのでそれらを単純に組み合わせて出力すれば良い
220デフォルトの名無しさん
2021/01/14(木) 19:43:46.53ID:HoJSCLGU 3手なら面白いけど2手ならつまらんな
221デフォルトの名無しさん
2021/01/16(土) 10:11:02.80ID:CT7MjBNX 最初の初期状態の配置ならつまらんね
途中経過のどの状態からでもすべての2手(3手でもいいよ!)を出力とかなら
本格的な将棋プログラム組まないと導き出せない
途中経過のどの状態からでもすべての2手(3手でもいいよ!)を出力とかなら
本格的な将棋プログラム組まないと導き出せない
222デフォルトの名無しさん
2021/01/16(土) 19:29:58.68ID:GH8NFez6 投了も一手ですか
223デフォルトの名無しさん
2021/01/19(火) 19:16:59.47ID:Sd54NdA6 iZ-Cでサンプルログラムを書き始めました見てね
https://sunasunax.hatenablog.com
https://sunasunax.hatenablog.com
224デフォルトの名無しさん
2021/01/22(金) 23:33:42.04ID:YvJFxrRj お題:sortしてreverseしてforeachせよ
https://ideone.com/35HTkC
List(7, 8, 3, 6, 4).sorted.reverse.foreach(print)
https://ideone.com/35HTkC
List(7, 8, 3, 6, 4).sorted.reverse.foreach(print)
225224
2021/01/22(金) 23:35:12.02ID:YvJFxrRj >>224 rust
https://ideone.com/SY2DMY
fn main() {
let mut v = [7, 8, 3, 6, 4];
v.sort();
v.reverse();
v.iter().for_each(|x| println!("{}", x));
}
>>224 dart
https://ideone.com/w26D8S
void main() {
var a = [7, 8, 3, 6, 4];
a.sort();
a.reversed.forEach(print);
}
https://ideone.com/SY2DMY
fn main() {
let mut v = [7, 8, 3, 6, 4];
v.sort();
v.reverse();
v.iter().for_each(|x| println!("{}", x));
}
>>224 dart
https://ideone.com/w26D8S
void main() {
var a = [7, 8, 3, 6, 4];
a.sort();
a.reversed.forEach(print);
}
226224
2021/01/22(金) 23:37:05.96ID:YvJFxrRj >>224 ocaml
https://ideone.com/bitFC6
List.iter print_int (List.rev (List.sort Pervasives.compare [7; 8; 3; 6; 4]))
>>224 ruby
https://ideone.com/K14REi
[7, 8, 3, 6, 4].sort.reverse.each(&method(:p))
>>224 octave
https://ideone.com/E2DoUr
arrayfun(@disp, flip(sort([7 8 3 6 4])))
https://ideone.com/bitFC6
List.iter print_int (List.rev (List.sort Pervasives.compare [7; 8; 3; 6; 4]))
>>224 ruby
https://ideone.com/K14REi
[7, 8, 3, 6, 4].sort.reverse.each(&method(:p))
>>224 octave
https://ideone.com/E2DoUr
arrayfun(@disp, flip(sort([7 8 3 6 4])))
227デフォルトの名無しさん
2021/01/23(土) 01:20:49.53ID:a67PVVr/ >>224 C++
for (auto i : multiset<int, greater<int>>({ 7, 8, 3, 6, 4 })) cout << i << endl;
for (auto i : multiset<int, greater<int>>({ 7, 8, 3, 6, 4 })) cout << i << endl;
2289
2021/01/23(土) 02:47:09.23ID:ujFWsLg62299
2021/01/23(土) 02:50:17.66ID:ujFWsLg6230デフォルトの名無しさん
2021/01/23(土) 08:37:55.12ID:Q7562aLA231デフォルトの名無しさん
2021/01/23(土) 09:17:41.00ID:hW9MnAUE232デフォルトの名無しさん
2021/01/23(土) 19:28:56.89ID:7cx92kva お題: 俺のチ〇コの長さ分だけfor文でカウントしてカウント変数を出力せよ
233デフォルトの名無しさん
2021/01/23(土) 19:32:36.06ID:MJXAM7AO print "9"
234デフォルトの名無しさん
2021/01/23(土) 20:01:06.10ID:iIWri5S9235蟻人間 ◆T6xkBnTXz7B0
2021/01/23(土) 21:37:12.62ID:b5t030Zm お題: 日付をYYYYMMDD形式で表したとき、それを表す整数が今日より後に素数になる日付を求めなさい。
236デフォルトの名無しさん
2021/01/23(土) 23:19:53.94ID:Itdr917H それを表す整数とは?
237デフォルトの名無しさん
2021/01/24(日) 22:28:15.93ID:M/FZzV8o >>224
Kotlin script
kotlinc コマンドで REPL にして直接入力して実行した時のコピー。(>>> はプロンプト)
出力は println() を使って1つづつ改行させた。
>>> listOf(7, 8, 3, 6, 4).sorted().reversed().forEach { println(it) }
8
7
6
4
3
>>>
Kotlin script
kotlinc コマンドで REPL にして直接入力して実行した時のコピー。(>>> はプロンプト)
出力は println() を使って1つづつ改行させた。
>>> listOf(7, 8, 3, 6, 4).sorted().reversed().forEach { println(it) }
8
7
6
4
3
>>>
238デフォルトの名無しさん
2021/01/25(月) 14:58:49.27ID:IfPISeNx お題:
整数 N が与えられます
長さ N の正整数列 A_1, ..., A_N であって以下の条件を満たす lcm(A_1, ..., A_N) が最小のものを求めなさい
・gcd(A_1, A_2) * gcd(A_2, A_3) * ... * gcd(A_{N-1}, A_N) * gcd(A_N, A_1) = lcm(A_1, ..., A_N)
制約:
3≦N≦4000
例:
入力: 5
出力: 6 15 35 77 22
整数 N が与えられます
長さ N の正整数列 A_1, ..., A_N であって以下の条件を満たす lcm(A_1, ..., A_N) が最小のものを求めなさい
・gcd(A_1, A_2) * gcd(A_2, A_3) * ... * gcd(A_{N-1}, A_N) * gcd(A_N, A_1) = lcm(A_1, ..., A_N)
制約:
3≦N≦4000
例:
入力: 5
出力: 6 15 35 77 22
239デフォルトの名無しさん
2021/01/25(月) 16:12:04.01ID:83sbARL7 逆じゃね
240デフォルトの名無しさん
2021/01/25(月) 17:27:32.13ID:+X0AlmLX >>238 perl
print join ' ', (1) x $ARGV[0];
print join ' ', (1) x $ARGV[0];
241デフォルトの名無しさん
2021/01/25(月) 17:53:44.58ID:7Hdxu6ox A の全ては互いに異なる
を入れ忘れた
を入れ忘れた
242デフォルトの名無しさん
2021/01/25(月) 17:58:02.52ID:4bSc4UCm Aiの制約で....
Aiが異なる正整数なら
N=5 [1,2,4,8,64] ->lcm=64
Ai>=3 なら
N=5 [5,7,14,6,15] -> lcm=210(=1*2*3*5*7)
(同じlcmで数列は複数作れる)
※あの例はどういう条件だろう
Aiが異なる正整数なら
N=5 [1,2,4,8,64] ->lcm=64
Ai>=3 なら
N=5 [5,7,14,6,15] -> lcm=210(=1*2*3*5*7)
(同じlcmで数列は複数作れる)
※あの例はどういう条件だろう
243デフォルトの名無しさん
2021/01/25(月) 18:08:39.30ID:gx6uUcGg >>238
gcd とか lcm って何?
gcd とか lcm って何?
244デフォルトの名無しさん
2021/01/25(月) 18:09:29.39ID:7Hdxu6ox すいません...
素数を小さい順に組み合わせて 2*3, 3*5, 5*7, 7*11, 11*2
とすると綺麗に数列が作れていいなーと思って投稿したのですが、最小ではなかったようです...
このお題は無かったことに
素数を小さい順に組み合わせて 2*3, 3*5, 5*7, 7*11, 11*2
とすると綺麗に数列が作れていいなーと思って投稿したのですが、最小ではなかったようです...
このお題は無かったことに
245デフォルトの名無しさん
2021/01/25(月) 18:10:17.78ID:gx6uUcGg あ、わかった。ググったら一発で出た。
246デフォルトの名無しさん
2021/01/25(月) 18:11:02.14ID:gx6uUcGg 分かった途端に終了、か・・・
247デフォルトの名無しさん
2021/01/25(月) 18:14:04.63ID:OnR5hlkf 没入感
248デフォルトの名無しさん
2021/01/25(月) 19:20:16.85ID:+q31tGtg お題、灘中入試っぽい問題
開始点S から、終点G まで、最短距離9 で移動する方法は、何通りあるか?
移動は右か下へ、1ずつ移動できるが、* は通れない所である。
数字は通れる所で、単に分かりやすくするために座標を書いただけで、移動コストではない
S23456
12*456
1234*6
123456
12345G
開始点S から、終点G まで、最短距離9 で移動する方法は、何通りあるか?
移動は右か下へ、1ずつ移動できるが、* は通れない所である。
数字は通れる所で、単に分かりやすくするために座標を書いただけで、移動コストではない
S23456
12*456
1234*6
123456
12345G
249デフォルトの名無しさん
2021/01/25(月) 19:34:10.13ID:0+9yE5E1 プログラムなら実際に駒動かしてかぞえるの?
なんか、足し算引き算で出来そうだよね、
なんか、足し算引き算で出来そうだよね、
250デフォルトの名無しさん
2021/01/25(月) 20:22:00.10ID:wN/P4Ly9 別名おねえさん問題
251デフォルトの名無しさん
2021/01/25(月) 20:24:55.52ID:xOoQiCMv ∴>>250
その心は?
その心は?
252デフォルトの名無しさん
2021/01/25(月) 21:25:54.70ID:+X0AlmLX253248
2021/01/25(月) 21:35:28.96ID:+q31tGtg お姉さん問題なら、
Ruby で、そのライブラリを使って解いてみて
Ruby で、そのライブラリを使って解いてみて
254248
2021/01/25(月) 21:48:23.33ID:+q31tGtg 超高速グラフ列挙アルゴリズム 〈フカシギの数え方〉おねえさん問題
BDD/ZDD の湊真一が、北大から京大大学院の教授へと出世してる
BDD/ZDD の湊真一が、北大から京大大学院の教授へと出世してる
255デフォルトの名無しさん
2021/01/25(月) 21:53:57.03ID:p4r3cpqk https://ideone.com/b2CQ5a
48ってなったからあってるのかな適当に作ったけど
48ってなったからあってるのかな適当に作ったけど
256デフォルトの名無しさん
2021/01/26(火) 00:35:19.40ID:rfDeWxg0 お題:
これ出題してみるか。
黒板に1〜nの自然数が一つずつ書かれている。
二人でかわりばんこに次のルールで黒板に書かれた自然数を消していくゲームをする:
・自分の番のとき、黒板に残っている数から一つ選び、
その数及びその数の約数をすべて消す。
・自分の番で黒板の数をすべて消し去ったとき勝者となる。
実はこのゲームはnによらず先攻必勝であるが、初手をどう打つかを判断するのは簡単でない。
1〜30のすべての自然数nについて、後攻を勝たせないために初手で先攻が選ぶことができる数をプログラム中で5秒以内に計算し、すべて列挙せよ。
これ出題してみるか。
黒板に1〜nの自然数が一つずつ書かれている。
二人でかわりばんこに次のルールで黒板に書かれた自然数を消していくゲームをする:
・自分の番のとき、黒板に残っている数から一つ選び、
その数及びその数の約数をすべて消す。
・自分の番で黒板の数をすべて消し去ったとき勝者となる。
実はこのゲームはnによらず先攻必勝であるが、初手をどう打つかを判断するのは簡単でない。
1〜30のすべての自然数nについて、後攻を勝たせないために初手で先攻が選ぶことができる数をプログラム中で5秒以内に計算し、すべて列挙せよ。
257デフォルトの名無しさん
2021/01/26(火) 00:44:35.83ID:3iTHw7RX 1〜30ならデータベース化してしまえばなんとかなるな
258デフォルトの名無しさん
2021/01/26(火) 01:03:48.09ID:c6DHU6bT259デフォルトの名無しさん
2021/01/26(火) 05:34:51.12ID:a1XSwUuB >>248
9C4 - 3C1 * 6C3 - 6C2 * 3C1 + 3C1 * 3C1 * 3C1 = 48
9C4 - 3C1 * 6C3 - 6C2 * 3C1 + 3C1 * 3C1 * 3C1 = 48
260デフォルトの名無しさん
2021/01/26(火) 12:22:51.81ID:V3RlvyIn >>248
お受験風にdpで数え上げる
Haskell
test1 = ""
++ "┏┳━┳┳┓\n"
++ "┣┫ ┣┻┫\n"
++ "┣╋┳┫ ┃\n"
++ "┣╋╋╋┳┫\n"
++ "┗┻┻┻┻┛\n"
to01 = let
parseC c = if c == '\x2001' then 0 else 1
parseL = map ( parseC )
in map parseL . lines
cntRoots posCrs = let
z y x = zipWith ( * ) y $ zipWith ( + ) x $ ( 0 : ) $ z y x
rs = id
$ ( ( 1 : ( repeat 0 ) ) : )
$ zipWith z posCrs rs
in rs
nRoots = last . last . cntRoots
main = print $ nRoots $ to01 test1
----
48
お受験風にdpで数え上げる
Haskell
test1 = ""
++ "┏┳━┳┳┓\n"
++ "┣┫ ┣┻┫\n"
++ "┣╋┳┫ ┃\n"
++ "┣╋╋╋┳┫\n"
++ "┗┻┻┻┻┛\n"
to01 = let
parseC c = if c == '\x2001' then 0 else 1
parseL = map ( parseC )
in map parseL . lines
cntRoots posCrs = let
z y x = zipWith ( * ) y $ zipWith ( + ) x $ ( 0 : ) $ z y x
rs = id
$ ( ( 1 : ( repeat 0 ) ) : )
$ zipWith z posCrs rs
in rs
nRoots = last . last . cntRoots
main = print $ nRoots $ to01 test1
----
48
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 今後50年間、毎年100万人ずつ人口が減る…「少子化対策」の失敗で日本が迎える「死ぬまで搾取」というヤバい未来 ★6 [ぐれ★]
- 「怒りに震えて涙が出た」 同性婚認めず「合憲」判断に原告が反発 「差別的な判決だ」 ★2 [ぐれ★]
- 財政膨張、自民党内に異論 麻生副総裁「やりすぎじゃないか」 [蚤の市★]
- 中国外務省「正式な発言撤回なければ受け入れず」 高市首相は台湾有事「存立危機事態」言及せずも「言及しないことと撤回は別問題」★6 [ぐれ★]
- 「インバウンド政策上、中国は重要」、訪日自粛で金子国交相「早く通常の状況に戻っていただきたい」★3 [ぐれ★]
- 経団連会長、中国大使面会 代表団受け入れ要請 ★2 [蚤の市★]
- 【動画】上海バンダイナムコフェス、ワンピース歌ってる途中に中国政府「日本人の公演全面禁止」発令された瞬間強制終了 怖すぎ★5 [579392623]
- お前らって定期的にうんちすることを心がけてるよな
- 広瀬アリス、庵野秀明がわからない定期
- 【悲報】国分太一さん「全てを失ったんだ!答え合わせさせてくれ!」日テレ「ダメです(即答」 [531674905]
- Amazonプライムビデオ、12月の配信予定作品が凄すぎてサンタさんもびっくり仰天
- 【嫌儲超朗報!】Xトレンド1位『高市氏、宣伝費に8000万円超』 [718678614]
