This commit is contained in:
Ingy döt Net 2013-04-10 21:29:02 -07:00
parent 764da6cbbb
commit db842d013d
19005 changed files with 197040 additions and 7 deletions

View file

@ -0,0 +1,50 @@
'names numbers'=:|:".;._2]0 :0
'map'; 9 150 1
'compass'; 13 35 1
'water'; 153 200 2
'sandwich'; 50 60 2
'glucose'; 15 60 2
'tin'; 68 45 3
'banana'; 27 60 3
'apple'; 39 40 3
'cheese'; 23 30 1
'beer'; 52 10 3
'suntan cream'; 11 70 1
'camera'; 32 30 1
'T-shirt'; 24 15 2
'trousers'; 48 10 2
'umbrella'; 73 40 1
'waterproof trousers'; 42 70 1
'waterproof overclothes'; 43 75 1
'note-case'; 22 80 1
'sunglasses'; 7 20 1
'towel'; 18 12 2
'socks'; 4 50 1
'book'; 30 10 2
)
'weights values pieces'=:|:numbers
decode=: (pieces+1)&#:
pickBest=:4 :0
NB. given a list of options, return the best option(s)
n=. decode y
weight=. n+/ .*weights
value=. (x >: weight) * n+/ .*values
(value = >./value)#y
)
bestCombo=:3 :0
limit=. */pieces+1
i=. 0
step=. 1e6
best=. ''
while.i<limit do.
best=. 400 pickBest best,(#~ limit&>)i+i.step
i=. i+step
end.
best
)
bestCombo''
978832641

View file

@ -0,0 +1,18 @@
decode 978832641
1 1 1 0 2 0 3 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0
(0<decode 978832641) # (":,.decode 978832641),.' ',.names
1 map
1 compass
1 water
2 glucose
3 banana
1 cheese
1 suntan cream
1 waterproof overclothes
1 note-case
1 sunglasses
1 socks
weights +/ .* decode 978832641
396
values +/ .* decode 978832641
1010

View file

@ -0,0 +1,27 @@
dyn=:3 :0
m=. 0$~1+400,+/pieces NB. maximum value cache
b=. m NB. best choice cache
opts=.+/\0,pieces NB. distinct item counts before each piece
P=. */\1+0,pieces NB. distinct possibilities before each piece
for_w.1+i.400 do.
for_j.i.#pieces do.
n=. i.1+j{pieces NB. possible counts for this piece
W=. n*j{weights NB. how much they weigh
s=. w>:W NB. permissible options
v=. s*n*j{values NB. consequent values
base=. j{opts NB. base index for these options
I=. <"1 w,.n+base NB. consequent indices
i0=. <w,base NB. status quo index
iN=. <"1 (w-s*W),.base NB. predecessor indices
M=. >./\(m{~i0)>.v+m{~iN NB. consequent maximum values
C=. (n*j{P)+b{~iN NB. unique encoding for each option
B=. >./\(b{~i0)>. C * 2 ~:/\ 0,M NB. best options, so far
m=. M I} m NB. update with newly computed maxima
b=. B I} b NB. same for best choice
end.
end.
|.(1+|.pieces)#:{:{:b
)
dyn''
1 1 1 0 2 0 3 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0