75 lines
1.2 KiB
Plaintext
75 lines
1.2 KiB
Plaintext
global grid[] blen w h cnt .
|
|
dir[][] = [ [ 0 -1 ] [ -1 0 ] [ 0 1 ] [ 1 0 ] ]
|
|
#
|
|
proc walk y x .
|
|
if y = 0 or y = h or x = 0 or x = w
|
|
cnt += 2
|
|
return
|
|
.
|
|
t = y * (w + 1) + x
|
|
grid[t] += 1
|
|
grid[blen - t] += 1
|
|
for i to 4
|
|
dx = dir[i][1]
|
|
dy = dir[i][2]
|
|
d = dx + dy * (w + 1)
|
|
if grid[t + d] = 0
|
|
walk y + dy x + dx
|
|
.
|
|
.
|
|
grid[t] -= 1
|
|
grid[blen - t] -= 1
|
|
.
|
|
proc solve hh ww recur .
|
|
w = ww
|
|
h = hh
|
|
if h mod 2 = 1 : swap h w
|
|
if h mod 2 = 1
|
|
cnt = 0
|
|
return
|
|
.
|
|
if w = 1
|
|
cnt = 1
|
|
return
|
|
.
|
|
if w = 2
|
|
cnt = h
|
|
return
|
|
.
|
|
if h = 2
|
|
cnt = w
|
|
return
|
|
.
|
|
cy = h div 2 ; cx = w div 2
|
|
blen = (h + 1) * (w + 1)
|
|
grid[] = [ ]
|
|
len grid[] blen
|
|
blen -= 1
|
|
if recur = 1
|
|
cnt = 0
|
|
.
|
|
for x = cx + 1 to w - 1
|
|
t = cy * (w + 1) + x
|
|
grid[t] = 1
|
|
grid[blen - t] = 1
|
|
walk cy - 1 x
|
|
.
|
|
cnt += 1
|
|
if h = w
|
|
cnt *= 2
|
|
elif w mod 2 = 0 and recur = 1
|
|
solve w h 0
|
|
.
|
|
.
|
|
proc main .
|
|
for y = 1 to 8
|
|
for x = 1 to y
|
|
if x mod 2 = 0 or y mod 2 = 0
|
|
solve y x 1
|
|
print y & " x " & x & ": " & cnt
|
|
.
|
|
.
|
|
.
|
|
.
|
|
main
|