Day 4 part 2
This commit is contained in:
parent
7c663d41e6
commit
e9fa1ac9cb
|
@ -1,4 +1,4 @@
|
|||
import std/[strutils, sequtils, options, math, parseutils, sets, strformat]
|
||||
import std/[strutils, sequtils, options, math, parseutils, sets, strformat, algorithm]
|
||||
import ./common
|
||||
|
||||
type Board = object
|
||||
|
@ -38,7 +38,7 @@ proc squidBingo(inputLines: seq[string]): int =
|
|||
boards.add board
|
||||
board = Board(entries: @[], checked: @[])
|
||||
continue
|
||||
board.entries.add [l[0..1], l[3..4], l[6..7], l[9..10], l[12..13]].mapIt(it.strip())
|
||||
board.entries.add l.split(' ').filterIt(it != "").mapIt(it.strip())
|
||||
|
||||
boards.add board
|
||||
|
||||
|
@ -68,48 +68,43 @@ proc loseSquidBingo(inputLines: seq[string]): int =
|
|||
boards.add board
|
||||
board = Board(entries: @[], checked: @[])
|
||||
continue
|
||||
board.entries.add [l[0..1], l[3..4], l[6..7], l[9..10], l[12..13]].mapIt(it.strip())
|
||||
board.entries.add l.split(' ').filterIt(it != "").mapIt(it.strip())
|
||||
|
||||
boards.add board
|
||||
|
||||
for n in calledNumbers:
|
||||
echo &"Calling {n}..."
|
||||
var removeBoards: seq[int] = @[]
|
||||
for bbi, b in boards.mpairs():
|
||||
for i, e in b.entries:
|
||||
if n == e:
|
||||
b.checked.add i
|
||||
if b.isBoardWinning():
|
||||
echo "Board Win"
|
||||
if (boards.len() - removeBoards.len()) < 2:
|
||||
echo &"Last Board: {board}"
|
||||
var entriesSum = 0
|
||||
for i, v in b.entries:
|
||||
if not (i in b.checked): entriesSum += v.parseInt()
|
||||
return entriesSum * n.parseInt()
|
||||
else:
|
||||
removeBoards.add(bbi)
|
||||
echo &"Removing {removeBoards.len()} board(s) of {boards.len()}..."
|
||||
for i in removeBoards:
|
||||
boards.delete(i, i)
|
||||
for i in removeBoards.reversed():
|
||||
boards.delete(i..i)
|
||||
return 0
|
||||
|
||||
let input = 4.loadInput()
|
||||
# time("squidBingo part 1"): echo input.squidBingo()
|
||||
# time("loseSquidBingo part 2"): echo input.loseSquidBingo()
|
||||
time("squidBingo part 1"): echo input.squidBingo()
|
||||
time("loseSquidBingo part 2"): echo input.loseSquidBingo()
|
||||
|
||||
when not defined(release):
|
||||
static:
|
||||
let testInput = """7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
|
||||
let testInput = """7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
|
||||
|
||||
22 13 17 11 0
|
||||
8 2 23 4 24
|
||||
8 2 23 4 24
|
||||
21 9 14 16 7
|
||||
6 10 3 18 5
|
||||
1 12 20 15 19
|
||||
6 10 3 18 5
|
||||
1 12 20 15 19
|
||||
|
||||
3 15 0 2 22
|
||||
9 18 13 17 5
|
||||
3 15 0 2 22
|
||||
9 18 13 17 5
|
||||
19 8 7 25 23
|
||||
20 11 10 24 4
|
||||
14 21 16 12 6
|
||||
|
@ -118,8 +113,6 @@ when not defined(release):
|
|||
10 16 15 9 19
|
||||
18 8 23 26 20
|
||||
22 11 13 6 5
|
||||
2 0 12 3 7""".split('\n')
|
||||
# doAssert testInput.squidBingo() == 4512
|
||||
let r = testInput.loseSquidBingo()
|
||||
echo r
|
||||
doAssert r == 1924
|
||||
2 0 12 3 7""".split('\n')
|
||||
doAssert testInput.squidBingo() == 4512
|
||||
doAssert testInput.loseSquidBingo() == 1924
|
||||
|
|
Loading…
Reference in a new issue