summary refs log tree commit diff
path: root/25/input-commented
diff options
context:
space:
mode:
Diffstat (limited to '25/input-commented')
-rw-r--r--25/input-commented278
1 files changed, 278 insertions, 0 deletions
diff --git a/25/input-commented b/25/input-commented
new file mode 100644
index 0000000..1ea20b8
--- /dev/null
+++ b/25/input-commented
@@ -0,0 +1,278 @@
+; 0 0 0 0
+inp w        ; w = digit[0]
+mul x 0      ; nop
+add x z      ; nop
+mod x 26     ; nop
+div z 1      ; nop                  **NOTE** parameter M[0] = 1
+add x 10     ; x = 10               **NOTE** parameter N[0] = 10
+eql x w      ; x = (digit[0] == 10), which is 0 for valid input
+eql x 0      ; x = (digit[0] != 10), which is 1 for valid input
+mul y 0      ; nop
+add y 25     ; y = 25
+mul y x      ; y = 25 if valid digit, 0 otherwise
+add y 1      ; y = 26 if valid digit, 1 otherwise
+mul z y      ; nop
+mul y 0      ; y = 0
+add y w      ; y = digit[0]
+add y 10     ; y = digit[0] + 10    **NOTE** parameter O[0] = 10
+mul y x      ; y = digit[0] + 10 if valid digit, 0 otherwise
+add z y      ; z = digit[0] + 10 if valid digit, 0 otherwise
+
+let m = vec![1, 1, 1, 26, 1, 26, 1, 26, 1, 1, 26, 26, 26, 26];
+let n = vec![10, 13, 15, -12, 14, -2, 13, -12, 15, 11, -3, -13, -12, -13];
+let o = vec![10, 5, 12, 12, 6, 4, 15, 3, 7, 11, 2, 12, 4, 11];
+for i in 0 .. 14 {
+  w = input.pop();
+  x = if ((z % 26) / m[i] + n[i]) != w { 1 } else { 0 };
+  z = z * (25 * x + 1) + (w + o[i]) * x;
+}
+
+; _ _ a a    where a = digit[0] + 10 if valid digit, 0 otherwise
+inp w        ; w = digit[1]
+mul x 0      ; x = 0
+add x z      ; x = a
+mod x 26     ; x = a % 26
+div z 1      ; nop                  **NOTE** parameter M[0] = 1
+add x 13     ; x = a % 26 + 13      **NOTE** parameter N[1] = 13
+eql x w      ; x = (a % 26 + 13) == digit[1]
+eql x 0      ; x = (a % 26 + 13) != digit[1], 1 for valid-so-far
+mul y 0      ; y = 0
+add y 25     ; y = 25
+mul y x      ; y = 25 if valid-so-far, 0 otherwise
+add y 1      ; y = 26 if valid-so-far, 1 otherwise
+mul z y      ; z = a * 26 if valid-so-far, a otherwise
+mul y 0      ; y = 0
+add y w      ; y = digit[1]
+add y 5      ; y = digit[1] + 5     **NOTE** parameter O[1] = 5
+mul y x      ; y = digit[1] + 5 if valid digit, 0 otherwise
+add z y      ; z += y, thus fail if y is nonzero
+; fail if z is nonzero
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1      ; note
+add x 15     ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26     ; note
+add x -12    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1      ; note
+add x 14     ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 6      ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -2    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 4     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1     ; note
+add x 13    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 15    ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -12   ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 3     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1     ; note
+add x 15    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 7     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 1     ; note
+add x 11    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 11    ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -3    ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 2     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -13   ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 12    ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -12   ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 4     ; note
+mul y x
+add z y
+
+inp w
+mul x 0
+add x z
+mod x 26
+div z 26    ; note
+add x -13   ; note
+eql x w
+eql x 0
+mul y 0
+add y 25
+mul y x
+add y 1
+mul z y
+mul y 0
+add y w
+add y 11    ; note
+mul y x
+add z y
+