This commit is contained in:
parent
52aeb4d7c7
commit
819ab0f508
|
@ -0,0 +1,54 @@
|
||||||
|
import
|
||||||
|
std/math,
|
||||||
|
std/sequtils,
|
||||||
|
std/strformat,
|
||||||
|
std/strutils
|
||||||
|
|
||||||
|
import
|
||||||
|
../../adventofcode
|
||||||
|
|
||||||
|
let input = adventofcode.getInput()
|
||||||
|
|
||||||
|
when not defined(second):
|
||||||
|
var points = 0
|
||||||
|
else:
|
||||||
|
var additionalCards: seq[Natural] = @[]
|
||||||
|
|
||||||
|
let lines = input.splitLines()
|
||||||
|
for i in 0 .. lines.high():
|
||||||
|
let line = lines[i]
|
||||||
|
when defined(second):
|
||||||
|
if additionalCards.high() < i:
|
||||||
|
additionalCards.add 0
|
||||||
|
let instances = 1 + additionalCards[i]
|
||||||
|
let winningNumsStart = line.find(':') + 1
|
||||||
|
let winningNumsEnd = line.find('|')
|
||||||
|
let winningNums = line[winningNumsStart ..< winningNumsEnd]
|
||||||
|
.split(' ')
|
||||||
|
.filterIt(it != "")
|
||||||
|
.mapIt(parseInt it)
|
||||||
|
let elfNums = line[winningNumsEnd + 1 .. ^1]
|
||||||
|
.split(' ')
|
||||||
|
.filterIt(it != "")
|
||||||
|
.mapIt(parseInt it)
|
||||||
|
|
||||||
|
var duplicata = 0
|
||||||
|
for n in elfNums:
|
||||||
|
if n in winningNums:
|
||||||
|
duplicata.inc()
|
||||||
|
|
||||||
|
when not defined(second):
|
||||||
|
if duplicata > 0:
|
||||||
|
points += 2 ^ (duplicata - 1)
|
||||||
|
else:
|
||||||
|
for j in 1 .. duplicata:
|
||||||
|
if additionalCards.high() < i + j:
|
||||||
|
additionalCards.add 0
|
||||||
|
additionalCards[i + j] += instances
|
||||||
|
|
||||||
|
when not defined(second):
|
||||||
|
echo fmt"Answer: {points}"
|
||||||
|
else:
|
||||||
|
var originalCardCount = len(lines)
|
||||||
|
var additionalCardSum = sum(additionalCards)
|
||||||
|
echo fmt"Answer: {originalCardCount + additionalCardSum}"
|
Loading…
Reference in New Issue