プログラミングのお題スレです。
前スレ
プログラミングのお題スレ Part10
https://mevius.5ch.net/test/read.cgi/tech/1514772904/
【出題と回答例】
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/
宿題は宿題スレがあるのでそちらへ。
プログラミングのお題スレ Part11
■ このスレッドは過去ログ倉庫に格納されています
2018/04/24(火) 20:45:14.49ID:ZY7R7Sru
258デフォルトの名無しさん
2018/05/05(土) 01:53:30.67ID:ia6t0Ogc f, g のような変換関数を作ること自体は簡単な感じがするが、それと「パイ生地の折り畳み」がどう関係するのかがわからんな。
単にここでは折り畳んだらそういう並びになるというルールなだけ?
単にここでは折り畳んだらそういう並びになるというルールなだけ?
259デフォルトの名無しさん
2018/05/05(土) 01:54:26.33ID:0a7ZDXtf260デフォルトの名無しさん
2018/05/05(土) 02:02:07.19ID:1dAfhim4 半分に折る->後半部を逆順に
折重ねたまま元の大きさまで伸ばす->前半部に合成
パイ生地の作り方からの連想だとは思う
折重ねたまま元の大きさまで伸ばす->前半部に合成
パイ生地の作り方からの連想だとは思う
261デフォルトの名無しさん
2018/05/05(土) 02:08:07.54ID:j/DSqy58262デフォルトの名無しさん
2018/05/05(土) 02:13:33.62ID:1BpKS+ks263デフォルトの名無しさん
2018/05/05(土) 02:43:53.26ID:ia6t0Ogc >>262
「パイ生地の折り畳み」という言葉に他の意味がないかってこと。
「パイ生地の折り畳み」という言葉に他の意味がないかってこと。
264デフォルトの名無しさん
2018/05/05(土) 07:20:49.47ID:lTVCLXC3 >>254
J
l =: -: * -.@(2&|)
r =: (# - -:@>:) * 2&|
p_fold =: {~((l+r)@i.@#)
折りたたみちょっと面白いね
何度か繰り返し適用すると元に戻る
例えば4つだと p_fold^:3 (1 2 3 4) => 1 2 3 4
と3回適用すると元に戻る
(^:n ってのはn回適用するJの仕組み)
同様に
p_fold^:5 (1 2 3 4 5 6) =>1 2 3 4 5 6
p_fold^:4 (1 2 3 4 5 6 7 8) => 1 2 3 4 5 6 7 8
p_fold^:9 (1 2 3 4 5 6 7 8 9 10) => 1 2 3 4 5 6 7 8 9 10
J
l =: -: * -.@(2&|)
r =: (# - -:@>:) * 2&|
p_fold =: {~((l+r)@i.@#)
折りたたみちょっと面白いね
何度か繰り返し適用すると元に戻る
例えば4つだと p_fold^:3 (1 2 3 4) => 1 2 3 4
と3回適用すると元に戻る
(^:n ってのはn回適用するJの仕組み)
同様に
p_fold^:5 (1 2 3 4 5 6) =>1 2 3 4 5 6
p_fold^:4 (1 2 3 4 5 6 7 8) => 1 2 3 4 5 6 7 8
p_fold^:9 (1 2 3 4 5 6 7 8 9 10) => 1 2 3 4 5 6 7 8 9 10
265デフォルトの名無しさん
2018/05/05(土) 10:31:30.99ID:5+ZWBL/x >>254 Ruby 条件分岐を使わずにindexのみから求めてみた
f=->a{a.size.times.map{|i|a[(i&1)*i-i/2-1]}}
g=->a{(s=a.size).times.map{|i|a[~(4*i-2*s+3).abs/2]}}
p f[[*1..6]] #=> [6, 1, 5, 2, 4, 3]
p g[f[[*1..6]]] #=> [1, 2, 3, 4, 5, 6]
f=->a{a.size.times.map{|i|a[(i&1)*i-i/2-1]}}
g=->a{(s=a.size).times.map{|i|a[~(4*i-2*s+3).abs/2]}}
p f[[*1..6]] #=> [6, 1, 5, 2, 4, 3]
p g[f[[*1..6]]] #=> [1, 2, 3, 4, 5, 6]
266デフォルトの名無しさん
2018/05/05(土) 11:51:20.86267デフォルトの名無しさん
2018/05/05(土) 14:19:41.02ID:E0VTmDdu >>254 Squeak/Pharo Smalltalk
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:idx | arr perform: (#(atLast: at:) atWrap: idx) with: (idx / 2) ceiling]
) as: arr species
].
g := [:arr |
(((1 to: arr size) select: #even), ((1 to: arr size) select: #odd) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) "
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:idx | arr perform: (#(atLast: at:) atWrap: idx) with: (idx / 2) ceiling]
) as: arr species
].
g := [:arr |
(((1 to: arr size) select: #even), ((1 to: arr size) select: #odd) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) "
268デフォルトの名無しさん
2018/05/05(土) 16:41:53.04ID:YacZpoVZ >>254 Squeak/Pharo Smalltalk >>265っぽい方針も入れて書き直し
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:m | arr atWrap: m * m even asBit - (m // 2)]
) as: arr species
].
g := [:arr |
((2 to: arr size by: 2), (1 to: arr size by: 2) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) "
| f g pie |
f := [:arr |
((1 to: arr size)
collect: [:m | arr atWrap: m * m even asBit - (m // 2)]
) as: arr species
].
g := [:arr |
((2 to: arr size by: 2), (1 to: arr size by: 2) reversed
collect: [:idx | arr at: idx]
) as: arr species
].
pie := 'abcdefg'.
pie := f value: pie. "=> 'gafbecd' "
g value: pie. "=> 'abcdefg' "
pie := (1 to: 7).
pie := f value: pie. "=> #(7 1 6 2 5 3 4) "
g value: pie. "=> #(1 2 3 4 5 6 7) "
269デフォルトの名無しさん
2018/05/05(土) 17:07:44.87ID:ZO4AhgIr >>265ってどういう計算してんの?
270デフォルトの名無しさん
2018/05/05(土) 17:25:53.15ID:Js8QmTUw お題
N×Mのフィールドが与えられる。各マスの意味は以下の通りとする。
'S':始点
'G':終点
'.':通行可
'#':通行不可
連続して同じ方向に進むことができないという制約下で、
始点から終点までの最短距離を求めよ。
[example 1]
S....
#....
..#..
....G
=> 9
[example 2]
S.....G
.......
=> 12
N×Mのフィールドが与えられる。各マスの意味は以下の通りとする。
'S':始点
'G':終点
'.':通行可
'#':通行不可
連続して同じ方向に進むことができないという制約下で、
始点から終点までの最短距離を求めよ。
[example 1]
S....
#....
..#..
....G
=> 9
[example 2]
S.....G
.......
=> 12
271デフォルトの名無しさん
2018/05/05(土) 17:33:36.44ID:5+ZWBL/x >>269
配列の長さを L とすると、
f(パイをたたむ)は;
i(0 <= i < L)番目の要素を元の配列の (~...~[i / 2]) % L 番目から持ってくればよい
(~...~はビット反転を i 回繰り返したもの)
g(パイを開く)は;
i(0 <= i < L)番目の要素を元の配列の (- 0.5 - |2 * i - L + 1.5|) % L 番目から持ってくればよい
配列の長さを L とすると、
f(パイをたたむ)は;
i(0 <= i < L)番目の要素を元の配列の (~...~[i / 2]) % L 番目から持ってくればよい
(~...~はビット反転を i 回繰り返したもの)
g(パイを開く)は;
i(0 <= i < L)番目の要素を元の配列の (- 0.5 - |2 * i - L + 1.5|) % L 番目から持ってくればよい
272デフォルトの名無しさん
2018/05/05(土) 18:32:03.46ID:sJdk0i7H [][][] [[[ ] X_[[[ [] ][ [] ][][[[]
273デフォルトの名無しさん
2018/05/05(土) 18:51:54.01ID:c0K4Xq7n 今抱えてる課題
1から100までインクリメントする変数iを用いて
300から1までの実数を100個出力せよ
i=1の時は300
i=100の時は1
となる式を考えてちょ(人・ω・)☆
1から100までインクリメントする変数iを用いて
300から1までの実数を100個出力せよ
i=1の時は300
i=100の時は1
となる式を考えてちょ(人・ω・)☆
274デフォルトの名無しさん
2018/05/05(土) 19:03:50.73ID:1st6shTW >>273
300 - (299.0 / 99.0) * (i - 1)
300 - (299.0 / 99.0) * (i - 1)
275デフォルトの名無しさん
2018/05/05(土) 19:06:07.33ID:j/DSqy58 お題:文字駒を滑らせろ
四方を囲いで被われ駒がこぼれる心配のないM×Nマスのボードがある。
ここに英小文字が印字された正方形の駒が適当に配置されている。(駒のないマスは.(ドット)で表す)
与えられる、ボードを傾ける指示を完遂したときの最終盤面を表示せよ。
指示の方向はU(向かい方向)、D(手前方向)、L(左方向)、R(右方向)の四種類。
例1)
solve([
'...',
'.a.',
'...',
], 'UR')
// ↓
// [
// '..a',
// '...',
// '...',
// ]
https://jsfiddle.net/en6rd3vk/
※盤面は文字列の配列にしているが文字の配列の配列など言語で扱いやすいよう好きにしてよい
例2)
solve(
[".....", ".d.i.", "kmegk", "..tu."],
"LRRLLUDRRLRLRRURRRRLLLRULDUDULDLLRDULURULUDLDLUDDL"
)
//=> [".....", "gk...", "km...", "dietu"]
暇な人は300×300、指示数50くらいでやってみてください。最適化しないと結構時間かかっちゃうと思いますが。
四方を囲いで被われ駒がこぼれる心配のないM×Nマスのボードがある。
ここに英小文字が印字された正方形の駒が適当に配置されている。(駒のないマスは.(ドット)で表す)
与えられる、ボードを傾ける指示を完遂したときの最終盤面を表示せよ。
指示の方向はU(向かい方向)、D(手前方向)、L(左方向)、R(右方向)の四種類。
例1)
solve([
'...',
'.a.',
'...',
], 'UR')
// ↓
// [
// '..a',
// '...',
// '...',
// ]
https://jsfiddle.net/en6rd3vk/
※盤面は文字列の配列にしているが文字の配列の配列など言語で扱いやすいよう好きにしてよい
例2)
solve(
[".....", ".d.i.", "kmegk", "..tu."],
"LRRLLUDRRLRLRRURRRRLLLRULDUDULDLLRDULURULUDLDLUDDL"
)
//=> [".....", "gk...", "km...", "dietu"]
暇な人は300×300、指示数50くらいでやってみてください。最適化しないと結構時間かかっちゃうと思いますが。
276デフォルトの名無しさん
2018/05/05(土) 19:17:21.84ID:c0K4Xq7n277デフォルトの名無しさん
2018/05/05(土) 19:38:36.14ID:ia6t0Ogc >>254
色々な言語で書いてみたが、やってることはほとんど同じ。
それぞれの言語の特徴をあまり生かせてない感じがする。
C
https://paiza.io/projects/zsjD__CUc4kIlaDd-nYgQQ
Kotlin
https://paiza.io/projects/ncCwkTCvQ0IsNcZGbpy_vw
Perl
https://paiza.io/projects/C9lzimZEAZzk25gjn4NGfw
色々な言語で書いてみたが、やってることはほとんど同じ。
それぞれの言語の特徴をあまり生かせてない感じがする。
C
https://paiza.io/projects/zsjD__CUc4kIlaDd-nYgQQ
Kotlin
https://paiza.io/projects/ncCwkTCvQ0IsNcZGbpy_vw
Perl
https://paiza.io/projects/C9lzimZEAZzk25gjn4NGfw
278デフォルトの名無しさん
2018/05/05(土) 20:28:32.99ID:MmzVJzsz279デフォルトの名無しさん
2018/05/05(土) 20:59:38.12ID:a4pX7/xy280デフォルトの名無しさん
2018/05/05(土) 22:20:56.64ID:MmzVJzsz281デフォルトの名無しさん
2018/05/05(土) 22:58:44.12ID:Js8QmTUw お題
Y円を支払うとき、同種の通貨の枚数を最小化する。
Y=500
=> 1 (500*1, 同種の通貨は最大1枚)
Y=300
=> 2 (2*100+2*50, 同種の通貨は最大2枚)
Y=40
=> 3
Y=60
=> 1
Y円を支払うとき、同種の通貨の枚数を最小化する。
Y=500
=> 1 (500*1, 同種の通貨は最大1枚)
Y=300
=> 2 (2*100+2*50, 同種の通貨は最大2枚)
Y=40
=> 3
Y=60
=> 1
282デフォルトの名無しさん
2018/05/05(土) 23:08:19.67ID:MmzVJzsz >>281
通貨の種類は 1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000?
通貨の種類は 1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000?
283デフォルトの名無しさん
2018/05/05(土) 23:19:24.99ID:Js8QmTUw >>282 それでいいです。任意の種類に対応できたら尚良し
284デフォルトの名無しさん
2018/05/05(土) 23:53:24.33ID:gS+4uwRv >>281
=> 0 (カード決済または電子マネー決済)
=> 0 (カード決済または電子マネー決済)
285デフォルトの名無しさん
2018/05/06(日) 00:22:26.26286デフォルトの名無しさん
2018/05/06(日) 01:34:21.80287デフォルトの名無しさん
2018/05/06(日) 01:45:52.35ID:Bse1bLkg288デフォルトの名無しさん
2018/05/06(日) 06:45:27.16ID:lHf8cLJR >>281 Ruby ぴったり払えない時は No Solutions と出力
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
sums = currency.size.times.map { |i| currency[0..i].sum }
[74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40].each { |yen|
print '%d => ' % yen
min = currency.zip(sums).reverse_each.map { |c, s|
yen -= c * x = [yen/c, -(-yen/s)].min
x
}.max
puts yen.zero? ? min : 'No Solutions'
}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
sums = currency.size.times.map { |i| currency[0..i].sum }
[74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40].each { |yen|
print '%d => ' % yen
min = currency.zip(sums).reverse_each.map { |c, s|
yen -= c * x = [yen/c, -(-yen/s)].min
x
}.max
puts yen.zero? ? min : 'No Solutions'
}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3
289デフォルトの名無しさん
2018/05/06(日) 08:03:16.30ID:939GOaZM290デフォルトの名無しさん
2018/05/06(日) 08:16:38.56ID:xMaBOakW >>281 Ruby >>288を修正
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
samples = [74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40]
cands = currency.zip(currency.reduce([]){|s, e| s << s.last.to_i + e}).reverse_each
breakdown = lambda do |yen|
x = cands.map{|c, s| yen -= c * x = [yen/c, -(-yen/s)].min; x}.max
yen > 0 ? 'No Solution' : x
end
samples.each{|yen| puts '%d => %s' % [yen, breakdown[yen]]}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3
currency = [1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000]
samples = [74664, 55998, 37332, 500, 340, 300, 197, 161, 157, 60, 40]
cands = currency.zip(currency.reduce([]){|s, e| s << s.last.to_i + e}).reverse_each
breakdown = lambda do |yen|
x = cands.map{|c, s| yen -= c * x = [yen/c, -(-yen/s)].min; x}.max
yen > 0 ? 'No Solution' : x
end
samples.each{|yen| puts '%d => %s' % [yen, breakdown[yen]]}
#=>
74664 => 4
55998 => 3
37332 => 2
500 => 1
340 => 3
300 => 2
197 => 3
161 => 1
157 => 2
60 => 1
40 => 3
291デフォルトの名無しさん
2018/05/06(日) 19:32:00.34ID:9CUhRDV/ }]] [[《_["[[]]" 〈[]》》 [][][]0,1》》〈〉 [] } } "B,V,0%%%,*1BVLO,SASA1`}}//%\\0,1\"VL"\
292デフォルトの名無しさん
2018/05/08(火) 21:21:59.59ID:qF4LguOP お題:九九の各段の値を合計せよ
https://ideone.com/T3TrFG
https://ideone.com/T3TrFG
293デフォルトの名無しさん
2018/05/08(火) 21:45:36.53ID:XzXTdruW294デフォルトの名無しさん
2018/05/08(火) 21:54:00.37ID:rppAglGz はっ。それはもしや45の倍数・・・
おや?こんな夜中に誰だ?
おや?こんな夜中に誰だ?
295デフォルトの名無しさん
2018/05/08(火) 22:14:46.30ID:8rfWV9vw >>289
それって例えば初期配置が以下のとき(■が駒)
□■■□□■
□□■□■□
■■□■□■
□□■■□□
□■□■□□
■□■□□■
最初に例えばULが来ると以下のようになって…
■■■■■■
■■■■■□
■■■■□□
■□□□□□
□□□□□□
□□□□□□
□だけの行、□だけの列はこれからハブいてループ回せるじゃんってことだよね。この例だと下二行。
なるほど命令の最適化ばっかり考えてて全然気づかなかった。
それって例えば初期配置が以下のとき(■が駒)
□■■□□■
□□■□■□
■■□■□■
□□■■□□
□■□■□□
■□■□□■
最初に例えばULが来ると以下のようになって…
■■■■■■
■■■■■□
■■■■□□
■□□□□□
□□□□□□
□□□□□□
□だけの行、□だけの列はこれからハブいてループ回せるじゃんってことだよね。この例だと下二行。
なるほど命令の最適化ばっかり考えてて全然気づかなかった。
296デフォルトの名無しさん
2018/05/08(火) 23:30:03.25ID:y0JbAqkN >>292 Squeak/Pharo Smalltalk
(1 to: 9) sum * (1 to: 9) "=> #(45 90 135 180 225 270 315 360 405) "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum. "=> #(45 90 135 180 225 270 315 360 405) "
ついでに全段の合計も
((1 to: 9) sum * (1 to: 9)) sum. "=> 2025 "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum sum. "=> 2025 "
(Matrix rows: 9 columns: 9 tabulate: [:x :y | x * y]) sum. "=> 2025 "
((1 to: 9) asArray +* (Matrix rows:1 columns: 9 contents: (1 to: 9))) sum. "=> 2025 "
(1 to: 9) sum * (1 to: 9) "=> #(45 90 135 180 225 270 315 360 405) "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum. "=> #(45 90 135 180 225 270 315 360 405) "
ついでに全段の合計も
((1 to: 9) sum * (1 to: 9)) sum. "=> 2025 "
((1 to: 9) * (Array new: 9 withAll: (1 to: 9))) sum sum. "=> 2025 "
(Matrix rows: 9 columns: 9 tabulate: [:x :y | x * y]) sum. "=> 2025 "
((1 to: 9) asArray +* (Matrix rows:1 columns: 9 contents: (1 to: 9))) sum. "=> 2025 "
297デフォルトの名無しさん
2018/05/08(火) 23:50:03.66ID:XzXTdruW >>275
これの最適化したいんだけど誰か大きいボードのサンプルくれないかなあ
これの最適化したいんだけど誰か大きいボードのサンプルくれないかなあ
298デフォルトの名無しさん
2018/05/09(水) 00:00:50.01ID:yM0yjk1d 激問って未だに更新されてるんだね
299デフォルトの名無しさん
2018/05/09(水) 00:58:06.52ID:NS139TvC >>296
Smalltalk なのに普通だ…いやtabulateが便利そう
J
格段の和
+/(*/[)>:i.9
45 90 135 180 225 270 315 360 405
さらに足すと
+/+/(*/[)>:i.9
2025
先に,で1次元化してから足せば1文字短く
+/,(*/[)>:i.9
2025
Smalltalk なのに普通だ…いやtabulateが便利そう
J
格段の和
+/(*/[)>:i.9
45 90 135 180 225 270 315 360 405
さらに足すと
+/+/(*/[)>:i.9
2025
先に,で1次元化してから足せば1文字短く
+/,(*/[)>:i.9
2025
300デフォルトの名無しさん
2018/05/09(水) 01:51:50.10ID:bn/AH8fd >>297
すごくでかくなったので分けた。ごめんよjsfiddle...
board(1980x1080, 文字列の配列形式)
https://jsfiddle.net/eqyuvgm9/
actions(256)
https://jsfiddle.net/2j2817rc/
result(1980x1080, 文字列の配列形式)
https://jsfiddle.net/uyboko52/
このサンプルでchromeのコンソールで試した結果、
最適化なしでは47.4秒
命令の最適化だけで1.8秒になった
>>289も試してみようと思う
すごくでかくなったので分けた。ごめんよjsfiddle...
board(1980x1080, 文字列の配列形式)
https://jsfiddle.net/eqyuvgm9/
actions(256)
https://jsfiddle.net/2j2817rc/
result(1980x1080, 文字列の配列形式)
https://jsfiddle.net/uyboko52/
このサンプルでchromeのコンソールで試した結果、
最適化なしでは47.4秒
命令の最適化だけで1.8秒になった
>>289も試してみようと思う
301デフォルトの名無しさん
2018/05/09(水) 01:56:38.20ID:qkLXPpHd >>292
Kotlin
(1..9).forEach { a -> println((1..9).map { it * a }.sum()) }
この1行をファイルに入れて kotlinc -script でファイルを指定するとスクリプトとして実行されて計算結果が出力される。
45
90
135
180
225
270
315
360
405
Kotlin
(1..9).forEach { a -> println((1..9).map { it * a }.sum()) }
この1行をファイルに入れて kotlinc -script でファイルを指定するとスクリプトとして実行されて計算結果が出力される。
45
90
135
180
225
270
315
360
405
302デフォルトの名無しさん
2018/05/09(水) 03:24:50.65303デフォルトの名無しさん
2018/05/09(水) 04:36:36.06ID:uBL8ccTk >>292 Nim
import math
const s1 = (sum[int]([1,2,3,4,5,6,7,8,9]))
var s=0; for i in 1..9: s+=s1; echo s
import math
const s1 = (sum[int]([1,2,3,4,5,6,7,8,9]))
var s=0; for i in 1..9: s+=s1; echo s
304デフォルトの名無しさん
2018/05/09(水) 07:39:32.32ID:LEGAA83e305デフォルトの名無しさん
2018/05/09(水) 14:54:31.24ID:LEGAA83e >>300 Ruby
>>289を意識して最適化してみた
https://ideone.com/zwyM7p
2回動かした後、適切に反転させて右下が開くようにしておけば、
abc-
ed--
f---
----
LとRは、
cba-
de--
f---
----
UとDは、
fdc-
eb--
a---
----
と垂直、鉛直方向にそれぞれ反転するだけでいい
最適化された命令は時計回りか反時計回りに回すことになるけど、((駒の数)! + 1)回以内には必ずでループするのでそれも考慮
が、1980x1080には4秒要する模様
>>289を意識して最適化してみた
https://ideone.com/zwyM7p
2回動かした後、適切に反転させて右下が開くようにしておけば、
abc-
ed--
f---
----
LとRは、
cba-
de--
f---
----
UとDは、
fdc-
eb--
a---
----
と垂直、鉛直方向にそれぞれ反転するだけでいい
最適化された命令は時計回りか反時計回りに回すことになるけど、((駒の数)! + 1)回以内には必ずでループするのでそれも考慮
が、1980x1080には4秒要する模様
306デフォルトの名無しさん
2018/05/09(水) 15:06:55.92ID:FhlfzW8k >>295
マス単位で省けると思う
[a....,bcd..,efghi]を[a,bcd,efghi]って表現して
これを上に傾けて[acdhi,bfg,e]にする操作はこんなコードで出来る
https://ideone.com/i7EmbB
他の方向へは対称性を利用すれば書けるから
今は左下に寄ってるみたいな情報を持ってればいいし
その情報で行列表現にも戻せる
まあ駒の数が多い場合は大して速くならないけど
マス単位で省けると思う
[a....,bcd..,efghi]を[a,bcd,efghi]って表現して
これを上に傾けて[acdhi,bfg,e]にする操作はこんなコードで出来る
https://ideone.com/i7EmbB
他の方向へは対称性を利用すれば書けるから
今は左下に寄ってるみたいな情報を持ってればいいし
その情報で行列表現にも戻せる
まあ駒の数が多い場合は大して速くならないけど
307デフォルトの名無しさん
2018/05/09(水) 15:13:44.30ID:LEGAA83e あとは2回目以降どうやって傾けても駒の配置は合同(かその反転)になるから
2回傾けた結果を使って4回目を求めて……ってやればO((駒の数)*log(最適化された命令の長さ))で済みそうだよね
2回傾けた結果を使って4回目を求めて……ってやればO((駒の数)*log(最適化された命令の長さ))で済みそうだよね
308デフォルトの名無しさん
2018/05/09(水) 15:37:49.24ID:FhlfzW8k309デフォルトの名無しさん
2018/05/09(水) 18:01:06.55ID:tbbSaefy >>275を>>300のボードで
こういう処理はCが速かろうということで何の工夫もないコードを書いてみた
アクションの最適化なしで256回動かした場合
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.638s
user 0m0.625s
sys 0m0.009s
638ミリ秒
アクションの最適化だけ実装すると
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.045s
user 0m0.037s
sys 0m0.006s
45ミリ秒
https://ideone.com/bZmXpg
こういう処理はCが速かろうということで何の工夫もないコードを書いてみた
アクションの最適化なしで256回動かした場合
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.638s
user 0m0.625s
sys 0m0.009s
638ミリ秒
アクションの最適化だけ実装すると
MacBook-Pro:tmp$ time ./a.out <data.raw > r.raw
real 0m0.045s
user 0m0.037s
sys 0m0.006s
45ミリ秒
https://ideone.com/bZmXpg
310デフォルトの名無しさん
2018/05/09(水) 18:02:18.67ID:tbbSaefy 補足
256回というのは>>300にある256アクションをそのまま行うということ
256回というのは>>300にある256アクションをそのまま行うということ
311デフォルトの名無しさん
2018/05/09(水) 19:18:52.31ID:tbbSaefy 目先を変えて Apple の GCD を使って8スレッド並列にしてみた
4コアのPCで3倍くらいになった
アクションの最適化なし
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.218s
user 0m1.190s
sys 0m0.027s
218ミリ秒
アクションの最適化あり
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.023s
user 0m0.058s
sys 0m0.008s
23ミリ秒
100回繰り返すと1回あたり18msec程度になる模様
MacBook-Pro:tmp$ time for i in `seq 1 100` ; do ./c.out <data.raw >rc.raw ; done
real 0m1.814s
user 0m6.659s
sys 0m0.589s
https://ideone.com/ULrjTi
4コアのPCで3倍くらいになった
アクションの最適化なし
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.218s
user 0m1.190s
sys 0m0.027s
218ミリ秒
アクションの最適化あり
MacBook-Pro:tmp$ time ./c.out <data.raw > rc.raw
real 0m0.023s
user 0m0.058s
sys 0m0.008s
23ミリ秒
100回繰り返すと1回あたり18msec程度になる模様
MacBook-Pro:tmp$ time for i in `seq 1 100` ; do ./c.out <data.raw >rc.raw ; done
real 0m1.814s
user 0m6.659s
sys 0m0.589s
https://ideone.com/ULrjTi
312デフォルトの名無しさん
2018/05/09(水) 21:01:50.08ID:28IRmfG3 やっぱはえ〜w
313デフォルトの名無しさん
2018/05/09(水) 21:40:14.20ID:7NiN2gcq (そして今試してわかったが dispatch_group は
>>311のように使いまわさず wait 後破棄してまた create する方が高速、と)
>>311のように使いまわさず wait 後破棄してまた create する方が高速、と)
314デフォルトの名無しさん
2018/05/09(水) 21:57:48.63ID:bn/AH8fd スクリプト言語のわりには速いと言われるjsだけど当たり前なのかもしれないが桁違いにぜんぜん敵わんくて糞ワロタww
315デフォルトの名無しさん
2018/05/09(水) 22:18:37.30ID:7NiN2gcq JS のは配列の初期化や文字列操作関数とかが足引っ張ってるんじゃないだろうか。
毎回メモリアロケートするからキャッシュも効きにくそうだし。
2次元配列に初期値セットしてからコードで操作した方が速い気がする。
毎回メモリアロケートするからキャッシュも効きにくそうだし。
2次元配列に初期値セットしてからコードで操作した方が速い気がする。
316デフォルトの名無しさん
2018/05/09(水) 22:24:38.34ID:7NiN2gcq PCの速度差がかなりあるだけかも知れんし後でjs版も計測してみる
317デフォルトの名無しさん
2018/05/10(木) 08:16:30.90 各コマの最大可動範囲は最初に定まるし
ターンが進むにつれ狭まりもするから
それで最適化できん?
知らんけど
ターンが進むにつれ狭まりもするから
それで最適化できん?
知らんけど
318デフォルトの名無しさん
2018/05/10(木) 14:34:27.76ID:qHVZoDSH >>305のやり方だと二回傾けて以降は駒の入れ替えだけでいいから
numpyでboard[board!='.']=np.fliplr(board)[np.fliplr(board)!='.']とかやれば速いかな
インデックスは毎回計算しなくてもいいけど
numpyでboard[board!='.']=np.fliplr(board)[np.fliplr(board)!='.']とかやれば速いかな
インデックスは毎回計算しなくてもいいけど
319デフォルトの名無しさん
2018/05/10(木) 16:30:45.02ID:qHVZoDSH320デフォルトの名無しさん
2018/05/10(木) 16:47:50.18ID:Ulb5C2sT そりゃあ
numpyの本体はC言語だしなぁ・・・
numpyの本体はC言語だしなぁ・・・
321デフォルトの名無しさん
2018/05/10(木) 17:33:52.68ID:qHVZoDSH 本当は数値計算みたいにもっと速い命令を使ってくれるかなと期待してたんだけど
そういう上手くはいかなかった
そういう上手くはいかなかった
322デフォルトの名無しさん
2018/05/10(木) 17:50:15.92ID:I+4Qxgba323316
2018/05/10(木) 18:04:31.86ID:CLWEept/324デフォルトの名無しさん
2018/05/10(木) 18:30:24.64ID:O+ANAa9X じゃあArray版作るか…
思ったんだけどこれWebGLでGPU計算出来るかな?いやGPGPU向きの問題かどうかすら分かんないんだけど詳しい人いるかと思って。
思ったんだけどこれWebGLでGPU計算出来るかな?いやGPGPU向きの問題かどうかすら分かんないんだけど詳しい人いるかと思って。
325デフォルトの名無しさん
2018/05/10(木) 20:41:39.42ID:CLWEept/ >>275
J
left =: (((#~-.),(#~))'.'&=)"1
right =: (((#~),(#~-.))'.'&=)"1
solve =: 3 : 0
:
if. (#x) = 0 do. y return. end.
action =. {. x
actions_left =. }. x
if. action = 'U' do. board =. |: left |: y
elseif. action = 'D' do. board =. |: right |: y
elseif. action = 'L' do. board =. left y
elseif. action = 'R' do. board =. right y
end.
actions_left solve board
)
Cシングルスレッド版の3.5〜6.6倍遅い
アクション(256個)そのまま
4.242秒
最適化した URDLURDLU を使用
0.161秒
https://%62it.ly/2rybKgZ
J
left =: (((#~-.),(#~))'.'&=)"1
right =: (((#~),(#~-.))'.'&=)"1
solve =: 3 : 0
:
if. (#x) = 0 do. y return. end.
action =. {. x
actions_left =. }. x
if. action = 'U' do. board =. |: left |: y
elseif. action = 'D' do. board =. |: right |: y
elseif. action = 'L' do. board =. left y
elseif. action = 'R' do. board =. right y
end.
actions_left solve board
)
Cシングルスレッド版の3.5〜6.6倍遅い
アクション(256個)そのまま
4.242秒
最適化した URDLURDLU を使用
0.161秒
https://%62it.ly/2rybKgZ
326デフォルトの名無しさん
2018/05/10(木) 21:02:14.89ID:0yLDhGJt Jが…Jがちゃんとプログラミング言語しとるw
327デフォルトの名無しさん
2018/05/10(木) 21:44:01.34ID:CLWEept/ 先頭2行のJらしい部分の解説
文字列を.と等しいか('.'&=)でマスク(#~)
(#~'.'&=) '..a.b' => '...'
その論理否定(-.)でマスク
((#~-.)'.'&=) '..a.b' => 'ab'
,で繋げる
(((#~),(#~-.))'.'&=) '..a.b' => '...ab'
これで右寄せ。反対に繋げれば左寄せ。
直感的で 読 み や す い
文字列を.と等しいか('.'&=)でマスク(#~)
(#~'.'&=) '..a.b' => '...'
その論理否定(-.)でマスク
((#~-.)'.'&=) '..a.b' => 'ab'
,で繋げる
(((#~),(#~-.))'.'&=) '..a.b' => '...ab'
これで右寄せ。反対に繋げれば左寄せ。
直感的で 読 み や す い
328デフォルトの名無しさん
2018/05/10(木) 21:52:47.05ID:O+ANAa9X えー直感ってなんだっけ…
329デフォルトの名無しさん
2018/05/11(金) 02:07:15.57ID:9bxegKCD 第六感的に読みやすいな
330デフォルトの名無しさん
2018/05/12(土) 10:11:54.49ID:bX5i+Zj+ 2つの普通のサイコロを
面と面をくっつけて直方体を作る
何種類の異なる直方体ができるか?
回転して同じものは同じ種類とする
面と面をくっつけて直方体を作る
何種類の異なる直方体ができるか?
回転して同じものは同じ種類とする
331デフォルトの名無しさん
2018/05/12(土) 10:31:53.41ID:Hl4HQ1Ge >>330 PHP
84
84
332デフォルトの名無しさん
2018/05/12(土) 10:56:43.70ID:pDgCeBjY 共同ツール 1
https://seleck.cc/685
https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり
共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/
共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://sketchapp.com/extensions/plugins/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/
https://seleck.cc/685
https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり
共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/
共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://sketchapp.com/extensions/plugins/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/
333デフォルトの名無しさん
2018/05/12(土) 11:33:58.65ID:R/twbybb >>332
アフィ
アフィ
334デフォルトの名無しさん
2018/05/12(土) 12:19:44.55ID:QiJLTR+N >>330
無限
無限
335デフォルトの名無しさん
2018/05/12(土) 13:04:25.66336デフォルトの名無しさん
2018/05/12(土) 13:50:20.72ID:UoMtV9Kh337デフォルトの名無しさん
2018/05/12(土) 15:39:30.07ID:TjVuoOYn まず数学的に考えると、6面の内の一面がくっつくのでこれで6種で、更にくっ付けられる面が6面なので6倍。そして4回回転できるので更に4倍。しかし同じ値の面がくっついた時はお互いに回転させても同じのができるのでこれを引く。
とすると6*6*4-6*4=6*4*(6-1)=6*4*5=120でいいのかな。
とすると6*6*4-6*4=6*4*(6-1)=6*4*5=120でいいのかな。
338デフォルトの名無しさん
2018/05/12(土) 15:42:14.83ID:TjVuoOYn ま、しかし、数学的に答え出しちゃったらプログラム作る意味なくなるような気がするので全パターン作って確かめるようなの作るか。
339デフォルトの名無しさん
2018/05/12(土) 15:53:15.44ID:sI+Q43v8 >>337
なんか違う
なんか違う
340デフォルトの名無しさん
2018/05/12(土) 15:57:15.26ID:KWlgK9zD プログラム的な最適解って難しい
341デフォルトの名無しさん
2018/05/12(土) 16:11:04.18ID:TD+PjePm プログラムでやる意味がまったくないな
342デフォルトの名無しさん
2018/05/12(土) 17:25:20.83 >>337
1-1
1-2 2-2
1-3 2-3 3-3
1-4 2-4 3-4 4-4
1-5 2-5 3-5 4-5 5-5
1-6 2-6 3-6 4-6 5-6 6-6
すなわち (6+5+4+3+2+1)×4面
1-1
1-2 2-2
1-3 2-3 3-3
1-4 2-4 3-4 4-4
1-5 2-5 3-5 4-5 5-5
1-6 2-6 3-6 4-6 5-6 6-6
すなわち (6+5+4+3+2+1)×4面
343KAC
2018/05/12(土) 17:50:27.68ID:7sNFtIfC344デフォルトの名無しさん
2018/05/12(土) 18:04:42.08ID:TjVuoOYn345デフォルトの名無しさん
2018/05/12(土) 18:38:44.14 >>344
くっついている面の組み合わせ(サイコロを2つ振って出る目と同じ)×4回転
くっついている面の組み合わせ(サイコロを2つ振って出る目と同じ)×4回転
346デフォルトの名無しさん
2018/05/12(土) 18:57:16.30ID:TjVuoOYn >>345
あ、そうか。例えば1、6は6、1と同じか。
あ、そうか。例えば1、6は6、1と同じか。
347デフォルトの名無しさん
2018/05/12(土) 19:09:45.48ID:TjVuoOYn 6*7/2*4=6*7*2=84てことだな。
じゃ、あとは無理矢理全パターン出して全件チェックするブルートフォースなプログラムでもゆっくり作るとするか。
じゃ、あとは無理矢理全パターン出して全件チェックするブルートフォースなプログラムでもゆっくり作るとするか。
348347
2018/05/13(日) 03:37:21.95ID:YKXy/MBP 散々考えて作ったプログラムで 96 と結果が出てしまい、何がどう間違ってるのか探すの面倒なのでとりあえず休止。
またその内気が向いたらやってみよう。
またその内気が向いたらやってみよう。
349デフォルトの名無しさん
2018/05/13(日) 17:57:36.41ID:lW+v/TK4 よくある総当たり戦の試合数を求める問題の変形だろ
いくらなんでも算数レベルはさすがに・・・
いくらなんでも算数レベルはさすがに・・・
350デフォルトの名無しさん
2018/05/13(日) 19:10:48.15ID:IsC8XoQl 算数レベルだと不満があるみたいなので類題を
正五胞体の各面に1〜10の番号が振られたサイコロが2つある
2つの正五胞体の面を合わせて新たな多胞体を作るとき、
面の模様の組み合わせ合わせてを合わせて何通り作ることができるか求めよ
正五胞体の各面に1〜10の番号が振られたサイコロが2つある
2つの正五胞体の面を合わせて新たな多胞体を作るとき、
面の模様の組み合わせ合わせてを合わせて何通り作ることができるか求めよ
351デフォルトの名無しさん
2018/05/13(日) 20:08:59.23ID:lW+v/TK4 面を合わせる操作で胞はどうなるんだろう
模範解答が欲しいな
模範解答が欲しいな
352デフォルトの名無しさん
2018/05/13(日) 20:10:50.40ID:cJXb3A6I O(1)でない問題に挑みたい
353デフォルトの名無しさん
2018/05/13(日) 20:28:41.70ID:hMSQZ6aL 無理だろ
問題のクラスがどこに属するかを確かめてから……ってのは
問題のクラスがどこに属するかを確かめてから……ってのは
354デフォルトの名無しさん
2018/05/13(日) 20:48:58.34ID:HhTyaKjT 出題者がわからなくてどうする
355デフォルトの名無しさん
2018/05/13(日) 22:02:39.26 出題者は学校の宿題をコピペしてるだけなんだからそんなの分かるわけないだろw
356デフォルトの名無しさん
2018/05/13(日) 23:15:41.18ID:KchYOj5S 円周上の格子点を求めるプログラムをしこしこ作ってるが、
マルチスレッドで動かしたらPentium G6950とAtom x5-Z8350タブレットでほとんど変わらなくて(´・ω・`)
マルチスレッドで動かしたらPentium G6950とAtom x5-Z8350タブレットでほとんど変わらなくて(´・ω・`)
357デフォルトの名無しさん
2018/05/13(日) 23:18:59.24ID:VV8A9gRv どのお題?
358デフォルトの名無しさん
2018/05/13(日) 23:27:47.10ID:R9SlBBi+ これか
「自然数Nに対して、平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」
例)
x^2 + y^2 = 1の整数点は4つだがN=4の最小半径ではない。
(x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。 4点は(0,0) (1,0) (0,1) (1,1)
「自然数Nに対して、平面上の円で、その円周上の整数点がちょうどN個となる円の最小半径を求めよ」
例)
x^2 + y^2 = 1の整数点は4つだがN=4の最小半径ではない。
(x-0.5)^2 + (y-0.5)^2 = 0.5の方が小さい。 4点は(0,0) (1,0) (0,1) (1,1)
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 現役猟師・東出昌大、クマ被害続出も過熱する報道に「クマはそんな危ないもんじゃない」理由語る [muffin★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- さっっっっっっっっっっっっっっっっっむ!?!!?!?!?!!??!??!???!
- 日本の歴代総理大臣で1番ダメだった奴
- 高市政権「中国依存の経済から脱却する」?「それはダメーッ!」
- 4時だから窓から4回ちんこ出した
- クマどもが冬眠拒否
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
