diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-06-15 20:34:24 -0700 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2021-06-15 20:38:45 -0700 |
commit | 03e6248c14216bd71af0f0db0e311713ca5fbf72 (patch) | |
tree | 0ae5189ce8254f5a7e1c160283068dde71d3befc /linux/advent2017 | |
parent | 3a3fe4addb979859150bfe3791f60c2c63c778aa (diff) | |
download | mu-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/advent2017')
-rw-r--r-- | linux/advent2017/1a.mu | 48 |
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 +} |