Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
60
Task/Cut-a-rectangle/Jq/cut-a-rectangle.jq
Normal file
60
Task/Cut-a-rectangle/Jq/cut-a-rectangle.jq
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
def dir: [[0, -1], [-1, 0], [0, 1], [1, 0]] ;
|
||||
|
||||
# input and output: {grid, w, h, len, count, next}
|
||||
def mywalk($y; $x):
|
||||
if ($y == 0 or $y == .h or $x == 0 or $x == .w)
|
||||
then .count += 2
|
||||
else ($y * (.w + 1) + $x) as $t
|
||||
| .grid[$t] += 1
|
||||
| .grid[.len-$t] += 1
|
||||
| reduce range(0; 4) as $i (.;
|
||||
if .grid[$t + .next[$i]] == 0
|
||||
then mywalk($y + dir[$i][0]; $x + dir[$i][1])
|
||||
else .
|
||||
end )
|
||||
| .grid[$t] += -1
|
||||
| .grid[.len-$t] += -1
|
||||
end;
|
||||
|
||||
# solve/3 returns an integer.
|
||||
# If $count is null, the value is the count of permissible cuts for an $h x $w rectangle.
|
||||
# Otherwise, the computed value augments $count.
|
||||
def solve($h; $w; $count):
|
||||
if $count then {$count} else {} end
|
||||
| if $h % 2 == 0
|
||||
then . + {$h, $w}
|
||||
else . + {w: $h, h: $w} # swap
|
||||
end
|
||||
| if (.h % 2 == 1) then 0
|
||||
elif (.w == 1) then 1
|
||||
elif (.w == 2) then .h
|
||||
elif (.h == 2) then .w
|
||||
else ((.h/2)|floor) as $cy
|
||||
| ((.w/2)|floor) as $cx
|
||||
| .len = (.h + 1) * (.w + 1)
|
||||
| .grid = [range(0; .len) | 0]
|
||||
| .len += -1
|
||||
| .next = [-1, - .w - 1, 1, .w + 1]
|
||||
| .x = $cx + 1
|
||||
| until (.x >= .w;
|
||||
($cy * (.w + 1) + .x) as $t
|
||||
| .grid[$t] = 1
|
||||
| .grid[.len-$t] = 1
|
||||
| mywalk($cy - 1; .x)
|
||||
| .x += 1 )
|
||||
| .count += 1
|
||||
| if .h == .w
|
||||
then .count * 2
|
||||
elif (.w % 2 == 0) and $count == null
|
||||
then solve(.w; .h; .count)
|
||||
else .count
|
||||
end
|
||||
end ;
|
||||
|
||||
def task($n):
|
||||
range (1; $n+1) as $y
|
||||
| range(1; $y + 1) as $x
|
||||
| select(($x % 2 == 0) or ($y % 2 == 0))
|
||||
| "\($y) x \($x) : \(solve($y; $x; null))" ;
|
||||
|
||||
task(10)
|
||||
Loading…
Add table
Add a link
Reference in a new issue