commit 4bee69d8b1f8a63044ebb1f24b71b1e9aef03190 Author: rhiannon morris Date: Tue Jan 25 16:58:45 2022 +0100 days 1–7 [except 3b] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72c9a69 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +test +input* diff --git a/aoc.bqn b/aoc.bqn new file mode 100644 index 0000000..953e41d --- /dev/null +++ b/aoc.bqn @@ -0,0 +1,95 @@ +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 +} + +################################################################################ + +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 ← /⁼∘CSVInt∘⊑∘•FLines + Step ← (⊑ × (/⁼6‿8)˙) +○(9⊸↑) « + 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 +}