blob: 2fc387f3406d77f733d7740d3328998b19037a2f (
plain) (
tree)
|
|
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
|