Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
75
Task/Cut-a-rectangle/Wren/cut-a-rectangle.wren
Normal file
75
Task/Cut-a-rectangle/Wren/cut-a-rectangle.wren
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import "./fmt" for Fmt
|
||||
|
||||
var grid = []
|
||||
var w = 0
|
||||
var h = 0
|
||||
var len = 0
|
||||
var cnt = 0
|
||||
var next = [0] * 4
|
||||
var dir = [[0, -1], [-1, 0], [0, 1], [1, 0]]
|
||||
|
||||
var walk // recursive
|
||||
walk = Fn.new { |y, x|
|
||||
if (y == 0 || y == h || x == 0 || x == w) {
|
||||
cnt = cnt + 2
|
||||
return
|
||||
}
|
||||
var t = y * (w + 1) + x
|
||||
grid[t] = grid[t] + 1
|
||||
grid[len-t] = grid[len-t] + 1
|
||||
for (i in 0..3) {
|
||||
if (grid[t + next[i]] == 0) {
|
||||
walk.call(y + dir[i][0], x + dir[i][1])
|
||||
}
|
||||
}
|
||||
grid[t] = grid[t] - 1
|
||||
grid[len-t] = grid[len-t] - 1
|
||||
}
|
||||
|
||||
var solve // recursive
|
||||
solve = Fn.new { |hh, ww, recur|
|
||||
h = hh
|
||||
w = ww
|
||||
if (h&1 != 0) {
|
||||
var t = w
|
||||
w = h
|
||||
h = t
|
||||
}
|
||||
if (h&1 != 0) return 0
|
||||
if (w == 1) return 1
|
||||
if (w == 2) return h
|
||||
if (h == 2) return w
|
||||
var cy = (h/2).floor
|
||||
var cx = (w/2).floor
|
||||
len = (h + 1) * (w + 1)
|
||||
grid = List.filled(len, 0)
|
||||
len = len - 1
|
||||
next[0] = -1
|
||||
next[1] = -w - 1
|
||||
next[2] = 1
|
||||
next[3] = w + 1
|
||||
if (recur) cnt = 0
|
||||
var x = cx + 1
|
||||
while (x < w) {
|
||||
var t = cy * (w + 1) + x
|
||||
grid[t] = 1
|
||||
grid[len-t] = 1
|
||||
walk.call(cy - 1, x)
|
||||
x = x + 1
|
||||
}
|
||||
cnt = cnt + 1
|
||||
if (h == w) {
|
||||
cnt = cnt * 2
|
||||
} else if ((w&1 == 0) && recur) {
|
||||
solve.call(w, h, false)
|
||||
}
|
||||
return cnt
|
||||
}
|
||||
|
||||
for (y in 1..10) {
|
||||
for (x in 1..y) {
|
||||
if ((x&1 == 0) || (y&1 ==0)) {
|
||||
Fmt.print("$2d x $2d : $d", y, x, solve.call(y, x, true))
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue