From 6515bace46c558739d0bf280da2c95569e12beca Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 15 Jun 2021 20:41:34 -0700 Subject: . --- html/linux/advent2017/1a.mu.html | 85 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 html/linux/advent2017/1a.mu.html (limited to 'html/linux/advent2017') diff --git a/html/linux/advent2017/1a.mu.html b/html/linux/advent2017/1a.mu.html new file mode 100644 index 00000000..9eed512f --- /dev/null +++ b/html/linux/advent2017/1a.mu.html @@ -0,0 +1,85 @@ + + + + +~/play/mu/linux/advent2017/1a.mu.html + + + + + + + + +
+fn main -> _/ebx: int {
+  var input_stream: (stream byte 0x8000)
+  var input_stream_addr/esi: (addr stream byte) <- address input_stream
+
+  var sum/edi: int <- copy 0
+  read-line-from-real-keyboard input_stream_addr
+
+  var temp/eax: int <- read_digit input_stream_addr
+  var first_digit/ebx: int <- copy temp
+  var this_digit/edx: int <- copy temp
+
+  {
+    var done?/eax: boolean <- stream-empty? input_stream_addr
+    compare done?, 1
+    break-if-=
+
+    var next_digit/eax: int <- read_digit input_stream_addr
+    # hacky newline check
+    compare next_digit, 0
+    break-if-<
+
+    {
+      compare this_digit, next_digit
+      break-if-!=
+      sum <- add this_digit
+    }
+
+    this_digit <- copy next_digit
+
+    loop
+  }
+
+  # the last iteration will need to compare the last number to the first
+  {
+    compare this_digit, first_digit
+    break-if-!=
+    sum <- add this_digit
+  }
+
+  print-int32-decimal 0, sum
+
+  return 0/ok
+}
+
+fn read_digit input_stream_addr: (addr stream byte) -> _/eax: int {
+  var next_digit/eax: byte <- read-byte input_stream_addr
+  next_digit <- subtract 0x30
+  var next_digit/eax: int <- copy next_digit
+  return next_digit
+}
+
+ + + -- cgit 1.4.1-2-gfad0