about summary refs log tree commit diff
path: root/users/sterni/exercises/aoc/2022/11/11.bqn
blob: 12b9b5097a598c0497fc49119c63faf5b51085fb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# needs export BQNLIBS=/path/to/mlochbaum/bqn-libs
⟨ReadDec,ImportBqnLibs⟩ ← •Import "../../lib.bqn"
⟨Split⟩ ← ImportBqnLibs "strings.bqn"
MakeOp ← {
  𝕊 a‿"+"‿b: 𝕊 a‿+‿b;
  𝕊 a‿"*"‿b: 𝕊 a‿×‿b;
  𝕊 a‿op‿b:
  is‿xs ← (<"old") (≡¨⊔⊢) a‿b
  {op´ (𝕩⋆≠xs) ∾ReadDec¨ is}
}
ParseMonkey ← {
  ·‿items‿op‿if‿then‿else:
  {
    initial ⇐ ReadDec¨ ", " Split 18↓items
    op ⇐ MakeOp " " Split 19↓op
    if ⇐ ReadDec 21↓if
    then ⇐ ReadDec 29↓then
    else ⇐ ReadDec 30↓else
  }
}
monkeys ← ParseMonkey¨ 1↓' '((+`(≠⟜⊑)¨)⊔⊢)0(≠⟜≠¨/⊢)•FLines "input"
items ← {𝕩.initial}¨ monkeys
lim ← ×´{𝕩.if}¨ monkeys

Sim ← {
  div 𝕊 len:
  Turn ← {
    items 𝕊 turnidx:
    i ← (≠monkeys)|turnidx
    m ← i⊑monkeys

    worry ← lim|⌊div÷˜ m.Op¨ i⊑items
    else‿then ← 2↑0 (=⟜(m.if⊸|)⊔⊢) worry

    ⟨then, else⟩⊸(∾˜¨)⌾(m.then‿m.else⊸⊏) ⟨⟩˙⌾(i⊸⊑) items
  }
  ×´2↑∨+˝(<items) ((≠⊑)⊸(>((↕⊣)=|)¨)×(≠¨˘)∘>∘(⊣»Turn`)) ↕len×≠items
}

•Out "day11.1: "∾•Fmt 3 Sim 20
•Out "day11.2: "∾•Fmt 1 Sim 10000