廣島です.
> > オリジナルの問題は Trial & Error の過程を経ずに解けました.
>
> みたいですね。
>
> ルールを落してしまっていたんですね…。(-_-;
> うむぅ
でもまあ,気づかなかったおかげで,
Trial & Error の過程のコードを書くことになって,
オリジナル以外の問題にも対応できるようになったのだから,
あながち悪いことでもないと思い直しています.<< 自画自賛気味?
Ruby 版の改良場所は
class Puzzle の initialize 関数に 1 行追加
def initialize(cell = CELL.map { |r| r.map { |c| Cell.new } })
@cell = cell
0.upto(5) do |x|
0.upto(5) do |y|
(x + 1).upto(5) { |i| same_column(@cell[i][y], @cell[x][y]) }
(y + 1).upto(5) { |j| same_raw(@cell[x][j], @cell[x][y]) }
end
end
0.step(4, 2) do |i|
1.step(3, 2) do |j|
mate(@cell[i][j], @cell[i][j + 1])
end
mate(@cell[i][0], @cell[i][5]) # この行を追加
end
1.step(5, 2) do |i|
0.step(4, 2) do |j|
mate(@cell[i][j], @cell[i][j + 1])
end
end
end
Scheme 版は(一般公開していないけど),
init-puzzle 関数に 2 行追加
(define (init-puzzle puzzle)
(define (make a b)
(do-list (i a)
(do-list (j b)
(mate (cell-ref puzzle i j)
(cell-ref puzzle i (+ j 1))))))
(do-upto (x 6)
(do-upto (y 6)
(let ((xy (cell-ref puzzle x y)))
(do-upto (i (+ x 1) 6)
(same-column (cell-ref puzzle i y) xy))
(do-upto (j (+ y 1) 6)
(same-raw (cell-ref puzzle x j) xy)))))
(make '(0 2 4) '(1 3))
(make '(1 3 5) '(0 2 4))
(do-list (i '(0 2 4)) (mate (cell-ref puzzle i 0) ; この行と
(cell-ref puzzle i 5))) ; この行を追加
puzzle)
-----------------------------
廣島 勉
(tsutomu@...)