From cb232e37cbca4e27fc3ced90a1d24e9913b7de5e Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 10 Dec 2020 08:41:55 -0600 Subject: [PATCH] added day 10 --- day10.onyx | 54 ++++++++++++++++++++++++++++ input/day10.txt | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ out.wasm | Bin 8634 -> 8722 bytes 3 files changed, 146 insertions(+) create mode 100644 day10.onyx create mode 100644 input/day10.txt diff --git a/day10.onyx b/day10.onyx new file mode 100644 index 0000000..a2181d0 --- /dev/null +++ b/day10.onyx @@ -0,0 +1,54 @@ +#include_file "core/std/wasi" + +use package core +use package core.str.reader as reader + +count_ending_paths :: proc (nums: [..] u32) -> u64 { + tally: [..] u64; + array.init(^tally, nums.count); + defer array.free(^tally); + + for ^t: tally do *t = 0; + tally[nums.count - 1] = 1; + + while i := cast(i32) (nums.count - 2); i >= 0 { + for diff: 1 .. 4 { + if i + diff >= nums.count do continue; + + if nums[i + diff] - nums[i] <= 3 do tally[i] += tally[i + diff]; + } + + i -= 1; + } + + return tally[0]; +} + +main :: proc (args: [] cstring) { + contents := file.get_contents("input/day10.txt"); + defer cfree(contents.data); + + file := reader.make(contents); + + nums: [..] u32; + array.init(^nums); + defer array.free(^nums); + + while !reader.empty(^file) { + array.push(^nums, reader.read_u32(^file)); + reader.advance_line(^file); + } + + // Slight hack, but having 0 in the array makes both parts easier + array.push(^nums, 0); + + array.sort(^nums, cmp_asc); + + diffs: [3] u32; + for ^d: diffs do *d = 0; + for i: 1 .. nums.count do diffs[nums[i] - nums[i - 1] - 1] += 1; + diffs[2] += 1; + + printf("Diff prod: %i\n", diffs[0] * diffs[2]); + printf("Arrangements: %l\n", count_ending_paths(nums)); +} diff --git a/input/day10.txt b/input/day10.txt new file mode 100644 index 0000000..ccf88b7 --- /dev/null +++ b/input/day10.txt @@ -0,0 +1,92 @@ +17 +110 +146 +144 +70 +57 +124 +121 +134 +12 +135 +120 +19 +92 +6 +103 +46 +56 +93 +65 +14 +31 +63 +41 +131 +60 +73 +83 +71 +37 +85 +79 +13 +7 +109 +24 +94 +2 +30 +3 +27 +77 +91 +106 +123 +128 +35 +26 +112 +55 +97 +21 +100 +88 +113 +117 +25 +82 +129 +66 +11 +116 +64 +78 +38 +99 +130 +84 +98 +72 +50 +36 +54 +8 +34 +20 +127 +1 +137 +143 +76 +69 +111 +136 +53 +43 +140 +145 +49 +122 +18 +42 diff --git a/out.wasm b/out.wasm index b4c5fb6b929a829346bba0836dffc10970ce6649..ac69ff6db5ad55c9b829c92ce1af9e28b7bd37ff 100644 GIT binary patch delta 3225 zcma)8U2Igx6`nJ9?%un5cfGTYiOt&JxwbJs3O2vyClox6fdqnS6;*wxBIDpS^4*Q0 z_9B`Ju}11ss#a=-zND2PFO6C?3K4lJPmz$KN_}Z0p8C>CeP~rFQlvgrO{#upu5AqB zp;*kFIp@robIyFh@tStVh@mw{#z1+IG(hw>*f36Z$bAwQIU!?vpCDorOkk>#cZq_|uo#k7XCuN$BMdZF z>#AGrKS*2Lr~L=a8+9W`M3skRoQUnoekOPW%yq&2$qZ~AfWinHH=(;jyCl2E#E_c} z2Gs=|>K@b|j16LsKbp59B&^Ct?2>UyvrRI_KCxDoGTq}o3DW-UPqy$*Y=L)unEklh zsvhREe;1Csj|#Cp&t5(z3iB|Hk5ZREOr^a?Lke3B24$p9)4<11bt9(W44KE77Vfcr zsXKto(C%Q9xVv^l&yYlt8}aqJQFY3FQP>@PF8BEGa+<}^@NF%Lk`Ajo}oEEUAW*V`LiL98xut{$UhH8w4 zb3Zs;A?PUEP(N*n>X-x2!&g}($up(}E*>HXvsAJ=iIJ?KX4QRNIKt&ck|(06?rwi2 zh)HwVY9r=mXhi)g32ANRU{;rrik!A(ZJZhzcy@0ASZC*4T#;Fhp%Nh=@X(?Kw6q3 z2@`1uz>eyAzx(Uxt}Fpk#U{!Fr9I~skX}n=4pVsXL`sDSBAWJ(0$(ZUH7n((6IZw zvX5S6Q`hWDXotJeHSX7JbBRXX&gyNy=cm2Dk3U-MuKar zgiDV3l3(FTb41{7xf}aVrgzt2q0iRctF;SnhDfHGe9ylMjBzG4(={c3Q2-S7UgutKRMIfqj4+r)lncw#fx@gAJtJHNF15T|`C zY;`^61onG6@(J&t@NE1JPx53oI0=;EnTYwVC>!iaRT?r1CS=e0M6Z)_6Fa5t1HN?K z=O|Gt{q5779m_GqSx3+40YB3xe6oIr@G@*Ay$#Bd42&rQ@$5!2Wfij_;C=%(1ZV(h z;GqW3yW{|%USJZX!N!J=-w+tK*r3m&Jz(Z^Hc6T+;C1#q%jX*Ik|Vg42|0o&Okq6= z|5nM&u6;L*?3coJp}6Q+dY%u8GVaOW ze5$&a^_xlJO_`ZhH@2W%Q$KrpL;5K^z delta 3185 zcmZ`*U2I%O6`q;F7JRs{utgg|Xy%0q>C>jMuwK_04t3U45_;yZWOb{ZA` z%sq4FoHOT~Ip>@C@v+|>?Xu>|70wvrclee$(e3i?oZrO{zA=5folZ94y_Mc1AU-iX z5NwX7nULsq7#U%6jLmU;e9|V8cOcv8Kt*8e^!C8|L}sW1rPaPUe8>S9@>ZcMZi&2W z@-fa_$}6|u-7z39&0m;rwwo)jEPs!AZi?4NSmCAS%H<2!msi@&i%SbRNVFH0mKbwu zyu!WPuMc$su`IDfhPimC7#Bj%%Y!2ee&F+~aP|{EUOyYhoLMHl$4098 zKRkY_$TU--WhecHWvR40b>sOL+`orwyy1$K!|@UAO|TS$n+_}Gr!|xh2qqKg5tV3` zy2rxdAX{+*;jn9Xkt>9i7)w(kT2g1+kHWp~rLkk`92Z>;#VO%i-cs7V9z5ZS;Z}ae z?GCHm4dc5Zvms@ARJ252*3x{&dtmv1@Z||1x}u|n38BV~Uk|izqotPdMZ;@|hQ|D< zg3!SZkJWQJ)ZSpqOel3=qm~I0CZ!HjX%yMz=lup^lA5Qo$N2UJ!+n}Oa_}yP`%i)A zX%2lP!`|gk^vFB7(^J+$JqkaV_EiZP-lc=o-OkUu8_}gf%DH7)ScQ=f=9qgS*YKZ& zC3iJ9ldR`$oe@VAITHD#`(F%!^&w$V8x z5UCar{zQ(P+E@+X3*@7oZavfjzG#%`12+6GHyOgD`$1gaHOe`P%|?s$-kyD3O<~Cv z_qujXjWavcnqca2w^rEB@3@~8_J4Drm)Ey6e_JJ0nH`qUo>f|8hn32GNV;W6GdP}l zlxoEan!+V8wq^{TG1RWCtK35Rsr!#gTvJuhS8JuV`=^q8-2GS8vw6+ES$sALkP7Uy zrdn#ddvkD_A0pAj-()}H&K37$Y|@zHlkW54jm*Mp!31@xJ6U_~@H?Cb-EoG%HKIfL zJ@a!T>`h+xQKK3I993h+%c>`+YBo#tNY$)zP6l5oM&N0VcG+Z~4rbgBht7^3zV$V5s*b{kZJd?O4)KM3=Hxh4ge)OC6X*z0GB%)36Ch@mWag(1}CYjvldr7tB_Cw zE=~{l0rq##jb21-?~VQ<8*A>?wj13V7N{ZZeP(@iBt?(e&zKEBO3L+5LXmd;4h#!B zjjilQ%nqz?du(&t2U1~t1BB24iff%fM4QQik|L*1g3zkx^`<)DhWY_RLP~CJ+faAi zOtMa(Uu>lX?J_|UCP?+yj~_4a9(l?PWdeFg4HF#M5%d#$m=dFwo16*j!3LQ5Iy?t3 z^R;)%ZzLQ+n+UQV5CF1?k@bAn#C_z8wItyfa7z+KnY2D&3jNiBPJ5jdXSEePT@Ea4SSTIS(w$%AJZ-Z?xC}_kMY&3r7a>M>fIwJ|H~2H??&qcW&fRF#|V_h>-9M z+^X)ZcdvSjf59X*I0-3r)Gdp>d><^A-EYOVZXTCG{~nNkygRz%P^;7D#H+`gex3(@rJ@`U1|@7hMFN+ta;zU!G&kPPpu=L zr5n6&`&C2tIV=PuMLGc`9B$QB?sj*c4w2#(QB`A;`xO40Dn4lMh4|$;KQ1M}=@mzDHGzsh0Zz)!_ zFa{mGw#YRog20gi=i{o{?f#rp^EOnQy*waCiIVHnV?Yl0)t9_#oi>O#1C>*B6-m on90)V