about summary refs log tree commit diff stats
path: root/apps/advent2020/4b.mu
diff options
context:
space:
mode:
Diffstat (limited to 'apps/advent2020/4b.mu')
-rw-r--r--apps/advent2020/4b.mu20
1 files changed, 20 insertions, 0 deletions
diff --git a/apps/advent2020/4b.mu b/apps/advent2020/4b.mu
index d4a3496e..ffeddb32 100644
--- a/apps/advent2020/4b.mu
+++ b/apps/advent2020/4b.mu
@@ -157,6 +157,26 @@ fn main -> _/ebx: int {
         var pid?/eax: boolean <- slice-equal? key-slice, "pid"
         compare pid?, 0  # false
         break-if-=
+        # convert val
+        var s: (handle array byte)
+        var s2: (addr handle array byte) <- address s
+        _slice-to-string val-slice, s2
+        # check length
+        var len/eax: int <- length s2
+        compare len, 9
+        {
+          break-if-=
+          curr-passport-field-count <- copy 8
+        }
+        # check valid decimal int
+        # parse-decimal-int-from-slice currently returns 0 on invalid parse,
+        # which isn't ideal but suffices for our purposes
+        var val/eax: int <- parse-decimal-int-from-slice val-slice
+        compare val, 0
+        {
+          break-if->
+          curr-passport-field-count <- copy 8
+        }
       }
       loop
     }