Organize things
This commit is contained in:
parent
7552c3ea12
commit
3562f82032
31
2021/nim/eleven.nim
Normal file
31
2021/nim/eleven.nim
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import ./common, std/[strutils, sequtils, algorithm, sugar, tables]
|
||||||
|
|
||||||
|
const pairs = toTable {'(': ')', '[': ']', '{': '}', '<': '>'}
|
||||||
|
const corruptPoints = toTable {')': 3, ']': 57, '}': 1197, '>': 25137}
|
||||||
|
|
||||||
|
proc parse(input: seq[string]): (int, int) =
|
||||||
|
var cmps = newSeq[int]()
|
||||||
|
for line in input:
|
||||||
|
var stack: seq[char] = @[]
|
||||||
|
for ch in line:
|
||||||
|
if pairs.hasKey ch: stack.add pairs[ch]
|
||||||
|
elif stack.pop != ch:
|
||||||
|
result[0] += corruptPoints[ch]
|
||||||
|
stack.setLen 0
|
||||||
|
break
|
||||||
|
if stack.len > 0: cmps.add stack.mapIt(" )]}>".find it).foldr 5 * b + a
|
||||||
|
result[1] = cmps.sorted[cmps.len div 2]
|
||||||
|
|
||||||
|
doDay 10, n => n.loadInput(), s => s.parse[0], s => s.parse[1],
|
||||||
|
@[
|
||||||
|
"[({(<(())[]>[[{[]{<()<>>",
|
||||||
|
"[(()[<>])]({[<{<<[]>>(",
|
||||||
|
"{([(<{}[<>[]}>{[]{[(<()>",
|
||||||
|
"(((({<>}<{<{<>}{[]{[]{}",
|
||||||
|
"[[<[([]))<([[{}[[()]]]",
|
||||||
|
"[{[{({}]{}}([{[{{{}}([]",
|
||||||
|
"{<[[]]>}<{[{[{[]{()[[[]",
|
||||||
|
"[<(<(<(<{}))><([]([]()",
|
||||||
|
"<{([([[(<>()){}]>(<<{{",
|
||||||
|
"<{([{{}}[<[[[<>{}]]]>[]]",
|
||||||
|
], 26397, 288957
|
|
@ -6,6 +6,7 @@ solutions using it.
|
||||||
|
|
||||||
Specifically, here's my `deno --version` output:
|
Specifically, here's my `deno --version` output:
|
||||||
|
|
||||||
|
$ deno --version
|
||||||
deno 1.16.3 (release, x86_64-unknown-linux-gnu)
|
deno 1.16.3 (release, x86_64-unknown-linux-gnu)
|
||||||
v8 9.7.106.5
|
v8 9.7.106.5
|
||||||
typescript 4.4.2
|
typescript 4.4.2
|
||||||
|
@ -14,7 +15,13 @@ Enjoy!
|
||||||
|
|
||||||
**EDIT**: Since performance is not what I would like, it looks like I'm also doing some of these in Nim.
|
**EDIT**: Since performance is not what I would like, it looks like I'm also doing some of these in Nim.
|
||||||
|
|
||||||
**EDIT 2**: I sprinkled some zig in there. I've been meaning to mess with it for a while.
|
$ nim --version
|
||||||
|
Nim Compiler Version 1.6.0 [Linux: amd64]
|
||||||
|
Compiled at 2021-10-19
|
||||||
|
Copyright (c) 2006-2021 by Andreas Rumpf
|
||||||
|
|
||||||
|
git hash: 727c6378d2464090564dbcd9bc8b9ac648467e38
|
||||||
|
active boot switches: -d:release
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
@ -24,12 +31,7 @@ Run these solutions like so:
|
||||||
|
|
||||||
And the Nim ones like so:
|
And the Nim ones like so:
|
||||||
|
|
||||||
nim c -d:release -d:ssl --run $DAYMODULE.nim
|
nim c -d:release -d:ssl --run day$DAY.nim
|
||||||
|
|
||||||
And the Zig ones like so:
|
|
||||||
|
|
||||||
zig build-exe -O ReleaseFast 6.zig -femit-bin=build/zig-$DAY
|
|
||||||
./build/zig-$DAY
|
|
||||||
|
|
||||||
And if you want to measure memory usage with Deno programs:
|
And if you want to measure memory usage with Deno programs:
|
||||||
|
|
||||||
|
@ -40,14 +42,8 @@ And if you want to measure memory usage with Deno programs:
|
||||||
Or for Nim programs:
|
Or for Nim programs:
|
||||||
|
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
nim c -d:release -d:ssl --outdir:build $DAYMODULE.nim
|
nim c -d:release -d:ssl --outdir:build day$DAY.nim
|
||||||
/usr/bin/time -v ./$DAYMODULE
|
/usr/bin/time -v ./day$DAY
|
||||||
|
|
||||||
Or for Zig programs:
|
|
||||||
|
|
||||||
mkdir -p build
|
|
||||||
zig build-exe -O ReleaseFast 6.zig -femit-bin=build/zig-$DAY
|
|
||||||
/usr/bin/time -v ./build/zig-$DAY
|
|
||||||
|
|
||||||
# Days
|
# Days
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue