about summary refs log tree commit diff stats
path: root/linux
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-06-15 20:34:24 -0700
committerKartik Agaram <vc@akkartik.com>2021-06-15 20:38:45 -0700
commit03e6248c14216bd71af0f0db0e311713ca5fbf72 (patch)
tree0ae5189ce8254f5a7e1c160283068dde71d3befc /linux
parent3a3fe4addb979859150bfe3791f60c2c63c778aa (diff)
downloadmu-03e6248c14216bd71af0f0db0e311713ca5fbf72.tar.gz
example program by Sumeet Agarwal
https://adventofcode.com/2017/day/1
https://archive.org/details/2021-06-02-akkartik-sumeet
Diffstat (limited to 'linux')
-rw-r--r--linux/advent2017/1a.mu48
1 files changed, 48 insertions, 0 deletions
diff --git a/linux/advent2017/1a.mu b/linux/advent2017/1a.mu
new file mode 100644
index 00000000..39bb1ff8
--- /dev/null
+++ b/linux/advent2017/1a.mu
@@ -0,0 +1,48 @@
+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
+    var next_digit/eax: int <- copy next_digit
+
+    {
+      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
+}