From b80bd0674cd8a1724c879c6fa6a1d81c51c18fa2 Mon Sep 17 00:00:00 2001 From: dobiadi Date: Sun, 25 Dec 2022 10:26:59 +0100 Subject: [PATCH] Day25 --- day25/input.txt | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ day25/snafu | Bin 0 -> 20832 bytes day25/snafu.c | 102 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 213 insertions(+) create mode 100644 day25/input.txt create mode 100755 day25/snafu create mode 100644 day25/snafu.c diff --git a/day25/input.txt b/day25/input.txt new file mode 100644 index 0000000..ce170c3 --- /dev/null +++ b/day25/input.txt @@ -0,0 +1,111 @@ +1=021=20---11-1=1 +222==-=1-2=-11-11 +1010==0=0=1--=1 +2 +1122= +2222==2222-2--10 +100=-2-002= +12221-2-10-=1= +1-=211000=221-1 +2=--12==11221-2-002 +1101==-01===01= +220=0=-2-1-0===10=2 +2-0- +1=-12=2== +1-=-02==-1 +100-0-11--02--0=- +1==0-1220011=- +21 +1102-22== +222 +1==0=22-0--011-0 +1020 +2==2-102 +1010-02==02= +1=1 +2=010==12022= +1=-22001-2= +101=2-201122111 +1=-0021211-1-1-1202 +2-22-2 +1212002==1 +2=-0- +1-1==1122110100 +1--020-2-=-0-21-- +2=22-21220022==1= +1=-00-121-20-2122 +1-==-00 +20=21=0 +20-02-0-=-==-=22 +1120==-2 +2=--0-0-000201=101 +1---=02=21 +1-011 +211-2112=20--2 +1=- +1=--=021 +1-1-122200==1-1111 +11001- +200=200 +1===21=1-2 +1===10 +2=22 +10-110210=01112- +2121=1=2=-201- +1---2=-0=- +211-120---000=-0- +1- +1-101-2=01020=-0= +112-12--0=12=12-- +1-0-=2--=--12=20 +1=0=-121 +1000122-210--011200 +120==-1-=01 +1=2=1-- +101-1=--2- +2= +2--10 +2201020-=2- +1===2001-1=0= +222=-2---2=112 +2010=-22=012=202= +111 +1-2112=0200=1 +2=02211=2 +2-121 +1----12=-2011 +2==0 +112 +22=0==1-1= +1-20=0- +1=110211-022201222 +20 +1-111 +1=-=022011=2=2=1 +1-02122 +2-1 +1-2-=2-0=0--- +1-20 +1=1=102 +1=1=0--1 +11222-==0101- +2122100=0 +2011==12-10 +210--121-0= +22121=01=0=-=-=-== +10-0-=1-12 +2-2=21 +1=1-0-0- +10020 +10-0-0120=211-2- +1-==10-0-==001201- +1-0 +21=00202002-0 +1-1=2021 +11=1==1=0 +1=102-1=-20-0 +2=100-12-0= +1=0 +1--= +12=212110200- +222002100 diff --git a/day25/snafu b/day25/snafu new file mode 100755 index 0000000000000000000000000000000000000000..55139cfc1e5ddce925ebb235e1a8d6e2002697ac GIT binary patch literal 20832 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 jx#wEA^#?b*aA%cs9k literal 0 HcmV?d00001 diff --git a/day25/snafu.c b/day25/snafu.c new file mode 100644 index 0000000..95ce479 --- /dev/null +++ b/day25/snafu.c @@ -0,0 +1,102 @@ +#include +#include +#include + +#define BUFFER_SIZE 64 +#define MAGIC_NUMBER 5 + +long powNum(long, long); +long snafu_to_human(char*, int); +void human_to_snafu(char*, long); + +int main() { + char buf[BUFFER_SIZE], *p, c; + memset(buf, 0, BUFFER_SIZE); + p = buf; + long sum = 0; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + sum += snafu_to_human(p-2, p-buf); + memset(buf, 0, BUFFER_SIZE); + p = buf; + } + } + + printf("Sum in decimal: %li\n", sum); + char snafu[64]; + memset(snafu, 0, 64); + human_to_snafu(snafu, sum); + printf("Sum in SNAFU: %s\n", snafu); +} + +long powNum(long b, long e) { + long result = 1; + for (int i = 0; i < e; i++) { + result *= b; + } + + return result; +} + +long snafu_to_human(char* p, int len) { + long result = 0; + for (int i = 0; i < len; i++) { + switch(*(p-i)) { + case '0': + break; + case '1': + result += powNum(MAGIC_NUMBER, i); + break; + case '2': + result += 2*powNum(MAGIC_NUMBER, i); + break; + case '-': + result += -powNum(MAGIC_NUMBER, i); + break; + case '=': + result += -2*powNum(MAGIC_NUMBER, i); + break; + } + } + + return result; +} + +void human_to_snafu(char* p, long decimal) { + char buf[64], *q; + memset(buf, 0, 64); + + long num = decimal; + int len = 0; + int remainder = 0; + + while (num != 0) { + int numeric = num % MAGIC_NUMBER; + num /= MAGIC_NUMBER; + numeric += remainder; + remainder = 0; + if (numeric > 2) { + remainder = 1; + numeric = numeric - MAGIC_NUMBER; + } + if (numeric == -1) { + buf[len] = '-'; + } else if (numeric == -2) { + buf[len] = '='; + } else { + buf[len] = '0' + numeric; + } + len++; + } + + if (remainder) { + buf[len] = '1'; + len++; + } + + for (int i = 0; i <= len; i++) { + *(p+len-i-1) = buf[i]; + } +}