diff options
author | sterni <sternenseemann@systemli.org> | 2022-12-07T19·13+0100 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-12-07T19·17+0000 |
commit | 11abe4784c81a421178f5ebcf7ddf96dffaa7a45 (patch) | |
tree | 8a22fe803df426babc490208a126283e817da894 | |
parent | 16db5e2cc8fc28d4be9fe2725fcba171ed6fa2d3 (diff) |
feat(sterni/aoc/2022): day07 BQN solution r/5398
Did not have the motivation to go back and improve things, so this is my initial attempt. Change-Id: I3e129523d8f6c03bfbe50351f78d56ec7254a2dc Reviewed-on: https://cl.tvl.fyi/c/depot/+/7539 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Autosubmit: sterni <sternenseemann@systemli.org>
-rw-r--r-- | users/sterni/exercises/aoc/2022/07/7.bqn | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/users/sterni/exercises/aoc/2022/07/7.bqn b/users/sterni/exercises/aoc/2022/07/7.bqn new file mode 100644 index 000000000000..2fc387f3406d --- /dev/null +++ b/users/sterni/exercises/aoc/2022/07/7.bqn @@ -0,0 +1,24 @@ +lib ← •Import "../../lib.bqn" +cmds ← 1↓ '$' ((+`= ⟜(⊑¨))⊔⊢) •FLines "input" +paths ← (<⟨⟩) { + 𝕨 𝕊 "$ ls": 𝕨; + 𝕨 𝕊 "$ cd /": ⟨⟩; + 𝕨 𝕊 "$ cd ..": (-1)↓𝕨; + 𝕨 𝕊 𝕩: 𝕨∾<5↓𝕩 # "$ cd …" +}` ⊑¨cmds +ParseLs ← { + dirs‿files ← 2↑((lib.IsAsciiNum∘⊑∘⊑)¨⊔⊢) ((<' ')⊸lib.SplitOn)¨ 1↓𝕩 + (1⊑¨dirs)⋈(lib.ReadDec 0⊸⊑)¨files +} +dirlists ← ParseLs⌾(1⊸⊑)¨⥊⋈˘(("$ cd"⊸≢⟜(4⊸↑)∘⊑¨)∘(1⊸⊏)˘/⊢) (⍒≠¨paths)⊏⍉paths≍cmds +DirSize ← {⊑𝕨 (⊑∘(1⊸⊑¨∘⊣⊐⊢)⊑⊣) <𝕩} +DirName ← ∾'/'⊸∾¨ +dirsizes ← ⊑¨ ⟨⟩ { + szs 𝕊 ⟨dir, subdirs‿files⟩: + Canon ← DirName dir⊸∾⟜⋈ + sz ← +´files∾szs⊸DirSize∘Canon¨ subdirs + szs∾<sz⋈DirName dir +}˜´ ⌽dirlists + +•Out "day07.1: "∾•Fmt +´ 100000 (≥/⊢) dirsizes +•Out "day07.2: "∾•Fmt (30000000-70000000-⌈´dirsizes) ⌊´∘(≤/⊢) dirsizes |