yea
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.1 KiB

ReadInt ⇐ (+ ⟜ (10⊸×))´ ∘ (-⟜'0') ∘ ⌽
IntFile ⇐ ReadInt¨ •FLines
aoc1 ⇐ {
A ⇐ +´ ∘ (>⟜(∞⊸»)) ∘ IntFile
B ⇐ +´ ∘ (>⟜(∞⊸»)) ∘ (+´˘) ∘ (3⊸↕) ∘ IntFile
}
################################################################################
Split ⇐ ((+`׬) - ⊢)∘= ⊔ ⊢ # from bqn crates lmao
Words ⇐ ((0≠≠)¨⊸/) ∘ (' '⊸Split)
CSV ⇐ ','⊸Split
CSVInt ⇐ ReadInt¨ CSV
aoc2 ⇐ {
Move1 ← { "forward" 𝕊 x: x‿0; "down" 𝕊 y: 0‿y; "up" 𝕊 y: ⟨0,-y⟩ }
Move ← Move1⟜ReadInt´ ∘ Words
MoveFile ← Move¨ ∘ •FLines
DoMoveB ← {dx‿da 𝕊 x‿y‿a : ⟨x+dx, y+(dx×a), a+da⟩}
A ⇐ ×´ +´ ∘ MoveFile
B ⇐ ×´ ∘ (2⊸↑) ∘ (0‿0‿0⊸(DoMoveB´)∘⌽) ∘ MoveFile
}
################################################################################
FromBin ⇐ +´ 2⊸⋆∘↕∘≠ × ⌽
BitFile ⇐ (-⟜'0') ∘ > ∘ •FLines
aoc3 ⇐ {
Most ← ⊑ ∘ ((⍒⊒) ⊸ ⊏)
Gamma ← Most˘ ∘ ⍉ ∘ BitFile
A ⇐ ¬⊸(×○FromBin) ∘ Gamma
B ⇐ {"nah"!0, 𝕩}
}
################################################################################
aoc4 ⇐ {
BingoFile ← {
lines ← •FLines 𝕩
picks ⇐ CSVInt ⊑lines
boards ⇐ ReadInt¨ > Words¨ 1⊸↓˘ ∘‿6 ⥊ 1↓lines
states ⇐ boards <⊸(≡◶⊣‿0¨`) picks
}
Win ← ∨´ ((∧´ 0⊸≡)˘)∘(⍉∾⊢)
Score ← +´⥊
A ⇐ {
picks‿states ← BingoFile 𝕩
⊑ 0⊸≠⊸/ +´¨ picks × (Score × Win)˘¨ states
}
B ⇐ {
picks‿states ← BingoFile 𝕩
pick‿cur‿prev ← ⊑ ((∧´ Win˘)¨ states) / (picks ∾¨ states ⋈¨ »states)
pick × Score (¬Win˘ prev) / cur
}
}
################################################################################
aoc5 ⇐ {
VentFile ← ReadInt¨∘∾∘(CSV¨ 0‿2⊸⊏)∘Words¨ •FLines
To ← {𝕨≡𝕩? 𝕩; ⌽⍟(𝕨>𝕩) (𝕨⌊𝕩) ↓ ↕(1+𝕨⌈𝕩)}
DrawLine ← {x1‿y1‿x2‿y2: (x1 To x2) ⋈¨ (y1 To y2)}
Orth ← {∨´ =´ <˘ 2‿∘ ⥊ 𝕩}
Danger ← {1⊑ /⁼ ⊒ ∾DrawLine¨ 𝕩}
A ⇐ Danger (Orth¨⊸/ VentFile), B ⇐ Danger VentFile
}
################################################################################
aoc6 ⇐ {
FishFile ← 9⊸↑ /⁼ ∘ CSVInt ∘ ⊑ ∘ •FLines
Step ← (⊑ × (/⁼6‿8)˙) + «
Fishies ← {+´ Step⍟𝕨 FishFile 𝕩}
A ⇐ 80⊸Fishies, B ⇐ 256⊸Fishies
}
################################################################################
aoc7 ⇐ {
CrabFile ← CSVInt ∘ ⊑ ∘ •FLines
Range ← {l + ↕(⌈´𝕩)¬(l←⌊´𝕩)}
FuelA ← +´ ∘| -
FuelB ← +´∘(÷⟜2)∘(⊢×+⟜1)∘| -
_Go ← {⌊´ ps⊸𝔽¨ Range ps←CrabFile 𝕩}
A ⇐ FuelA _Go, B ⇐ FuelB _Go
}
################################################################################
aoc8 ⇐ {A⇐B⇐{"maybe later"!0, 𝕩}}
################################################################################
aoc9 ⇐ {
SmokeFile ← > -⟜'0' ∘ •FLines
Adj ← {<⎉1 ⍉ > ⟨∞«˘𝕩, ∞»˘𝕩, ∞«˘⌾⍉𝕩, ∞»˘⌾⍉𝕩⟩}
Lowest ← ∧´¨ <⟜Adj
Risk ← 1⊸+ × Lowest
A ⇐ +´⥊ ∘ Risk ∘ SmokeFile
B ⇐ {"nah"!0, 𝕩}
}
################################################################################
At ⇐ {1⊑ ⊑ (⊑ ≡ 𝕩˙)¨⊸/ 𝕨} # use ⎊ for default
aoc10 ⇐ {
BadScore1 ← ⟨')'‿3,']'‿57,'}'‿1197,'>'‿25137⟩⊸At
BadScore ← {'!'‿c: BadScore1 c; 0}
pairs ← Words "() [] {} <>"
Step ← {
'!' ≡ ⊑⎊@ 𝕩? 𝕩;
𝕨 = pairs At⟜⊑⎊@ 𝕩? 1↓𝕩;
⊑ 𝕨 ∊ ⊑¨pairs? 𝕨∾𝕩;
'!'‿𝕨
}
Find ← ""⊸(Step´) ⌽
GoodScore1 ← ⟨'('‿1,'['‿2,'{'‿3,'<'‿4⟩⊸At
GoodScore ← {'!' ≢ ⊑𝕩? 0 ((GoodScore1 ⊣) + (5⊸× ⊢))´ ⌽ 𝕩; 0}
Middle ← ((⌊÷⟜2)∘≠ ⊑ ⊢) ∧ ∘ (0⊸≠¨⊸/)
A ⇐ +´ BadScore∘Find¨ ∘ •FLines
B ⇐ Middle GoodScore∘Find¨ ∘ •FLines
}