chiark / gitweb /
05b done
authorBen Harris <bjh21@bjh21.me.uk>
Sun, 5 May 2024 12:07:17 +0000 (13:07 +0100)
committerBen Harris <bjh21@bjh21.me.uk>
Sun, 5 May 2024 12:07:17 +0000 (13:07 +0100)
05/05b.bqn [new file with mode: 0644]

diff --git a/05/05b.bqn b/05/05b.bqn
new file mode 100644 (file)
index 0000000..5f4daac
--- /dev/null
@@ -0,0 +1,33 @@
+Split←{
+  blocknums ← +`𝕨
+  # Set entries in blocknums to -1 when they correspond with delimiters.
+  blocknums ↩ (¯1¨)⌾(𝕨⊸/) blocknums
+  blocknums⊔𝕩
+}
+
+Prep1Proc←{ # Prepare one step of procedure
+  # Converts "move 3 from 1 to 3" into [⟨1,3⟩,⟨1,3⟩,⟨1,3⟩].
+  •ParseFloat¨⟨1,3,5⟩⊏(' '=𝕩)Split𝕩
+}
+
+Prep←{
+  ⟨rawmap, rawproc⟩←(""⊸≡¨𝕩)Split𝕩
+  map0←⍉>¯1↓rawmap            # Drop last line and transpose
+  map1←(1=4|↕≠map0)/map0      # Extract crate letters from chaff
+  map←⟨""⟩∾{(𝕩≠' ')/𝕩}¨<˘map1 # Convert to a 0-based list of strings
+  proc←>Prep1Proc¨rawproc
+  ⟨map, proc⟩
+}
+
+ExecuteMove←{⟨n,from,to⟩𝕊stacks:
+  crates←n↑from⊑stacks
+  stacks      (n⊸↓)⌾(from⊸⊑) ↩
+  stacks (crates⊸∾)⌾(to⊸⊑)   ↩
+  stacks
+}
+
+Main←{𝕊⟨map,proc⟩:
+  ⊑¨1↓ map ExecuteMove˝⌽proc
+}
+
+•Show Main Prep •file.Lines ⊑•args