2022-12-10 21:24:06 +01:00
|
|
|
|
⟨SplitOn,ReadDec⟩ ← •Import "../../lib.bqn"
|
|
|
|
|
# Instead of implementing the VM described in the problem, translate the
|
|
|
|
|
# program to instructions with equivalent timing for a similar VM that
|
|
|
|
|
# only needs 1 cycle for every instruction.
|
|
|
|
|
is ← ∾{"noop": <"noop"; 𝕩: (<"noop")∾<ReadDec⌾(1⊸⊑) (<' ') SplitOn 𝕩}¨ •FLines "input"
|
|
|
|
|
|
|
|
|
|
Op ← {x 𝕊 "noop": x;x 𝕊 "addx"‿i: x+i}
|
|
|
|
|
Draw ← {𝕊 c‿x‿pic: pic∨(↕240)((c-1)⊸=∘⊣∧∊)(⌊⌾(÷⟜40)c)+¯1+x+↕3}
|
|
|
|
|
_vm ← {
|
|
|
|
|
is _self s: (⊑s)≥≠is? s;
|
|
|
|
|
is _self prev‿sum‿x‿pic:
|
|
|
|
|
cycle ← prev+1
|
|
|
|
|
is _self ⟨
|
|
|
|
|
cycle,
|
|
|
|
|
sum+x×cycle×⊑cycle∊20‿60‿100‿140‿180‿220,
|
|
|
|
|
x Op (¯1+cycle)⊑is,
|
|
|
|
|
Draw cycle‿x‿pic
|
|
|
|
|
⟩
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
·‿sum‿·‿pic ← is _vm 1‿0‿1‿(240⥊0)
|
|
|
|
|
|
|
|
|
|
•Out "day10.1: "∾•Fmt sum
|
|
|
|
|
•Out "day10.2:"
|
2022-12-13 00:43:24 +01:00
|
|
|
|
•Show ".#" ⊏˜ ∘‿40⥊pic
|