2023 Day 11 Part 1
This commit is contained in:
parent
dbbc96ce23
commit
e8d712049b
1 changed files with 69 additions and 0 deletions
69
2023/day11.nim
Normal file
69
2023/day11.nim
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
import std/algorithm
|
||||
import std/deques
|
||||
import std/enumerate
|
||||
import std/math
|
||||
import std/sequtils
|
||||
import std/sets
|
||||
import std/strscans
|
||||
import std/strutils
|
||||
import std/sugar
|
||||
import std/tables
|
||||
|
||||
proc dbg[T](v: T): T = (echo(v); v)
|
||||
|
||||
type Point = tuple
|
||||
r: int
|
||||
c: int
|
||||
|
||||
type Universe = object
|
||||
rows: int
|
||||
cols: int
|
||||
grid: Table[Point, char]
|
||||
galaxies: seq[Point]
|
||||
|
||||
func parseUniverse(text: string): Universe =
|
||||
let lines = text.strip.splitLines()
|
||||
result.rows = lines.len
|
||||
result.cols = lines[0].len
|
||||
|
||||
for (r, line) in enumerate(lines):
|
||||
for (c, sym) in enumerate(line):
|
||||
result.grid[(r, c)] = sym
|
||||
|
||||
if sym == '#':
|
||||
result.galaxies.add (r, c)
|
||||
|
||||
func expandRows(rows: seq[string]): seq[string] =
|
||||
for (r, row) in enumerate(rows):
|
||||
result.add(row)
|
||||
if '#' notin row:
|
||||
result.add(row)
|
||||
|
||||
func transpose(rows: seq[string]): seq[string] =
|
||||
for c in 0 ..< rows[0].len:
|
||||
var col = ""
|
||||
for r in 0 ..< rows.len:
|
||||
col = col & rows[r][c]
|
||||
result.add col
|
||||
|
||||
func expand(text: string): string =
|
||||
let rows = text.strip.splitlines
|
||||
let e1 = rows.expandRows
|
||||
|
||||
let cols = e1.transpose
|
||||
let e2 = cols.expandRows
|
||||
|
||||
e2.transpose.join("\n")
|
||||
|
||||
func manhattan(a: Point, b: Point): int =
|
||||
abs(a.r - b.r) + abs(a.c - b.c)
|
||||
|
||||
proc part1(): int =
|
||||
let text = readFile("input/day11.txt")
|
||||
let u = parseUniverse(expand(text))
|
||||
|
||||
for (i, a) in enumerate(u.galaxies):
|
||||
for b in u.galaxies[i..^1]:
|
||||
result.inc manhattan(a, b)
|
||||
|
||||
echo part1()
|
||||
Loading…
Reference in a new issue