プログラミングのお題スレです。
前スレ
プログラミングのお題スレ 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
203デフォルトの名無しさん
2018/05/02(水) 02:57:52.71ID:MBc9Gfy6 出題時の注意>>4
204デフォルトの名無しさん
2018/05/02(水) 02:59:10.33ID:bQ3xZw0Z そら言えてる
205デフォルトの名無しさん
2018/05/02(水) 03:36:28.18ID:XZO+Bco0 お題が流れたみたいなのでリンクまとめ
>>11
"073:0" -> 18
"07362:450" -> 36
"06464:36470" -> 42
"0827171:28480" -> 66
"0737491:28180" -> 146
"05374734372747484:184618186912120" -> ?
>>40
[-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7]
-> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8]
>>77
"213cba213cba213cba" -> "213aaa213bbb213ccc"
>>102
gccgc -> 2
ggggggg -> 0
cppcppppccpppppc -> 5
cppcppppccpgpppc -> 0
>>117
odaiodai -> 2
ooddaai -> 1
idao -> 0
ododoadioadioadioadioadioadiodaioadodioadiaodi -> ?
>>11
"073:0" -> 18
"07362:450" -> 36
"06464:36470" -> 42
"0827171:28480" -> 66
"0737491:28180" -> 146
"05374734372747484:184618186912120" -> ?
>>40
[-1, 2, 8, -9, -2, -3, -6, -10, -8, 5, 7, 9, 7]
-> [-1, -9, -3, 5, 7, 9, 7, 2, 8, -2, -6, -10, -8]
>>77
"213cba213cba213cba" -> "213aaa213bbb213ccc"
>>102
gccgc -> 2
ggggggg -> 0
cppcppppccpppppc -> 5
cppcppppccpgpppc -> 0
>>117
odaiodai -> 2
ooddaai -> 1
idao -> 0
ododoadioadioadioadioadioadiodaioadodioadiaodi -> ?
206デフォルトの名無しさん
2018/05/02(水) 05:46:42.10ID:hUDFoTxj お題:Hello, World!を10回出力してください。ただし、偶数文字を小文字、奇数文字を大文字にすること。さらに3の倍数の文字をランダムな英字にすること。
207デフォルトの名無しさん
2018/05/02(水) 07:40:02.20ID:bQ3xZw0Z >>206 Perl5
use feature 'say';
@s = split'','Hello, World!';
@Az = ('A'..'Z', 'a'..'z');
for $i (0..9) {
do {$s[$_ - 1] = $Az[int(rand(@Az))]
if $_ % 3 == 0} for 1..@s;
my @t;
push @t, $i % 2 ? lc $c : uc $c
while ($i, $c) = each @s;
say @t;
}
実行結果
$ perl 11_206.pl
HeHlOg wQrLz!
HeOlOp wOrLo!
HeAlOh wMrLf!
HeZlOs wJrLz!
HeElOh wBrLg!
HeBlOa wIrLy!
HeFlOw wCrLb!
HeTlOc wSrLp!
HeOlOm wNrLx!
HeJlOt wSrLl!
use feature 'say';
@s = split'','Hello, World!';
@Az = ('A'..'Z', 'a'..'z');
for $i (0..9) {
do {$s[$_ - 1] = $Az[int(rand(@Az))]
if $_ % 3 == 0} for 1..@s;
my @t;
push @t, $i % 2 ? lc $c : uc $c
while ($i, $c) = each @s;
say @t;
}
実行結果
$ perl 11_206.pl
HeHlOg wQrLz!
HeOlOp wOrLo!
HeAlOh wMrLf!
HeZlOs wJrLz!
HeElOh wBrLg!
HeBlOa wIrLy!
HeFlOw wCrLb!
HeTlOc wSrLp!
HeOlOm wNrLx!
HeJlOt wSrLl!
208デフォルトの名無しさん
2018/05/02(水) 09:59:45.49ID:hcdKMJ5x >>206 Squeak/Pharo Smalltalk
Transcript open.
10 timesRepeat: [
| hello |
hello := 'Hello, World!' collectWithIndex: [:chr :idx |
((idx isDivisibleBy: 3) ifTrue: [Character alphabet atRandom] ifFalse: [chr])
perform: (idx even ifTrue: [#asLowercase] ifFalse: [#asUppercase])
].
Transcript cr; show: hello
]
=> HeYlOz wJrLp!
HeNlOe wArLr!
HeBlOn wWrLi!
HeSlOx wOrLk!
HeKlOy wRrLb!
HeIlOs wJrLw!
HeMlOd wGrLm!
HeElOz wLrLf!
HeJlOw wUrLr!
HeTlOe wMrLy!
Transcript open.
10 timesRepeat: [
| hello |
hello := 'Hello, World!' collectWithIndex: [:chr :idx |
((idx isDivisibleBy: 3) ifTrue: [Character alphabet atRandom] ifFalse: [chr])
perform: (idx even ifTrue: [#asLowercase] ifFalse: [#asUppercase])
].
Transcript cr; show: hello
]
=> HeYlOz wJrLp!
HeNlOe wArLr!
HeBlOn wWrLi!
HeSlOx wOrLk!
HeKlOy wRrLb!
HeIlOs wJrLw!
HeMlOd wGrLm!
HeElOz wLrLf!
HeJlOw wUrLr!
HeTlOe wMrLy!
209デフォルトの名無しさん
2018/05/02(水) 10:26:22.57ID:PqZlWADT210デフォルトの名無しさん
2018/05/02(水) 11:55:19.15211デフォルトの名無しさん
2018/05/02(水) 12:51:34.17ID:lkl981AK お題
N項目のレーダーチャートを考える。
各項目の点数が配列A[N]で与えられるので、
項目の並べ方を調整して、レーダーチャートの面積を最大化せよ。
※レーダーチャートの形状は正N角形であり、A[i]は中心からの距離を意味する。
{4,3,2,1,0}
=> 10.9371 //{0,1,3,4,2}
{10,0,0,10,10,0,10,10}
=> 141.421 //{0,0,0,10,10,10,10,10}
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
=> 280.698
N項目のレーダーチャートを考える。
各項目の点数が配列A[N]で与えられるので、
項目の並べ方を調整して、レーダーチャートの面積を最大化せよ。
※レーダーチャートの形状は正N角形であり、A[i]は中心からの距離を意味する。
{4,3,2,1,0}
=> 10.9371 //{0,1,3,4,2}
{10,0,0,10,10,0,10,10}
=> 141.421 //{0,0,0,10,10,10,10,10}
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
=> 280.698
212デフォルトの名無しさん
2018/05/02(水) 12:58:12.60ID:Zqd7NSI/ >>206 Emacs Lisp
(defun* f (a &aux (b 0))
(map 'string (lambda (c) (let ((d (if (= (% (incf b) 3) 0) (+ ?a (random 26)) c))) (if (oddp b) (upcase d) (downcase d)))) a))
(mapc (lambda (x) (princ (funcall #'f x)) (terpri)) (make-list 10 "Hello, World!"))
HeElOf wBrLb!
HeAlOj wYrLk!
HeZlOz wQrLd!
HeBlOh wIrLm!
HeMlOy wIrLb!
HeZlOo wTrLk!
HeRlOq wErLv!
HeFlOn wKrLq!
HeAlOg wQrLv!
HeFlOa wRrLi!
(defun* f (a &aux (b 0))
(map 'string (lambda (c) (let ((d (if (= (% (incf b) 3) 0) (+ ?a (random 26)) c))) (if (oddp b) (upcase d) (downcase d)))) a))
(mapc (lambda (x) (princ (funcall #'f x)) (terpri)) (make-list 10 "Hello, World!"))
HeElOf wBrLb!
HeAlOj wYrLk!
HeZlOz wQrLd!
HeBlOh wIrLm!
HeMlOy wIrLb!
HeZlOo wTrLk!
HeRlOq wErLv!
HeFlOn wKrLq!
HeAlOg wQrLv!
HeFlOa wRrLi!
213デフォルトの名無しさん
2018/05/02(水) 16:46:53.87ID:Zqd7NSI/ >>211 Emacs Lisp
(defun* f (a &aux b c)
(loop for i from 0 below (length a) do
(if (< i 3)
(setq b (append b (list (nth i a))))
(dotimes (n (length b))
(push (cons (+ (abs (- (nth n b) (nth i a))) (abs (- (nth (% (1+ n) (length b)) b) (nth i a)))) n) c))
(let ((d (1+ (cdar (sort (copy-seq c) (lambda (a b) (< (car a) (car b))))))))
(setq b (append (subseq b 0 d) (list (nth i a)) (nthcdr d b))))))
b)
(defun g (a)
(flet ((b (c d e)
(when (> c d) (rotatef c d))
(if (= d 0) 0.0 (* d (sin (/ pi e)) d (cos (/ pi e)) c (/ (float d))))))
(let ((h (length a)) (i 0.0))
(dotimes (n h)
(incf i (apply #'b (list (nth n a) (nth (% (1+ n) h) a) h))))
i)))
(f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) => (1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3)
(g (f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) => 280.69829763979334
(defun* f (a &aux b c)
(loop for i from 0 below (length a) do
(if (< i 3)
(setq b (append b (list (nth i a))))
(dotimes (n (length b))
(push (cons (+ (abs (- (nth n b) (nth i a))) (abs (- (nth (% (1+ n) (length b)) b) (nth i a)))) n) c))
(let ((d (1+ (cdar (sort (copy-seq c) (lambda (a b) (< (car a) (car b))))))))
(setq b (append (subseq b 0 d) (list (nth i a)) (nthcdr d b))))))
b)
(defun g (a)
(flet ((b (c d e)
(when (> c d) (rotatef c d))
(if (= d 0) 0.0 (* d (sin (/ pi e)) d (cos (/ pi e)) c (/ (float d))))))
(let ((h (length a)) (i 0.0))
(dotimes (n h)
(incf i (apply #'b (list (nth n a) (nth (% (1+ n) h) a) h))))
i)))
(f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) => (1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3)
(g (f '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) => 280.69829763979334
216デフォルトの名無しさん
2018/05/02(水) 17:52:43.41ID:ja0hTifx >>211
J
山型に並べるだけ。
証明は略
(谷がある並び順は谷底を移動してより大きく出来ることが示せる。
谷がない場合、頂上から左右に振り分けて行くのが最大と示せる)
NB. sin α
sinA =: 1&o.@((o.2)&%)@#
NB. ズラして掛けた総和
s =: +/@(*(}.@,{.))"1
NB. 山型に並べる
raz =: (/:[)/:(/:+/@(* ,~/"1)@(*\)@i.@#)
NB. 山型に並べてズラして掛けた総和にsinα掛けて半分にする
ans =: -:@(sinA*(s@raz))
1行で書くと
ans =: -:@(1&o.@((o.2)&%)@#*+/@(*(}.@, {.))"1@((/:[)/:(/:+/@(*,~/"1)@(*\)@i.@#)))
実行例
ans 4 3 2 1 0
10.9371
ans 10 0 0 10 10 0 10 10
106.066
ans 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
280.698
https://%62it.ly/2jlIjeo
J
山型に並べるだけ。
証明は略
(谷がある並び順は谷底を移動してより大きく出来ることが示せる。
谷がない場合、頂上から左右に振り分けて行くのが最大と示せる)
NB. sin α
sinA =: 1&o.@((o.2)&%)@#
NB. ズラして掛けた総和
s =: +/@(*(}.@,{.))"1
NB. 山型に並べる
raz =: (/:[)/:(/:+/@(* ,~/"1)@(*\)@i.@#)
NB. 山型に並べてズラして掛けた総和にsinα掛けて半分にする
ans =: -:@(sinA*(s@raz))
1行で書くと
ans =: -:@(1&o.@((o.2)&%)@#*+/@(*(}.@, {.))"1@((/:[)/:(/:+/@(*,~/"1)@(*\)@i.@#)))
実行例
ans 4 3 2 1 0
10.9371
ans 10 0 0 10 10 0 10 10
106.066
ans 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
280.698
https://%62it.ly/2jlIjeo
217デフォルトの名無しさん
2018/05/02(水) 18:09:55.15ID:ja0hTifx >>211
J 一応総当たりも (sinA, s は同じ)
all =: A.~(i.@!@<:@#)
min =: >./
ans2 =: -:@((sinA)*(min@(s@all)))
実行例
ans2 4 3 2 1 0
10.9371
ans2 10 0 0 10 10 0 10 10
141.421
ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|out of memory: all
| ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
J 一応総当たりも (sinA, s は同じ)
all =: A.~(i.@!@<:@#)
min =: >./
ans2 =: -:@((sinA)*(min@(s@all)))
実行例
ans2 4 3 2 1 0
10.9371
ans2 10 0 0 10 10 0 10 10
141.421
ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|out of memory: all
| ans2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
218デフォルトの名無しさん
2018/05/02(水) 18:10:22.50ID:TAWRfgOr219デフォルトの名無しさん
2018/05/02(水) 18:11:53.98ID:ja0hTifx あれ?バグってるなこれ
総当たりの方は取り消します
総当たりの方は取り消します
220デフォルトの名無しさん
2018/05/02(水) 18:20:29.66ID:ja0hTifx 違った
山型に並べる方を取り消します、だった。
山型に並べる方を取り消します、だった。
221デフォルトの名無しさん
2018/05/02(水) 18:27:52.12ID:ja0hTifx >>216
正しくはこうでした
sinA =: 1&o.@((o.2)&%)@#
s =: +/@(*(}.@,{.))"1
raz =: ((\: [) {~ (/: (* <:@(2&*)@(2&|)))@i.@#)
ans =: -:@(sinA*(s@raz))
1行にするのは略
https://%62it.ly/2w3XF0m
正しくはこうでした
sinA =: 1&o.@((o.2)&%)@#
s =: +/@(*(}.@,{.))"1
raz =: ((\: [) {~ (/: (* <:@(2&*)@(2&|)))@i.@#)
ans =: -:@(sinA*(s@raz))
1行にするのは略
https://%62it.ly/2w3XF0m
222デフォルトの名無しさん
2018/05/02(水) 19:04:01.98ID:intU8xfF223デフォルトの名無しさん
2018/05/02(水) 19:12:21.47ID:intU8xfF224デフォルトの名無しさん
2018/05/02(水) 19:28:18.08ID:bfgs8qRD225デフォルトの名無しさん
2018/05/02(水) 19:30:41.81ID:intU8xfF226デフォルトの名無しさん
2018/05/02(水) 20:02:43.46ID:ja0hTifx >>225
「大きい方から順に取って、既存の列の大きい端の外側に配置」を繰り返せばいい
0 1 2 3 4 のときは
4
4, 3
2, 4, 3
2, 4, 3, 1
0, 2, 4, 3, 1
この時の面積は
1/2・sin 72° ・(0*2+2*4+4*3+3*1+1*0) = 10.9371
「大きい方から順に取って、既存の列の大きい端の外側に配置」を繰り返せばいい
0 1 2 3 4 のときは
4
4, 3
2, 4, 3
2, 4, 3, 1
0, 2, 4, 3, 1
この時の面積は
1/2・sin 72° ・(0*2+2*4+4*3+3*1+1*0) = 10.9371
227デフォルトの名無しさん
2018/05/02(水) 20:20:59.85ID:E/2WxUaU ググったら公式出てきた
http://chaoxuprime.com/posts/2012-08-08-maximize-the-area-of-a-radar-chart.html
プログラムでやるなら、数列の前項後項の積和を最大化する方針がいいのかな
http://chaoxuprime.com/posts/2012-08-08-maximize-the-area-of-a-radar-chart.html
プログラムでやるなら、数列の前項後項の積和を最大化する方針がいいのかな
228225
2018/05/02(水) 20:32:00.70ID:QUr6vWwN 面倒なので証明しないで全パターンの面積を求めて最大のやつを出すように作ろうかと思ったが、
腹が減ったので飯食ってから考えよう。(というかこうするならほとんど考える必要ないなこれw)
腹が減ったので飯食ってから考えよう。(というかこうするならほとんど考える必要ないなこれw)
230デフォルトの名無しさん
2018/05/02(水) 20:44:42.35ID:ja0hTifx >>227
そのπってのが真ん中から左右に配置して行くインデックス列。
でその証明は不完全(*1)だけど結論は合ってる。
(*1)
n-1個の時の最大になる列のどこかに
n番目の数を挿入すればn個の時の解が得られる、
ということを証明せずに利用している。
小さくするには山谷の数を多くする(小さいのと大きいのがなるべく隣接するように置く)
ってことは直感的にわかるんだけど具体的な構成法は考察がいるな
そのπってのが真ん中から左右に配置して行くインデックス列。
でその証明は不完全(*1)だけど結論は合ってる。
(*1)
n-1個の時の最大になる列のどこかに
n番目の数を挿入すればn個の時の解が得られる、
ということを証明せずに利用している。
小さくするには山谷の数を多くする(小さいのと大きいのがなるべく隣接するように置く)
ってことは直感的にわかるんだけど具体的な構成法は考察がいるな
231デフォルトの名無しさん
2018/05/02(水) 22:20:26.25ID:hcdKMJ5x >>211 Squeak/Pharo Smalltalk
| fn |
fn := [:arr |
| strm res |
strm := arr sorted readStream.
res := OrderedCollection withAll: (strm next: 3).
[strm atEnd] whileFalse: [
| next foundPos |
next := strm next.
foundPos := (1 to: res size) detectMax: [:idx |
| a1 a2 |
(a1 := res at: idx) + (a2 := res atWrap: idx+1) * next - (a1 * a2)].
res add: next afterIndex: foundPos
].
res := res asArray.
(res * (2 * Float pi / res size) sin * ({res last}, res allButLast) / 2) sum -> res
].
fn value: #(4 3 2 1 0).
"=> 10.937149937394265->#(0 1 3 4 2) "
fn value: #(10 0 0 10 10 0 10 10).
"=> 141.42135623730948->#(0 10 10 10 10 10 0 0) "
fn value: #(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
"=> 280.6982976397934->#(1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3) "
| fn |
fn := [:arr |
| strm res |
strm := arr sorted readStream.
res := OrderedCollection withAll: (strm next: 3).
[strm atEnd] whileFalse: [
| next foundPos |
next := strm next.
foundPos := (1 to: res size) detectMax: [:idx |
| a1 a2 |
(a1 := res at: idx) + (a2 := res atWrap: idx+1) * next - (a1 * a2)].
res add: next afterIndex: foundPos
].
res := res asArray.
(res * (2 * Float pi / res size) sin * ({res last}, res allButLast) / 2) sum -> res
].
fn value: #(4 3 2 1 0).
"=> 10.937149937394265->#(0 1 3 4 2) "
fn value: #(10 0 0 10 10 0 10 10).
"=> 141.42135623730948->#(0 10 10 10 10 10 0 0) "
fn value: #(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
"=> 280.6982976397934->#(1 2 4 6 8 10 12 14 16 15 13 11 9 7 5 3) "
232デフォルトの名無しさん
2018/05/03(木) 00:37:28.69ID:hmU6w2gD >>230 最小を目指して, 山谷の数を多くしてみました.
(defun f2 (a)
(let* ((b (sort (copy-seq a) #'<))
(c (/ (length b) 2))
(d (let ((e (subseq b 0 c))) (apply #'append (mapcar (lambda (x) (let ((y (pop e))) (if y (list x y) (list x)))) (reverse (subseq b c))))))
(h))
(loop for i from 0 below (length d) do (setq h (if (or (= (% i 4) 1) (= (% i 4) 2)) (append h (list (nth i d))) (append (list (nth i d)) h))))
h))
(f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))
(8 10 6 12 4 14 2 16 1 15 3 13 5 11 7 9)
(g (f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)))
157.47423241823444
(defun f2 (a)
(let* ((b (sort (copy-seq a) #'<))
(c (/ (length b) 2))
(d (let ((e (subseq b 0 c))) (apply #'append (mapcar (lambda (x) (let ((y (pop e))) (if y (list x y) (list x)))) (reverse (subseq b c))))))
(h))
(loop for i from 0 below (length d) do (setq h (if (or (= (% i 4) 1) (= (% i 4) 2)) (append h (list (nth i d))) (append (list (nth i d)) h))))
h))
(f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))
(8 10 6 12 4 14 2 16 1 15 3 13 5 11 7 9)
(g (f2 '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)))
157.47423241823444
233デフォルトの名無しさん
2018/05/03(木) 00:59:37.08ID:SwM9YWB0234デフォルトの名無しさん
2018/05/03(木) 01:32:09.14 >>233
無為に捨てられる何千もの’Hello, World!’がかわいそうすぎね?(´;ω;`)
無為に捨てられる何千もの’Hello, World!’がかわいそうすぎね?(´;ω;`)
235デフォルトの名無しさん
2018/05/03(木) 01:32:43.19ID:rKkc5eBg >>211 Perl5
https://ideone.com/cMJGDR
自力で動的計画法による解法を考えようとしていたけど、
>>227で紹介されたWEBの解法に勝る見込みが無さそうなので
思考を停止してWEBの解法を愚直に実装したものです
https://ideone.com/cMJGDR
自力で動的計画法による解法を考えようとしていたけど、
>>227で紹介されたWEBの解法に勝る見込みが無さそうなので
思考を停止してWEBの解法を愚直に実装したものです
236デフォルトの名無しさん
2018/05/03(木) 09:34:11.17ID:dYPbvGoR 【お題】
与えられた整数のリストで、
2つの要素の和が100になるすべての組を列挙せよ。
例:
[1, 99, 20]
-> [[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
-> [[40, 60], [-16, 116], [-81, 181]]
[100, 0, 100, 0]
-> [[0, 100], [0, 100], [0, 100], [0, 100]]
与えられた整数のリストで、
2つの要素の和が100になるすべての組を列挙せよ。
例:
[1, 99, 20]
-> [[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
-> [[40, 60], [-16, 116], [-81, 181]]
[100, 0, 100, 0]
-> [[0, 100], [0, 100], [0, 100], [0, 100]]
237デフォルトの名無しさん
2018/05/03(木) 10:12:06.60ID:6SfrUic2238デフォルトの名無しさん
2018/05/03(木) 10:13:33.58ID:ngB6qDho239デフォルトの名無しさん
2018/05/03(木) 10:19:06.64ID:m6mdbiEz240デフォルトの名無しさん
2018/05/03(木) 10:45:51.16ID:uFV+Z8SY >>236 Squeak/Pharo Smalltalk
| fn |
fn := [:arr |
| bag |
bag := Bag new.
arr combinations: 2 atATimeDo: [:comb |
comb sum = 100 ifTrue: [bag add: comb sorted]].
bag asArray
].
fn value: #(1 99 20).
"=> #((1 99)) "
fn value: #(62 116 181 86 60 98 -16 73 131 16 80 -81 40).
"=> #((-81 181) (-16 116) (40 60)) "
fn value: #(100 0 100 0).
"=> #((0 100) (0 100) (0 100) (0 100)} "
| fn |
fn := [:arr |
| bag |
bag := Bag new.
arr combinations: 2 atATimeDo: [:comb |
comb sum = 100 ifTrue: [bag add: comb sorted]].
bag asArray
].
fn value: #(1 99 20).
"=> #((1 99)) "
fn value: #(62 116 181 86 60 98 -16 73 131 16 80 -81 40).
"=> #((-81 181) (-16 116) (40 60)) "
fn value: #(100 0 100 0).
"=> #((0 100) (0 100) (0 100) (0 100)} "
241デフォルトの名無しさん
2018/05/03(木) 11:34:54.61242デフォルトの名無しさん
2018/05/03(木) 13:12:32.47ID:N6jONgbj >>236 Perl5
use Data::Dump 'dump';
for ([1, 99, 20],
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40],
[100, 0, 100, 0]) {
sub c {my $d = shift;
my @l = c(@_) if 1 < @_;
@l, map{[$d, $_]} @_};
@s = grep{100 == $$_[0]+$$_[1]} c @$_;
print dump($_)."\n->".dump(\@s)."\n";
}
実行結果
$ perl 11_236.pl
[1, 99, 20]
->[[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
->[[60, 40], [181, -81], [116, -16]]
[100, 0, 100, 0]
->[[100, 0], [0, 100], [100, 0], [100, 0]]
※実行にはperlのData::Dumpモジュールが必要ですが、
Ideoneのperl 24にはインストールされてないようでした
use Data::Dump 'dump';
for ([1, 99, 20],
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40],
[100, 0, 100, 0]) {
sub c {my $d = shift;
my @l = c(@_) if 1 < @_;
@l, map{[$d, $_]} @_};
@s = grep{100 == $$_[0]+$$_[1]} c @$_;
print dump($_)."\n->".dump(\@s)."\n";
}
実行結果
$ perl 11_236.pl
[1, 99, 20]
->[[1, 99]]
[62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40]
->[[60, 40], [181, -81], [116, -16]]
[100, 0, 100, 0]
->[[100, 0], [0, 100], [100, 0], [100, 0]]
※実行にはperlのData::Dumpモジュールが必要ですが、
Ideoneのperl 24にはインストールされてないようでした
243デフォルトの名無しさん
2018/05/03(木) 13:15:16.16ID:ngB6qDho244デフォルトの名無しさん
2018/05/03(木) 14:31:25.30ID:M52LYEAa >>236 javascript
var f = l => {
console.log(
l.reduce((acc, m, i, ary) =>
[
...acc,
...ary.slice(i+1)
.filter(n => m + n == 100)
.map(n => [m, n])
],
[]
)
)
}
f([1, 99, 20])
//=> [[1, 99]]
f([62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40])
//=> [[116, -16], [181, -81], [60, 40]]
f([100, 0, 100, 0])
//=> [[100, 0], [100, 0], [0, 100], [100, 0]]
var f = l => {
console.log(
l.reduce((acc, m, i, ary) =>
[
...acc,
...ary.slice(i+1)
.filter(n => m + n == 100)
.map(n => [m, n])
],
[]
)
)
}
f([1, 99, 20])
//=> [[1, 99]]
f([62, 116, 181, 86, 60, 98, -16, 73, 131, 16, 80, -81, 40])
//=> [[116, -16], [181, -81], [60, 40]]
f([100, 0, 100, 0])
//=> [[100, 0], [100, 0], [0, 100], [100, 0]]
245デフォルトの名無しさん
2018/05/03(木) 14:55:50.12ID:cjR1ezGU Smalltalk のメソッドの充実っぷりには毎回感心
246デフォルトの名無しさん
2018/05/03(木) 18:28:55.09ID:qi+bYfi0 それなりの規模の処理系(GUI付きOSモドキ)をセルフホスティングで構築・維持していると
イディオムがイディオムとして認識・共有されやすく、さらにメソッドとしてまとめられやすいのかも
たとえばスクリプト言語処理系でしかないGNU Smalltalkはあまり便利メソッドが増える感じがしないので
イディオムがイディオムとして認識・共有されやすく、さらにメソッドとしてまとめられやすいのかも
たとえばスクリプト言語処理系でしかないGNU Smalltalkはあまり便利メソッドが増える感じがしないので
247デフォルトの名無しさん
2018/05/04(金) 19:54:42.66ID:4Zt1BODM お題
10,000個の単純変数に1から10,000の整数を代入する
10,000個の単純変数に1から10,000の整数を代入する
248デフォルトの名無しさん
2018/05/04(金) 20:34:39.46ID:6j9W/G+p >>247 Ruby
(1..10000).each{|i|instance_variable_set("@v#{i}", i}
(1..10000).each{|i|instance_variable_set("@v#{i}", i}
249デフォルトの名無しさん
2018/05/04(金) 20:41:53.19ID:LfImqqRO250デフォルトの名無しさん
2018/05/04(金) 20:52:57.61ID:LfImqqRO251デフォルトの名無しさん
2018/05/04(金) 21:16:29.34ID:sij7cbOA252デフォルトの名無しさん
2018/05/04(金) 21:23:10.57ID:sij7cbOA >>250
シェルもperlみたいにeval使えば簡単だと思うよ。その他の言語も同様。
てかこれ、インタープリタの言語にはできてもコンパイルする言語の場合は普通の方法ではできないんじゃないかな。
トリッキーな方法使ってようやっとできるかも知れないって感じじゃないだろうか。
シェルもperlみたいにeval使えば簡単だと思うよ。その他の言語も同様。
てかこれ、インタープリタの言語にはできてもコンパイルする言語の場合は普通の方法ではできないんじゃないかな。
トリッキーな方法使ってようやっとできるかも知れないって感じじゃないだろうか。
253デフォルトの名無しさん
2018/05/04(金) 21:49:18.32 Cプリプロセッサでもやろうと思えばできるけど面倒だからやらない
254デフォルトの名無しさん
2018/05/04(金) 21:57:55.58ID:mhxe2Hc6255デフォルトの名無しさん
2018/05/04(金) 22:02:19.57ID:sij7cbOA >>254
問題の意味がわからん
問題の意味がわからん
256デフォルトの名無しさん
2018/05/04(金) 23:16:59.35 >>255
分からないときは好きに解釈していいのがこのスレのルール
分からないときは好きに解釈していいのがこのスレのルール
257デフォルトの名無しさん
2018/05/05(土) 00:33:22.15ID:1BpKS+ks >>254 Perl5
sub f {pop, shift, @_ ? f(@_) : ()}
sub g {@_ ? do{my $a = shift; shift, g(@_), $a} : ()}
use feature 'say';
sub pai {
say "@pai";
@pai = f(@pai); say "@pai";
@pai = g(@pai); say "@pai";
}
@pai = qw{1 2 3 4 5 6}; &pai;
@pai = qw{a b c d e f}; &pai;
実行結果
$ perl 11_254_1.pl
1 2 3 4 5 6
6 1 5 2 4 3
1 2 3 4 5 6
a b c d e f
f a e b d c
a b c d e f
sub f {pop, shift, @_ ? f(@_) : ()}
sub g {@_ ? do{my $a = shift; shift, g(@_), $a} : ()}
use feature 'say';
sub pai {
say "@pai";
@pai = f(@pai); say "@pai";
@pai = g(@pai); say "@pai";
}
@pai = qw{1 2 3 4 5 6}; &pai;
@pai = qw{a b c d e f}; &pai;
実行結果
$ perl 11_254_1.pl
1 2 3 4 5 6
6 1 5 2 4 3
1 2 3 4 5 6
a b c d e f
f a e b d c
a b c d e f
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.65■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 【卓球】早田ひな、「総額100万スられた」「ずっと憧れていたスペインとイタリア…」ヨーロッパ旅行で悲劇 スリ被害を告白 [muffin★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪★2
- 産経新聞「高市早苗の答弁さぁ……思慮が足りてなくね?官僚と詰めずに思いつきで話しているでしょ」 [175344491]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【画像】外務省局長「この度はうちの🦎がすみません…」中国「……」 [165981677]
- 【雑談】暇人集会所part18
- 外務省局長、よくわからないまま帰国へ [834922174]
