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>
		
			
				
	
	
		
			24 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			BQN
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			BQN
		
	
	
	
	
	
| 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
 |