mirror of
https://github.com/daylinmorgan/advent-of-code-2023.git
synced 2024-10-17 23:53:26 -05:00
38 lines
1.2 KiB
Nim
38 lines
1.2 KiB
Nim
import std/[strutils, os, macros, terminal]
|
|
#
|
|
# template loadInputs*(): untyped =
|
|
# const callPath = getProjectPath()
|
|
# const example* {.inject.} = slurp(callPath / "example.txt").strip()
|
|
# const input* {.inject.} = slurp(callPath / "input.txt").strip()
|
|
#
|
|
|
|
# template solveInput*(input: string, p1: untyped, p2: untyped): untyped =
|
|
# assert partOne(input) == p1
|
|
# assert partTwo(input) == p2
|
|
|
|
macro solve*(arg: untyped): untyped =
|
|
arg.expectKind nnkStmtList
|
|
result = newStmtList()
|
|
for stmt in arg:
|
|
stmt.expectKind nnkCall
|
|
stmt[0].expectKind nnkStrLit
|
|
stmt[1].expectKind nnkStmtList
|
|
for inputs in stmt[1]:
|
|
inputs.expectKind nnkCall
|
|
inputs[0].expectKind nnkIdent
|
|
inputs[1].expectKind nnkStmtList
|
|
let
|
|
part = inputs[0]
|
|
inputFile = stmt[0]
|
|
output = inputs[1][0]
|
|
msg = newLit(part.repr & "|" & inputFile.strVal)
|
|
result.add quote do:
|
|
block:
|
|
const input = slurp(getProjectPath() / `inputFile`).strip()
|
|
let solution = `part`(input)
|
|
if solution == `output`:
|
|
stdout.styledWriteLine fgGreen, `msg`
|
|
else:
|
|
stdout.styledWriteLine fgRed, `msg`
|
|
stdout.writeLine " expected: ", $`output`, "; got: ", solution
|
|
|