From e3536f18276785332675e8298526defa8e5deb58 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 8 Dec 2020 22:26:20 -0600 Subject: [PATCH] updated day 8 to use new StringReader --- day8.onyx | 41 ++++++++++++++++++----------------------- out.wasm | Bin 9128 -> 9589 bytes 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/day8.onyx b/day8.onyx index 06f6a66..52234c9 100644 --- a/day8.onyx +++ b/day8.onyx @@ -1,14 +1,15 @@ #include_file "core/std/wasi" use package core +use package core.str.reader as reader OpCode :: enum (u16) { Nop; Acc; Jmp; } Instruction :: struct { - opcode : OpCode; - data : i16; + opcode : OpCode; + operand : i16; } // Returns if the program successfully exited. @@ -29,14 +30,13 @@ get_acc_value :: proc (instrs: [..] Instruction, ret_acc: ^i32) -> bool { if i32map.has(^already_been, ip) do break; i32map.put(^already_been, ip, true); - instr := instrs[ip]; - switch instr.opcode { + switch instrs[ip].opcode { case OpCode.Nop do ip += 1; - case OpCode.Acc do { - acc += ~~instr.data; + case OpCode.Acc { + acc += ~~instrs[ip].operand; ip += 1; } - case OpCode.Jmp do ip += ~~instr.data; + case OpCode.Jmp do ip += ~~instrs[ip].operand; } } @@ -46,27 +46,22 @@ get_acc_value :: proc (instrs: [..] Instruction, ret_acc: ^i32) -> bool { main :: proc (args: [] cstring) { contents := file.get_contents("input/day8.txt"); - contents_data := contents.data; - defer cfree(contents_data); + defer cfree(contents.data); + + file := reader.make(contents); instrs: [..] Instruction; array.init(^instrs, 32); defer array.free(^instrs); - while true { - if contents.count < 3 do break; - - word: string; - str.read_chars(^contents, ^word, 3); - str.discard_chars(^contents); - - sign: u8; - str.read_char(^contents, ^sign); + while !reader.empty(^file) { + word := reader.read_bytes(^file, 3); + reader.skip_bytes(^file, 1); - val: i32; - str.read_u32(^contents, ^val); + sign := reader.read_byte(^file); + val := reader.read_u32(^file); - str.advance_line(^contents); + reader.advance_line(^file); if sign == #char "-" do val *= -1; @@ -76,8 +71,8 @@ main :: proc (args: [] cstring) { elseif str.equal(word, "jmp") do opcode = OpCode.Jmp; array.push(^instrs, Instruction.{ - opcode = opcode, - data = ~~val, + opcode = opcode, + operand = ~~val, }); } diff --git a/out.wasm b/out.wasm index 3c4a9762ec0cae083db1589438865281f47e9f1d..e2940a1b8bee0879f7c32180c934c49bd50556ac 100644 GIT binary patch delta 3269 zcma)8-EUk+6`zlL?_Te$z2k3ty|(ABH?fl@j!B)*2E}9Qq)D3(k`$!`uubB$UT;3V zZfR7qq^cl7AXJS&MKY*Df<_gHR+TCcJOo~Vhx`LYMMCgUgevtVYI!K-cjoRIJ1P>p z((KHfnRCvZ^E(o zuRSw+p6s|Ooz#1}8jK6ibww!p%Tf(!(;g=&?_ zjr;NZ^{1C-pI)dvC}{J7<;5Ed4Y53PT1wR}6+TgvRU)rcn^jmxGE_37q862J5m~8Q zRHWiKpUq^$s6{{+WumAxlDSAkLMkD%A}drBOX!jAZ+y$Pv6c*HmMK1&{o%~%A!c|m zWteTVfu7EXn0>%(h^ewH@80b^=t_k@JDHnt(*sk{guTm5;J#Pve(OgAn!C@04|hfd z%e5#NF(zUo$}De$D`sBfXI&gk2WNK+=3bFSdjb>nOU}dk2rF@GDrIJv9(XMg_9Ipb z#sn0PiNFZGDUk+l=}f_}X}D^*jVmzrdbF)0#Gc_>9q*@lH3_*X{lh3~oM(xcHEinc4#-h9|=7HsT1y z9bP0txqCxH^oG#C!K=D1N4tK_c|c}^G+Kexdb9gY>sb9*FqIR^1SUl2w~MLf7we#E zSY-!iZIW>SfKF7BFo#*xl#X-pyGlY!FM^_QqbSUAg`g>Aq=^tflQDrFH32;YgBl)Y z_BQu9nl2zadAK5o|VhAcn}Du$nU19wYQqc#gmI6hyfS5cjbA&X74! zP)3-rk_fV?T5(Z#`4ifxR~v|7RwMHIA$y0HB!LA(0OYvgZ1>|2>?JY@;Cg_JHzzTr z)CLvZQm_GqomKUT1aE*AOoZV8UR=-Kllrl#6ppzBSoo*XZS+_)`ktLHsY2*<;e;#6NLO3g%e?EkP6ksY_QZ##bs*gmW)T-NP3^a!(El$J-`*49n@wmaFn z>!G$396vYw7kZ|kiiCP*<0TY5y{}=+P<)6O_WGKeq$+1{8AyK$PLtHcT9p||^c)jC=M3&7K@t-8>=s?kiEh@}x`Gq7uVRhv z7gG{hB?^CHW~LQ&hN+dXQ}>U0lKe_7M)W8Q$axYa88B96x7gO4jHNfZ9!|BLLYwev z&%n5!d;y`|?lEHP)g%B6O3*e&D!17VEA>Gti6jhDLA@cl&l)1WCTd8!8v>DpASM{; ztAHy5z0Z@Qps@5&Sc){5LK2j~I-uZ6640v!0VO!mij;$qQ+P`&9^ovcoo84IacLR0 zNPj6Lg&2x77#J*9bO~e+`uLbBMElg|;MM z`kZSG2QrP$>H7PB%=f!r^;g^wX+|9}V6rUSb{!M7dA}D5P!65SHCvdrx&xeP~4EaD%x3 z<@T_*tJ&CXp8=s5MvplWw^G<{j}waCwEe51IC8^uReofAp-Z_=0Mu&z?$QYm-)5t znPSR)JT!DMuRJ+`2hc53aww=3@_{8BrjM)-9ga}Ue9N6Uac%u_-?3{{W87w|;M?`* zmMZ9F9}f*qdhGJNsy5^1sR!MNlpTgU8(K3F#r7C@!HpFAUGA&uCFXG+o2c@^756d%yuhTxrE<7g)rKF z)nm_}U%9kWov&TFZl0a5t}N^~n-;Uo?ob@#ge#9cTKs^i@Zx-R8OrW6CFjqdXZ8)Q Kg7;@%V*ddEI5gX-Bc+O2(TB&EnaUN zH(s|8MY)a03w=S+2oZiH5L5yoP#y}r@Ic`O1P=%#cmf(;=tD`QDxxn0#5ecasa-%q zS2}m*%$YNDzVn@P@88dU_e@On%}b1k*wxM@9>*+R^5QtYZU@W?7qj$zJ$Z+A9$!x< zET+_emWb?jT5?iz`=Z2EvWv&pQis= z+*;pk)j!=_3F=o~*j#*JrA4%NA)730u3lZ)UcU8*pG$5R@TVfs}DEot&0dZC>Z$u31Y zYRDcll9@3b*&;h-4raeJm{-m)C+#*B;oY!OYPL4XNjWt#f3EhkIddkWctnR_Nw`jHyOG1zClx7u&1nNj+#+FaFYp~&+MEp?l9)XRjM$p8a0dAv)?Im z{Ti#dfJQ;Mip$ZmgL9aqqM~VBJc&>S=F9%UP6nM~2b^8%-}^_+g7+G`01*4k1wLfn z3G?QyAbo$aHe~K*NB!HZ>;R(f+-z*I3ufIZoq$-$D2_|3j77+WE>$ZIP#;YJ0}>X% zC}`w_;)zYLrsYdWQN^1g9iN6n%84BZf%3F$!AFq#tN7_Lz8?BN&hc@Md8j_FzPSw; zX$ipOuzpAtODD@I7r>cYg>LyD%B6Clrrm~giaJRQHRW8HC6vN|D+ZK#Q64fQQL*qL zc~nu2#Hqdc-EW5SM{I7zuH2fl(Vxsmof-3HwQnNf>I8_#5^~x18#mk(wUfAT%T6t9 zxE~fRM<0@TyZte@MEa(=-?p!GREU1YKr0=rffP0&+vq53Z<)F85qTQSiS;Y8O1j%( zq0JZMes(aZ&OpfDSL_G!L{a>XG2b%JO_}FvDL-OPwGGG5 zxKj}q%0<4Ij38~HHY&jwBNdD?uH14^4ppGS6Rfy1DDbJBN4aCHkadWme^?)lvKKjm zPbpuyqpbL|M%mw13ww^YqxB*tL_`H4P{V%0K$LBpa&1*Yn7`yFI+M7#a9%Ht?_L;RYm~VesZ_b*J0;q2jJataptKKsz{L5{V>gliNE1p4g>;i4(}B(OlXkFH zBc#tBp7OZ22n%_-C_H4`{Ip{}1q)on;VD=}^Xq;EX#UoJFkdC z?)Tj9YC~n$oX>W}=z)ZO#Bmd??>50#8x#nO`9eGR4(2C0P_E|j2}Yo- zRdIW7R}(aeL*F`th^zoVQI&EWaG(tKxcDC)V1*V{cJ1|$v)(GQHq5(G2vt0qZ2PT} z`D(E<{{-d{@}I;d4=P74B;T#R!fA7_?~=*L5zzTsp=8d>;mYRDC&p4M<*uf4xI5Y2 zCv4Na+W)NiYw_#su=#vn{M`whUY|%*sdS<($vmENw_LoV-iVFP2 zKpmtyF!;Shmdt~}8(mZ2vjP!iI}D?Sc4dcI7wSB|!(4eN02`(lhec99w%k!G2oakS zPJ=d0`x#H?$Q>G|E5=~9tCo%vp^yfYC~e!><-PmtkA-V~Qu)}qUR%2OwA!AkAaIl% z&51!wEEqbEOHSwTx1jHn_Ao>ma-!$I>^g2r%Kpt9SF`5QK%Pwk>k)HjU?18DOUw9; zw2lFQZ(a=g<@$5G3obaBnH#f2U0STwRyiEFC3>uf<=!Z