23 lines
942 B
BQN
23 lines
942 B
BQN
⟨Split⟩←•Import"../bqn-libs/strings.bqn"
|
||
≠bricks←⍋∘(2⊸⊑¨⌊˝¨)⊸⊏>¨•ParseFloat¨¨¨","⊸Split¨¨"~"⊸Split¨•FLines"test"
|
||
|
||
xmax‿ymax‿zmax←1+⌈˝∾´bricks
|
||
h←xmax‿ymax⥊0
|
||
segs←{(⊏𝕩)⊸+¨⥊↕1+-˜˝𝕩}¨2⊸↑˘¨bricks
|
||
zs←1+2⊸⊑¨(⌈˝-⌊˝)¨bricks
|
||
h{segs‿zs𝕊𝕩: zs⊸+⌾(segs⊸⊑)𝕩}´segs⋈¨zs
|
||
|
||
|
||
Covered←∧´∘(2⊸↑˘⊸(⊏⊸≤∧1⊸⊏⊸≥))
|
||
es←∾¯2⊸↑¨¨2⊸↓¨↑¨⥊/¨{Covered⟜𝕩¨bricks}¨↕xmax‿ymax
|
||
a←1˙¨⌾(es⊸⊑)(∾˜≠bricks)⥊0
|
||
|
||
Fall←{𝕊bricks:
|
||
newz←{1+0⌈´𝕩/2⊸⊑¨⌈˝¨bricks}¨<˘⍉a
|
||
{𝕩+newz-2⊸⊑¨⌊˝¨bricks}⌾(2⊸⊏˘¨)bricks
|
||
}
|
||
#fallenbricks←Fall⍟zmax bricks
|
||
fallenbricks←Fall{𝕊∘⊢⍟≢⟜𝔽𝕩} bricks
|
||
es2←{1=|-´2⊸⊑¨⟨⌈˝,⌊˝⟩{𝕎𝕩}¨𝕩⊏fallenbricks}¨⊸/es
|
||
b←1˙¨⌾(es2⊸⊑)(∾˜≠bricks)⥊0
|
||
+´0=+˝(1≥+˝b)/⍉b
|