Day17 2021 in nim
This commit is contained in:
parent
1d745a0855
commit
3906d6ef72
1
2021/nim/17/example.txt
Normal file
1
2021/nim/17/example.txt
Normal file
@ -0,0 +1 @@
|
||||
target area: x=20..30, y=-10..-5
|
||||
1
2021/nim/17/input.txt
Normal file
1
2021/nim/17/input.txt
Normal file
@ -0,0 +1 @@
|
||||
target area: x=139..187, y=-148..-89
|
||||
42
2021/nim/17/main.nim
Normal file
42
2021/nim/17/main.nim
Normal file
@ -0,0 +1,42 @@
|
||||
import nre, strutils
|
||||
|
||||
let
|
||||
regex = re"x=(-?\d+)..(-?\d+), y=(-?\d+)..(-?\d+)"
|
||||
data = readFile("input.txt")
|
||||
captures = data.find(regex).get.captures
|
||||
x1 = captures[0].parseInt()
|
||||
x2 = captures[1].parseInt()
|
||||
y1 = captures[2].parseInt()
|
||||
y2 = captures[3].parseInt()
|
||||
minX = min(x1, x2)
|
||||
maxX = max(x1, x2)
|
||||
minY = min(y1, y2)
|
||||
maxY = max(y1, y2)
|
||||
|
||||
proc land(dx: int, dy: int): int =
|
||||
var dx = dx
|
||||
var dy = dy
|
||||
var x = 0
|
||||
var y = 0
|
||||
var high = y
|
||||
while x < maxX and y > minY:
|
||||
x += dx
|
||||
y += dy
|
||||
if dx > 0: dx -= 1
|
||||
elif dx < 0: dx += 1
|
||||
dy -= 1
|
||||
high = max(high, y)
|
||||
if x in minX..maxX and y in minY..maxY:
|
||||
return high
|
||||
return -1
|
||||
|
||||
var high = 0
|
||||
var match = 0
|
||||
for x in -1000..1000:
|
||||
for y in -1000..1000:
|
||||
let res = land(x, y)
|
||||
if res != -1: match += 1
|
||||
high = max(res, high)
|
||||
|
||||
echo(high)
|
||||
echo(match)
|
||||
Loading…
x
Reference in New Issue
Block a user