16/03/16 11:48:35.59 j8iobkYx.net
>>362 Squeak/Pharo Smalltalk
| N animals cages ans |
N := 10.
animals := #(
(0 2 6 4 6 2 4 4 2 4) (2 0 4 2 2 2 2 2 2 6)
(6 4 0 2 6 8 8 6 4 8) (4 2 2 0 4 2 6 6 2 6)
(6 2 6 4 0 2 4 4 2 4) (2 2 8 2 2 0 6 6 6 8)
(4 2 8 6 4 6 0 6 6 4) (4 2 8 6 4 6 6 0 6 6)
(2 2 4 2 2 6 6 6 0 6) (4 6 8 6 4 8 4 6 6 0)).
cages := #(
(0 3 4 5 8 10 9 6 2 4) (3 0 4 4 7 9 9 8 5 9)
(4 4 0 2 4 7 5 4 4 8) (5 4 2 0 3 5 5 5 5 9)
(8 7 4 3 0 3 5 6 8 12) (10 9 7 5 3 0 4 7 10 14)
(9 9 5 5 5 4 0 3 8 11) (6 8 4 5 6 7 3 0 5 8)
(2 5 4 5 8 10 8 5 0 4) (4 9 8 9 12 14 11 8 4 0)).
ans := Set new -> Float infinity.
(1 to: N) permutationsDo: [:perm |
| sum |
sum := 0.
1 to: N do: [:i |
1 to: N do: [:j |
sum := ((animals at: (perm at: i)) at: (perm at: j)) * ((cages at: i) at: j) + sum]].
ans value = sum ifTrue: [ans key add: perm copy].
ans value > sum ifTrue: [ans := (Set with: perm copy) -> sum]].
^ans "=> a Set(#(6 9 3 8 7 4 5 1 10 2) #(6 9 3 8 7 4 1 5 10 2))->2160 "