tvl-depot/users/sterni/exercises/aoc/2021/solutions.bqn
sterni 343b811bbc feat(sterni/aoc/2021): day 7 solution
Change-Id: I8c8b535defb42f15eafc816ebe953e51b11ea702
2021-12-13 21:58:15 +01:00

150 lines
3.3 KiB
BQN
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env BQN
#
# Utilities
#
IsAsciiNum ('0''9')
ReadInt {(𝕨×+)´-'0'𝕩} # stolen from leah2
ReadDec 10ReadInt
ReadInput {•file.Lines •path"/input/day"(•Fmt 𝕩)}
SplitOn (( (-1˙)¨ +`)=)
#
# 2021-12-01
#
# part 1
day1ExampleData 199200208210200207240269260263
day1Input ReadDec¨ReadInput 1
# NB: Because distance from the ground is never smaller than zero, it's
# no problem that nudge inserts a zero at the end of the right list
PositiveDeltaCount +´(<«)+˝˘
! 7 = 1 PositiveDeltaCount day1ExampleData
•Out "Day 1.1: "•Fmt 1 PositiveDeltaCount day1Input
# part 2
! 5 = 3 PositiveDeltaCount day1ExampleData
•Out "Day 1.2: "•Fmt 3 PositiveDeltaCount day1Input
#
# 2021-12-02
#
# part 1
day2ExampleData
"forward 5",
"down 5",
"forward 8",
"up 3",
"down 8",
"forward 2",
day2Input ReadInput 2
ParseSubmarineCommand (((2)((((-1))(2|))×(=((÷2))))("duf"))×ReadDec(IsAsciiNum/))
SubmarineDestProduct {×´+´ParseSubmarineCommand¨𝕩}
! 150 = SubmarineDestProduct day2ExampleData
•Out "Day 2.1: "•Fmt SubmarineDestProduct day2Input
# part 2
SubmarineAimedDestProduct {
×´+´((×´)(1)(1))¨ (<000) ((()+()))` ParseSubmarineCommand¨𝕩
}
! 900 = SubmarineAimedDestProduct day2ExampleData
•Out "Day 2.2: "•Fmt SubmarineAimedDestProduct day2Input
#
# 2021-12-03
#
BinTable '0'-˜>
day3ExampleData BinTable
"00100",
"11110",
"10110",
"10111",
"10101",
"01111",
"00111",
"11100",
"10000",
"11001",
"00010",
"01010",
day3Input BinTable ReadInput 3
DeBinList ((2×)+)´
_tableAggr {((÷2)(/)´𝔽(+˝))𝕩}
GammaRate < _tableAggr
! 22 = DeBinList GammaRate day3ExampleData
! 9 = DeBinList ¬GammaRate day3ExampleData
•Out "Day 3.1: "•Fmt (¬×DeBinList) GammaRate day3Input
_lifeSupportRating {
# Need to rename the arguments, otherwise the ternary expr becomes a function
bitPos 𝕨
Cmp 𝔽
crit Cmp _tableAggr 𝕩
matchPos bitPos ˘ crit ((˜)=) 𝕩
match matchPos/𝕩
{1=match?match;(bitPos+1) Cmp _lifeSupportRating match}
}
OxygenGeneratorRating DeBinList 0 _lifeSupportRating
CO2ScrubberRating DebinList 0 >_lifeSupportRating
! 23 = OxygenGeneratorRating day3ExampleData
! 10 = CO2ScrubberRating day3ExampleData
•Out "Day 3.2: "•Fmt (OxygenGeneratorRating×CO2ScrubberRating) day3Input
#
# 2021-12-07
#
# part 1
day6ExampleData 16,1,2,0,4,2,7,1,2,14
day6Input ReadDec¨ ',' SplitOn ReadInput 6
PossiblePositions (´+(1+)´)
FuelConsumption +˝|(-)
_lowestFuelPossible {´(𝔽PossiblePositions)˜ 𝕩}
! 37 = FuelConsumption _lowestFuelPossible day6ExampleData
•Out "Day 7.1: "•Fmt FuelConsumption _lowestFuelPossible day6Input
# part 2
TriNum 1+×÷2
FuelConsumption2 +˝(TriNum¨)|(-)
! 168 = FuelConsumption2 _lowestFuelPossible day6ExampleData
•Out "Day 7.2: "•Fmt FuelConsumption2 _lowestFuelPossible day6Input