/ Uiua / 2019 / Intcode.ua
Intcode.ua
 1  Parse ← map⇡⊸⧻ ⊜⋕∊⊂@-+@0⇡10.
 2  
 3  # Op <inst>
 4  Op ↚ ⍤.≥0.◿100
 5  
 6  # Mode <arg> <inst>
 7  Mode ↚ ◿10⌊÷ⁿ⊙10+2
 8  
 9  # Read <arg> <ip> <base> <mem>
10  Read ↚ ⬚0⨬(get⊙◌|∘|get+) ⊃(Mode⊙(get|◌)|get++1⊙⊙◌|⋅⋅⊙∘)
11  
12  # Write <val> <arg> <ip> <base> <mem>
13  Write ↚ insert:⊙(⨬(⊙◌|⍤.0|+) ⊃(Mode⊙(get|◌)|get++1⊙⊙◌|⋅⋅⊙∘))
14  
15  # ...Op <ip> <base> <mem>
16  BinOp! ↚ +4⊃⋅⋅⊙∘Write⊙2◡(^0⊃(Read1|Read0))
17  OpAdd  ↚ BinOp!+
18  OpMul  ↚ BinOp!×
19  
20  Input!  ↚ +2⊃⋅⋅⊙∘Write⊃(⋅⋅⋅∘|0|⊙⊙∘) ⊙⊙⊙^0
21  Output! ↚ +2 ⊙⊙⊙^0 ⊃(⋅⊙⊙∘|⊙⋅⋅◌) ◡(Read0)
22  
23  Jmp!     ↚ ⨬(+3◌|⊙◌)^0◡⊃(Read0|Read1)
24  JmpTrue  ↚ Jmp!(≠0)
25  JmpFalse ↚ Jmp!(=0)
26  
27  Lt ↚ BinOp!<
28  Eq ↚ BinOp!(=)
29  
30  Base ↚ +2⊙+:◡(Read0)
31  
32  Step‼  ↚ ⨬(⊙⊙⊙∘|OpAdd|OpMul|Input!^0|Output!^1|JmpTrue|JmpFalse|Lt|Eq|Base)Op◡(get⊙◌)
33  IsDone ↚ ≍99get⊙◌
34  
35  Run‼ ← ◌◌⍢(Step‼^0^1|¬IsDone)0 0