commit 4671b7691c7d8fd8e7c410378f1d689f7ab43012 Author: peterino2 Date: Wed Jun 10 23:47:08 2026 -0700 zig aoc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19892e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.zig-cache diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..802c926 --- /dev/null +++ b/build.zig @@ -0,0 +1,24 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const exe = b.addExecutable(.{ + .name = "day1", + .root_module = b.createModule(.{ + .optimize = optimize, + .target = target, + .root_source_file = b.path("day1.zig"), + }), + }); + + b.installArtifact(exe); + const run = b.addRunArtifact(exe); + const step = b.step("day1", "run day"); + step.dependOn(&run.step); + + if (b.args) |args| { + run.addArgs(args); + } +} diff --git a/day1.zig b/day1.zig new file mode 100644 index 0000000..087c056 --- /dev/null +++ b/day1.zig @@ -0,0 +1,49 @@ +const std = @import("std"); +const Io = std.Io; + +const shared = @import("shared.zig"); +const print = shared.print; + +pub fn main(init: std.process.Init) !void { + try shared.sharedInit(init); + const allocator: std.mem.Allocator = init.arena.allocator(); + const bytes = shared.loadBytesArg(allocator); + + var l: shared.LineIter = .{}; + var acc: i64 = 50; + var part1: i64 = 0; + var part2: i64 = 0; + while (l.nextLine(bytes)) |line| { + const c = line[0]; + const r = std.fmt.parseInt(i64, line[1..line.len], 10) catch unreachable; + if (c == 'R') { + if (acc < 0 and acc + r >= 0) + part2 += 1; + + acc += r; + while (acc >= 100) { + acc -= 100; + part2 += 1; + } + } + + if (c == 'L') { + if (acc > 0 and acc - r <= 0) + part2 += 1; + + acc -= r; + while (acc <= -100) { + acc += 100; + part2 += 1; + } + + if (acc < 0) acc += 100; + } + + if (acc == 0) part1 += 1; + const x: u8 = if (c == 'R') '+' else '-'; + print("{d}: '{s}' {d} {c} part1={d} acc={d} part2={d}", .{ l.line, line, r, x, part1, acc, part2 }); + } + + print("answers: {d} {d}", .{ part1, part2 }); +} diff --git a/day1/input.txt b/day1/input.txt new file mode 100644 index 0000000..084787d --- /dev/null +++ b/day1/input.txt @@ -0,0 +1,4239 @@ +R39 +L20 +R17 +L41 +L21 +R28 +R14 +R23 +L27 +L16 +R35 +L50 +R26 +R7 +R46 +R19 +L31 +R7 +R11 +L16 +R19 +L30 +L17 +L36 +L12 +R32 +L37 +L48 +L29 +R45 +L19 +L18 +L17 +L29 +R50 +L7 +L6 +L25 +L20 +L12 +R14 +R9 +L12 +R46 +R36 +L43 +R4 +R44 +L22 +L12 +R44 +L68 +R76 +L58 +L42 +R7 +L18 +R11 +R12 +R64 +R24 +L49 +L13 +R11 +L49 +L45 +R45 +R93 +R50 +L43 +R12 +R88 +L70 +L17 +R87 +R26 +R74 +L55 +R52 +R66 +L77 +L47 +R55 +R67 +L47 +R95 +L96 +R87 +L57 +R70 +R18 +L20 +R34 +R76 +R5 +L46 +L90 +R28 +L11 +L5 +R98 +R96 +L96 +R40 +L54 +L91 +L95 +L79 +R79 +R61 +L63 +R34 +R68 +R97 +R3 +L259 +R285 +R31 +R91 +L297 +L51 +L45 +R282 +R98 +L20 +L67 +L48 +R20 +L64 +R52 +R69 +R16 +L45 +L48 +L81 +L84 +R283 +L18 +L52 +L60 +R6 +L343 +L51 +R78 +L611 +R19 +R50 +L36 +L25 +R15 +R10 +R50 +R50 +R47 +R53 +L70 +R7 +R16 +L82 +R49 +L20 +L77 +R77 +R36 +R883 +L37 +R24 +R481 +R94 +L18 +R27 +R594 +L84 +L75 +R72 +R67 +L31 +R222 +L40 +L31 +L75 +R28 +R63 +L69 +L1 +R18 +R11 +R9 +L43 +L30 +R5 +L91 +R35 +R33 +R23 +R1 +R878 +L79 +L31 +R31 +R34 +R98 +L894 +R62 +L40 +L2 +R5 +R537 +L62 +R462 +R29 +R803 +R42 +R98 +R28 +R86 +R789 +R26 +L1 +L16 +R23 +R83 +R60 +L64 +L33 +L808 +R15 +R474 +L8 +L26 +L49 +L51 +L84 +L42 +L84 +R10 +R90 +L90 +L7 +R79 +L46 +R74 +R661 +R32 +L832 +R350 +L11 +L51 +L849 +L17 +R13 +R504 +R16 +R60 +L19 +R28 +L72 +L28 +L32 +L2 +L70 +R93 +L30 +L44 +R24 +L27 +L84 +L69 +R45 +L65 +R57 +R887 +L24 +L44 +L783 +R83 +L69 +L209 +L22 +R416 +R44 +R40 +R51 +R81 +R74 +L35 +R10 +L81 +L802 +L23 +L75 +R82 +L92 +R910 +R23 +R6 +L91 +L81 +R36 +L22 +R529 +L40 +R80 +R160 +R48 +R50 +R2 +L2 +L66 +R468 +R380 +R51 +R43 +R52 +R38 +R85 +L49 +R37 +R3 +R27 +L19 +R52 +L79 +R626 +L747 +L224 +R59 +L13 +R78 +R31 +L831 +L66 +L679 +R345 +L19 +R82 +R460 +L23 +L977 +L23 +L16 +L417 +R33 +L86 +L14 +L94 +R94 +R99 +R9 +R92 +L23 +R534 +R589 +L90 +R90 +L40 +R291 +L851 +R69 +L599 +R841 +L361 +R62 +L85 +L39 +L98 +L50 +L31 +R91 +L27 +L66 +L987 +L37 +R17 +R72 +R22 +L194 +R55 +L533 +L68 +L28 +R97 +L70 +L58 +R651 +R254 +R514 +R39 +R47 +R19 +L60 +R41 +L48 +L98 +R13 +R785 +R35 +R79 +R31 +R3 +R93 +R57 +R50 +L20 +L856 +L92 +R68 +L621 +R28 +L24 +L64 +L54 +R95 +L60 +L734 +L66 +R65 +R51 +R36 +R548 +R50 +R50 +R38 +L48 +L90 +R87 +R855 +L471 +R29 +R82 +R54 +L20 +R81 +L997 +L79 +R61 +R18 +R104 +R648 +L52 +R58 +R83 +R59 +L97 +L503 +L51 +R51 +L84 +R417 +R67 +R47 +R68 +R60 +L77 +L98 +L20 +L80 +L15 +L74 +L82 +R2 +R44 +L63 +R88 +L63 +R416 +L612 +R159 +R24 +R33 +L712 +L45 +L60 +L40 +L287 +L32 +R19 +R53 +L20 +L33 +R13 +R53 +L17 +L49 +L54 +L558 +R12 +R48 +L734 +L99 +L43 +R28 +R865 +R35 +R94 +L54 +L652 +R36 +R76 +R76 +R38 +R596 +R90 +L41 +R41 +L59 +L27 +R42 +L45 +R37 +R52 +R60 +R52 +L24 +L1 +L20 +R23 +R54 +L96 +L729 +R40 +L71 +R112 +R501 +L84 +R604 +R425 +R47 +L93 +R94 +R17 +L411 +R41 +L15 +L290 +L85 +L98 +R47 +L75 +L25 +L67 +R767 +L702 +R39 +R63 +L12 +R17 +L105 +L4 +L78 +L442 +R24 +R34 +L696 +L95 +R657 +R84 +L84 +R13 +L150 +R37 +R946 +R682 +L60 +L19 +L24 +L94 +L31 +R35 +R65 +R299 +L15 +R16 +L53 +L47 +L35 +L28 +R36 +L19 +L77 +L77 +L995 +R16 +L20 +L801 +R445 +L78 +L938 +L14 +L15 +L771 +R37 +R14 +R15 +L45 +L55 +R1 +L48 +L48 +R4 +L4 +L23 +R86 +R69 +R89 +R63 +L96 +L87 +R99 +L665 +L51 +L784 +R42 +L442 +L1 +L25 +R40 +R484 +L99 +L99 +L91 +L9 +R56 +L86 +L54 +R84 +L373 +R58 +R867 +L98 +R44 +L9 +L72 +R698 +R85 +R533 +L18 +L14 +R51 +R69 +R44 +L65 +R85 +L53 +L15 +R10 +R90 +R28 +R96 +R59 +R15 +R85 +L89 +L76 +L35 +L30 +R97 +R43 +R90 +R32 +R35 +L706 +R59 +R70 +R69 +L92 +R63 +L30 +R5 +R12 +L417 +R88 +R68 +R84 +L821 +R9 +R27 +R64 +L283 +L29 +L507 +R69 +R31 +L76 +L50 +L74 +R59 +R641 +R815 +L63 +R9 +L48 +R67 +L80 +R83 +L83 +L82 +L14 +R63 +R543 +R87 +L45 +L9 +L43 +L62 +R762 +L569 +L8 +R77 +L2 +L90 +R92 +L29 +L33 +R156 +R791 +L85 +R98 +L98 +L54 +R54 +L482 +R82 +R96 +R4 +L46 +L78 +L20 +L56 +R3 +L49 +R46 +L26 +R3 +R41 +L167 +R234 +R1 +R38 +L495 +L86 +L43 +L73 +L50 +R215 +L92 +L927 +R527 +R2 +R83 +R15 +L98 +L702 +R43 +R27 +L470 +R98 +R40 +L76 +R50 +L29 +R27 +L41 +R96 +L65 +R13 +R87 +L93 +L7 +R44 +R11 +R51 +L22 +L84 +L583 +R81 +R11 +R6 +R11 +R795 +L21 +R80 +R20 +L38 +L83 +L24 +L55 +R26 +R474 +L35 +L88 +L77 +L87 +R64 +L76 +L1 +L15 +R29 +L14 +L64 +L28 +L58 +L50 +R28 +L12 +R84 +L64 +R776 +R39 +L31 +L220 +L477 +L23 +R260 +L60 +R72 +L92 +R91 +R28 +R97 +L218 +L45 +L373 +L60 +L6 +R47 +R25 +R39 +R80 +R915 +L88 +R88 +R68 +R55 +R77 +L197 +L303 +R32 +L95 +R52 +R711 +L78 +L49 +R92 +R35 +L33 +L57 +R28 +L16 +R51 +R94 +R56 +R55 +L678 +L39 +R32 +R7 +L9 +R9 +L69 +L58 +R27 +L47 +R86 +R54 +R70 +L56 +L95 +R34 +L97 +R339 +R12 +L97 +L3 +L75 +L25 +L28 +L845 +R46 +L12 +R739 +R70 +R15 +R35 +R680 +L66 +L692 +L99 +L97 +R54 +R42 +L42 +L773 +R840 +L73 +R6 +R98 +L4 +R34 +R72 +L91 +R91 +L74 +L649 +L72 +L26 +R473 +R83 +L35 +L81 +R81 +L23 +R87 +R36 +R3 +L96 +L527 +R82 +L462 +R29 +R3 +R23 +R28 +R737 +R57 +L40 +R563 +R33 +R67 +L93 +L7 +L733 +L22 +L25 +R66 +L71 +R85 +L3 +R3 +L18 +L82 +R5 +L89 +R25 +L90 +L51 +L15 +R415 +L21 +L26 +R68 +R45 +R34 +R85 +R4 +R11 +R2 +R898 +L38 +L47 +L32 +R193 +L76 +R74 +L20 +R16 +L70 +R98 +L98 +L11 +L71 +R64 +R18 +L47 +L60 +L28 +L65 +L24 +R13 +R55 +R53 +L346 +R518 +L2 +R9 +R24 +R50 +R82 +L79 +L18 +L44 +R9 +R19 +R83 +R60 +R536 +R424 +R66 +L88 +R68 +L25 +R456 +L486 +L468 +L45 +R746 +R54 +R8 +L908 +L98 +R69 +L71 +L98 +R19 +R68 +R24 +L80 +L61 +L7 +L67 +R2 +L56 +L1 +R57 +L50 +L752 +R2 +L73 +R73 +R844 +L94 +R550 +R66 +L65 +L17 +R71 +R76 +R37 +L68 +L77 +R77 +L90 +R62 +L772 +L57 +L35 +R22 +R770 +R17 +R63 +L51 +L97 +R39 +L67 +R7 +L82 +L43 +L35 +R49 +R68 +L68 +L84 +L36 +L81 +R22 +R79 +R7 +L62 +R55 +L9 +R99 +L25 +R62 +R6 +R24 +R75 +L32 +L35 +R1 +L766 +L140 +L89 +R280 +R49 +R5 +R53 +L26 +R68 +L29 +R23 +L70 +R76 +L66 +L34 +R82 +L75 +L67 +L40 +L49 +R66 +L58 +R59 +L33 +L10 +R99 +L917 +L23 +L71 +L98 +R75 +L40 +L15 +R65 +R70 +R80 +L54 +R582 +L778 +L83 +L67 +L29 +R29 +L63 +L23 +R57 +L87 +L84 +L53 +L652 +L885 +L10 +R890 +L326 +L445 +L24 +L95 +R859 +L33 +R267 +R47 +L293 +R41 +R55 +R94 +L37 +L17 +R1 +L71 +L42 +R29 +L20 +L99 +L81 +R56 +R44 +R22 +L737 +R15 +R85 +R15 +R56 +R44 +L38 +L62 +R522 +R1 +L54 +L44 +L15 +L10 +R242 +R469 +R89 +L89 +L1 +L10 +R296 +L64 +R80 +R12 +R76 +L821 +R67 +L46 +L48 +R82 +L81 +L55 +L65 +L33 +R50 +R50 +R90 +L76 +L14 +L31 +R31 +L10 +L70 +L20 +R15 +L15 +L48 +L44 +L6 +R30 +R51 +L83 +L37 +L63 +R46 +R759 +L98 +L7 +L70 +L730 +R31 +L31 +R85 +R15 +L5 +L17 +R64 +L42 +L52 +R90 +R13 +R89 +L40 +R70 +L37 +R65 +R20 +L12 +R94 +R816 +L50 +L66 +L31 +L841 +L48 +R720 +R13 +R49 +R8 +L99 +R86 +L8 +R539 +R93 +L60 +L48 +L73 +R96 +L68 +R86 +L19 +R5 +L53 +L47 +L19 +R91 +R28 +L72 +R37 +L77 +L50 +L31 +L7 +R14 +L79 +R16 +R49 +R20 +R318 +R16 +L64 +L81 +R75 +R73 +R43 +R83 +R17 +L56 +R56 +L530 +R30 +R53 +R18 +R29 +R49 +L749 +L16 +R63 +L95 +L478 +R29 +L54 +R62 +L40 +R34 +R95 +L21 +R950 +L29 +L977 +R77 +R71 +R29 +R111 +R56 +R30 +R3 +R904 +L29 +R3 +R58 +L36 +L7 +R707 +L87 +R11 +L88 +L66 +L670 +L299 +R532 +L62 +R23 +R506 +R646 +R69 +R85 +L31 +R31 +L7 +L39 +R36 +R39 +L377 +R17 +R31 +L79 +R402 +R10 +L33 +R316 +R84 +R88 +L75 +R87 +R376 +R50 +R75 +R2 +R485 +L88 +L48 +L51 +L1 +L159 +L54 +L236 +L51 +L71 +L228 +L16 +L6 +R32 +R34 +R41 +R14 +R27 +L80 +R94 +R59 +L674 +L955 +R29 +L651 +L82 +L3 +R5 +L78 +L91 +L90 +R90 +R17 +L217 +R741 +R67 +L85 +R6 +R61 +L90 +R139 +L3 +R823 +L837 +R72 +L657 +L37 +L68 +R16 +R89 +R63 +R10 +L20 +L80 +L89 +L21 +L86 +R86 +R58 +L58 +L54 +R80 +R85 +R139 +L128 +L22 +R97 +R15 +R88 +R425 +L432 +L241 +R94 +L85 +L38 +R77 +L460 +R660 +R26 +L26 +R648 +L4 +R8 +L52 +R65 +L20 +L145 +R34 +L47 +L85 +L82 +L97 +L13 +R940 +L50 +L58 +L45 +R327 +R876 +R14 +L14 +L27 +L347 +L78 +L48 +R885 +L38 +L25 +R92 +R86 +R285 +R69 +R46 +R40 +L40 +L42 +L37 +R779 +L312 +L88 +R80 +L580 +R247 +R53 +R16 +L460 +R27 +L15 +L68 +R18 +L9 +L19 +R87 +R56 +L633 +L85 +L12 +R12 +R44 +R45 +R96 +L48 +L49 +R68 +R633 +R96 +R28 +L44 +L84 +L87 +R216 +R71 +R74 +L81 +R51 +R38 +L82 +L61 +L39 +R58 +L81 +L77 +R32 +R94 +L98 +L48 +R20 +R80 +R75 +L855 +L74 +L948 +R24 +R52 +R646 +R93 +R707 +R59 +L59 +R50 +R50 +L28 +L45 +L50 +R483 +R22 +L82 +R60 +R83 +R72 +L33 +R47 +R718 +L847 +L463 +R25 +L434 +R372 +L2 +L98 +R54 +R53 +R579 +L86 +L61 +R581 +L220 +L229 +R226 +R59 +R41 +L711 +R24 +L10 +L13 +R310 +R83 +R98 +R78 +R44 +L19 +R19 +L98 +L2 +L49 +L35 +R84 +R94 +L26 +L68 +R39 +R71 +R96 +L69 +L937 +L96 +R71 +L227 +L53 +R5 +L33 +R33 +L62 +R62 +L25 +L129 +L41 +L988 +L317 +L92 +L8 +R66 +R634 +R15 +L666 +R51 +L974 +L26 +R86 +L86 +R759 +R37 +L48 +R796 +L44 +L558 +L542 +L66 +R66 +R21 +L15 +R27 +L9 +L724 +L854 +R32 +L73 +R328 +R867 +L50 +R108 +R16 +L174 +L52 +R52 +R3 +R97 +L34 +L76 +R10 +R983 +L85 +R2 +L85 +R69 +L84 +R3 +L738 +L27 +R14 +L723 +R268 +L80 +L86 +L83 +L75 +L67 +L50 +R10 +R34 +L71 +R71 +L85 +R266 +L69 +R88 +L526 +L62 +R94 +L6 +L73 +L927 +R81 +R82 +R91 +L93 +L735 +L26 +R546 +L446 +L75 +L99 +R74 +R38 +L38 +L56 +L149 +R716 +L11 +R43 +R99 +R58 +L8 +L25 +L309 +L27 +R456 +R13 +R694 +R7 +R99 +L76 +R80 +R87 +L91 +R72 +L72 +L90 +L10 +L63 +L37 +L78 +R47 +R731 +R41 +R38 +L79 +L27 +L73 +L88 +L54 +L66 +R8 +R592 +R97 +L22 +R2 +R31 +L84 +L63 +R747 +R51 +R90 +L10 +L85 +R76 +L22 +R9 +R98 +L44 +L63 +L213 +R681 +L11 +R53 +L77 +L13 +R572 +L27 +L63 +R20 +L22 +L32 +R32 +L22 +L6 +R28 +L760 +L82 +L8 +L50 +R74 +R73 +L38 +L51 +L8 +R42 +L90 +R849 +R431 +L904 +R69 +L28 +R38 +R207 +L34 +R438 +R994 +R35 +R3 +R94 +L646 +L44 +L3 +L97 +L62 +L86 +R40 +L96 +L91 +R50 +R78 +R71 +L31 +L77 +L858 +L24 +L18 +R42 +L70 +R540 +R88 +R49 +R51 +R77 +L77 +R34 +L34 +R14 +R7 +R56 +R72 +L49 +L404 +L632 +R36 +L25 +L475 +L78 +R578 +L150 +R50 +L70 +R257 +L31 +L56 +L62 +R7 +R55 +R713 +L79 +R66 +R96 +L976 +R20 +R26 +L74 +R61 +R290 +R305 +R152 +L75 +L94 +R83 +L14 +L839 +L61 +L91 +R291 +R915 +L615 +R6 +L86 +L56 +L64 +L89 +L11 +L56 +L44 +R93 +L61 +R86 +L27 +R63 +R83 +L36 +L42 +L6 +R38 +R210 +L1 +L49 +L17 +R26 +L60 +R96 +R27 +L86 +L93 +L44 +L20 +L330 +R55 +R14 +L9 +L42 +L837 +R34 +L87 +R22 +R416 +R43 +L61 +R67 +L96 +R14 +R10 +R7 +L61 +L82 +L57 +L61 +R63 +R562 +R49 +R987 +R879 +L98 +L81 +L83 +R83 +R88 +R1 +L95 +R6 +R38 +L52 +R14 +R86 +L86 +L11 +R411 +R72 +R9 +R28 +R87 +L96 +L870 +R170 +L23 +L77 +R208 +L91 +L17 +R774 +L74 +L96 +R94 +L47 +L361 +R33 +R587 +L10 +R42 +R485 +R73 +R911 +L931 +L780 +R87 +R98 +R37 +R66 +R16 +R82 +L52 +R92 +R10 +R64 +R35 +R96 +L40 +R20 +L27 +L84 +R21 +R796 +L99 +L602 +L16 +L37 +R81 +R57 +R99 +L73 +L25 +R1 +R59 +R89 +R69 +L920 +R67 +L6 +L62 +R77 +R11 +R624 +R89 +L54 +L53 +R7 +R75 +L57 +L18 +L921 +L15 +R36 +R52 +L52 +L66 +L34 +L13 +R13 +R18 +R482 +L66 +R35 +L62 +L81 +R82 +L727 +R61 +R58 +R25 +L25 +R162 +R38 +L57 +L43 +R99 +R101 +R69 +L14 +R32 +L87 +L66 +L34 +L91 +R87 +L46 +L70 +R635 +R94 +L903 +R94 +R23 +R764 +R23 +R90 +R762 +L10 +L36 +L51 +R49 +L5 +L48 +R24 +R17 +L2 +R49 +L31 +R32 +R50 +L23 +L5 +L91 +R94 +L75 +R16 +R84 +L39 +L61 +R47 +R96 +R57 +L514 +R2 +R17 +R297 +L78 +R73 +L58 +L16 +R77 +R16 +L16 +R39 +L39 +R73 +R47 +L86 +R15 +R51 +R51 +R57 +L63 +L39 +R933 +R814 +L72 +R519 +R80 +L80 +R82 +L35 +L47 +L43 +L130 +R35 +L35 +R892 +L10 +R91 +L77 +L23 +R96 +L95 +L80 +L31 +R10 +R76 +L32 +R33 +L62 +L931 +L75 +R28 +L8 +L82 +L47 +L55 +L84 +L1 +L56 +L825 +L36 +L76 +R58 +L906 +R93 +L12 +L159 +R63 +L38 +L48 +R88 +R94 +R346 +R29 +L649 +L313 +L207 +R78 +L169 +L212 +L83 +R862 +L32 +L459 +L46 +L84 +L76 +L75 +L8 +L41 +L708 +L78 +L501 +R26 +R78 +R82 +R734 +L37 +R45 +L43 +L43 +L16 +L55 +R45 +L190 +R32 +L35 +R93 +R81 +L71 +L980 +L27 +R40 +R54 +L81 +L6 +R43 +L55 +R27 +R57 +L455 +L57 +L160 +R96 +L69 +R73 +R15 +R52 +L467 +L12 +R593 +L481 +L25 +R25 +R21 +L21 +L399 +R625 +R24 +L7 +R14 +L57 +R27 +L62 +L80 +R15 +L12 +R34 +R689 +R89 +L93 +L7 +L4 +R8 +L4 +R87 +R47 +R72 +R19 +L25 +R20 +R66 +L28 +R19 +R386 +R41 +R96 +R399 +L42 +L85 +L84 +R12 +L14 +L86 +R55 +R45 +R16 +R84 +R668 +R334 +R96 +R10 +L688 +R80 +L70 +L36 +L651 +R57 +L18 +L582 +L48 +R48 +L33 +L23 +R95 +R12 +L48 +R907 +L510 +L80 +R60 +R44 +R66 +L560 +R81 +L11 +R62 +R87 +R67 +R195 +R689 +L74 +R58 +R16 +L61 +R861 +R44 +R46 +R67 +R43 +R2 +L2 +L85 +L15 +R65 +R35 +L54 +L39 +R46 +L29 +R276 +L19 +L74 +R31 +R16 +L74 +R20 +R11 +L72 +L963 +L176 +L830 +R96 +R47 +L62 +R555 +R394 +L71 +L29 +L60 +R946 +L86 +L72 +R96 +L457 +L85 +R62 +R89 +L49 +R16 +L8 +R41 +R61 +R861 +R13 +R32 +L96 +R156 +R40 +L70 +R46 +R824 +R52 +L152 +R60 +R240 +R75 +R25 +L89 +R89 +R41 +L41 +L3 +R291 +R58 +L46 +L990 +R17 +L27 +R1 +R61 +R938 +R61 +R947 +L769 +L67 +R61 +R99 +L30 +R53 +R249 +L497 +R10 +R39 +L56 +R84 +R966 +L48 +R67 +L69 +L55 +R854 +L99 +L26 +L74 +R12 +L52 +L75 +R15 +L34 +R33 +L25 +R89 +R36 +L43 +L56 +L96 +R33 +L652 +L154 +R69 +L540 +R40 +R96 +L94 +R91 +L8 +R34 +R19 +R31 +R58 +R30 +R43 +R22 +R78 +L32 +L91 +R11 +R12 +L828 +R18 +R10 +R93 +L93 +R69 +L69 +R61 +R39 +L25 +L47 +R65 +R12 +L9 +L16 +R20 +R25 +R961 +L47 +L33 +R294 +L232 +L10 +L59 +R29 +L64 +L91 +L56 +R5 +L22 +R49 +L49 +R835 +R26 +R39 +R37 +R63 +L22 +L78 +L84 +R473 +L29 +R48 +R376 +R16 +R82 +L70 +L466 +L46 +L639 +L32 +R87 +L16 +R74 +R848 +R32 +L54 +R22 +R80 +L2 +R10 +L72 +L3 +L45 +R69 +L6 +R48 +L650 +R50 +L55 +R54 +R52 +L52 +L15 +R615 +R40 +L740 +L388 +R88 +L65 +L135 +L53 +L223 +L24 +L33 +R33 +L64 +R92 +R2 +R170 +R17 +R26 +L43 +R416 +R1 +L71 +L13 +L178 +L98 +R90 +L47 +R96 +L55 +L409 +R168 +L381 +L19 +L2 +R288 +R14 +R18 +L12 +R70 +R765 +R59 +R69 +R89 +L858 +R52 +R48 +L46 +R20 +L11 +R987 +R71 +L489 +L32 +R50 +R227 +R552 +R68 +R3 +R54 +L54 +R790 +L890 +R95 +R5 +L45 +L55 +R9 +L46 +R37 +L55 +L45 +L79 +L10 +L827 +L97 +L778 +R91 +L71 +L615 +L37 +L89 +R21 +R91 +L66 +L534 +R23 +L52 +L71 +L78 +L83 +R21 +L180 +R20 +R2 +L62 +L40 +R45 +L37 +R98 +L6 +R87 +L363 +L24 +R96 +L96 +R20 +R277 +R303 +R80 +L47 +L6 +R99 +L26 +R78 +L78 +R151 +R949 +R38 +L11 +L25 +L2 +L49 +L51 +L28 +L72 +L5 +L63 +R68 +L89 +R89 +R14 +R27 +R59 +L898 +L702 +R87 +R11 +R2 +R844 +L67 +R23 +R90 +R49 +L84 +R28 +R17 +R984 +L35 +L49 +R59 +L59 +L77 +R73 +R4 +L241 +R41 +R17 +R83 +R198 +L78 +L131 +L62 +L7 +R537 +L357 +R31 +L67 +R68 +R464 +L33 +L80 +R417 +L75 +L672 +R47 +L66 +L34 +R64 +L45 +R3 +L19 +L3 +L56 +L844 +L63 +R88 +R275 +L781 +L19 +L60 +R66 +L6 +R961 +L14 +R78 +L25 +L72 +R811 +R61 +R40 +R741 +R941 +L6 +L16 +L79 +R94 +R85 +L593 +L7 +R97 +L88 +R91 +L59 +R59 +R67 +R240 +R324 +L31 +L469 +R78 +R91 +R26 +R74 +R54 +L82 +R10 +L282 +R13 +R48 +L38 +L123 +L66 +L34 +R289 +L48 +R859 +R49 +R94 +L80 +R37 +R40 +L3 +R763 +L55 +R61 +R94 +L97 +R10 +L422 +L91 +R99 +L90 +R12 +R69 +L94 +R4 +L957 +R5 +L81 +L67 +L11 +R11 +L953 +L79 +L16 +R48 +L66 +L89 +R33 +R99 +L77 +R33 +L96 +L37 +L29 +R84 +R52 +R93 +L33 +L45 +R47 +L69 +L60 +L15 +L70 +R92 +R53 +R35 +L9 +R63 +R111 +R903 +R797 +R20 +L74 +L446 +L19 +L74 +R93 +R32 +L46 +L68 +R82 +R58 +L23 +R21 +L56 +L37 +R99 +R47 +R63 +L72 +L44 +L56 +R72 +L58 +L44 +R30 +L36 +R52 +L16 +L54 +R42 +L88 +R22 +R278 +L43 +L57 +R10 +R490 +R52 +R28 +R20 +L56 +R256 +L30 +R30 +R18 +L77 +L246 +R77 +R28 +R89 +L17 +L72 +L12 +R12 +R24 +R25 +R94 +R57 +R65 +L36 +L94 +R84 +R93 +L48 +L49 +L215 +L47 +R2 +L55 +R51 +L44 +L34 +L93 +L80 +L23 +R865 +R58 +L562 +R13 +R50 +L587 +R32 +L446 +R86 +L86 +L1 +L75 +L824 +L46 +L22 +L79 +L47 +R47 +R8 +R87 +R57 +L5 +L33 +L67 +R103 +R397 +R5 +L7 +R2 +L73 +L13 +L64 +L69 +R444 +L72 +R60 +R667 +L80 +R81 +L44 +R63 +R90 +L90 +R51 +L51 +L61 +R629 +R58 +R89 +L65 +R79 +R883 +L46 +R73 +L94 +L845 +L233 +R95 +L12 +R11 +L86 +L33 +L42 +R189 +R811 +L10 +R810 +R523 +L72 +R30 +R58 +R61 +R52 +R48 +L8 +R91 +L83 +R98 +R2 +R55 +L89 +R98 +L66 +R2 +R81 +R50 +R45 +R24 +L10 +L687 +R58 +R39 +R37 +R17 +L22 +L32 +L36 +R80 +R19 +R93 +L756 +R85 +L85 +L26 +R86 +R29 +R11 +L97 +L71 +L32 +L88 +R3 +L342 +R17 +R13 +R39 +R58 +R41 +R59 +L27 +R727 +L2 +L24 +R32 +R549 +L655 +L81 +L67 +R54 +R19 +L409 +R84 +L60 +L80 +R40 +R10 +R90 +L81 +L21 +R402 +R74 +L12 +L53 +R82 +L991 +L60 +L36 +L4 +R18 +R82 +L7 +L85 +L708 +R89 +R90 +L110 +R31 +L20 +R59 +R61 +R83 +L83 +R774 +R56 +R592 +L22 +R4 +R72 +L76 +L32 +R53 +L70 +R1 +R25 +L678 +R18 +L28 +L70 +R730 +L849 +R16 +R14 +R16 +R974 +R87 +R815 +L5 +R83 +R827 +R773 +R668 +L49 +L119 +R59 +R41 +R90 +R23 +R29 +L36 +L6 +R43 +L43 +R39 +L4 +R97 +R475 +R82 +L65 +R76 +R4 +R96 +L28 +L44 +L49 +R21 +L24 +R720 +R29 +L2 +R17 +L24 +R284 +L85 +L83 +R79 +R89 +R89 +L9 +L876 +L32 +R35 +R93 +L417 +R17 +R83 +R42 +R464 +L89 +L111 +L245 +L48 +R209 +R95 +R10 +L23 +R77 +R536 +L47 +R92 +R32 +R59 +L36 +R10 +R90 +L29 +L766 +R62 +L1 +R34 +R30 +L309 +R17 +L58 +L80 +R89 +R11 +R208 +R17 +L92 +L60 +R63 +L49 +R89 +R199 +L76 +L99 +R32 +L40 +R8 +R46 +R46 +R84 +L788 +L705 +R17 +R77 +L26 +L74 +L54 +L250 +L388 +L12 +R327 +L68 +R68 +L692 +L8 +L21 +L79 +L75 +L25 +L60 +L109 +L750 +R48 +L29 +R61 +R94 +L982 +L73 +L91 +R82 +L91 +R82 +L92 +R89 +R59 +R62 +R334 +L34 +L59 +L41 +R569 +R31 +R12 +R88 +L79 +R85 +L306 +R84 +L74 +L404 +L541 +R62 +L6 +R279 +R554 +R75 +R71 +R797 +R3 +L609 +L91 +L10 +R133 +R64 +L54 +R21 +L6 +L24 +R76 +L387 +R87 +R882 +L226 +R944 +R3 +L23 +L880 +R82 +L82 +L79 +L80 +R59 +L225 +R825 +R22 +R72 +L95 +R7 +R992 +L59 +R561 +L446 +L230 +L63 +L61 +L632 +R32 +L72 +R24 +L52 +R3 +L3 +R979 +R347 +R465 +R9 +R63 +L363 +L48 +L21 +R23 +R20 +L74 +L79 +R98 +R24 +R57 +R28 +L28 +L62 +L74 +R46 +R11 +R96 +R63 +R11 +R83 +L85 +L632 +R75 +R68 +L63 +R67 +R96 +R48 +L56 +R62 +L41 +L13 +R34 +R65 +R792 +L56 +L41 +L94 +L131 +L547 +R50 +R266 +L45 +L6 +L92 +L15 +R18 +L91 +R93 +L49 +R49 +L74 +R83 +R91 +L92 +R76 +L71 +L34 +R921 +L27 +R42 +R85 +L611 +R611 +R98 +L34 +R692 +R71 +L27 +R64 +L760 +L17 +L92 +L95 +L983 +L217 +R20 +L18 +R98 +L41 +L51 +L97 +L11 +L38 +L87 +R53 +L90 +L638 +L67 +R12 +R55 +L15 +R67 +L57 +R5 +L19 +R519 +R33 +R67 +L30 +R30 +R7 +L70 +R63 +R7 +R6 +R87 +R520 +L20 +L132 +L848 +L86 +L34 +L834 +L513 +R75 +L57 +L871 +R97 +R3 +R29 +R63 +L92 +R45 +R60 +L251 +L52 +R865 +R33 +L427 +L43 +L30 +L96 +L825 +L779 +R68 +R32 +L12 +R12 +R24 +L8 +L34 +R43 +L222 +R92 +L4 +L9 +L58 +L20 +L55 +L39 +L830 +L780 +R96 +R664 +R124 +R12 +L96 +R39 +L51 +R22 +L710 +L51 +R17 +L78 +L80 +L830 +L78 +R35 +R848 +L66 +R67 +R536 +L86 +L42 +R8 +L89 +L11 +L50 +R611 +R87 +R652 +L394 +R12 +R50 +L68 +R49 +L4 +R55 +L71 +L629 +L642 +L37 +L18 +L13 +R685 +R418 +L75 +L18 +L56 +R56 +R80 +R26 +L88 +L78 +R278 +R43 +R39 +L581 +R73 +R24 +R84 +R7 +L46 +L61 +R10 +L61 +R33 +L82 +R888 +L20 +R92 +L960 +R10 +L29 +R55 +L36 +L83 +L47 +L67 +R74 +R56 +L33 +L70 +R63 +R45 +R14 +L34 +L105 +L68 +R55 +L74 +L26 +L675 +R75 +R42 +L575 +L47 +L74 +R11 +L45 +R88 +R967 +R92 +R41 +L736 +L64 +R47 +L64 +L86 +R90 +R70 +L57 +L94 +L906 +R79 +L147 +L983 +R70 +R81 +R45 +R25 +L479 +R9 +L61 +L13 +L97 +L77 +L952 +R138 +L34 +L704 +L74 +L26 +L18 +R35 +R20 +L37 +R296 +R77 +L73 +R94 +L71 +R77 +L5 +R39 +L60 +R23 +R21 +R80 +L698 +L87 +L30 +R4 +L87 +L39 +R72 +L83 +R82 +R94 +L26 +R711 +R44 +R55 +R290 +L81 +L19 +R89 +R11 +L80 +L69 +R17 +L68 +L23 +L938 +R666 +L56 +L49 +R64 +R571 +L40 +R22 +R83 +R26 +R761 +L59 +L61 +L67 +L26 +R67 +L41 +R11 +R98 +L732 +L3 +R98 +R28 +L61 +R886 +L9 +R485 +R99 +R97 +R49 +L44 +L2 +L591 +R91 +R77 +L14 +R37 +R20 +R80 +L7 +R853 +R858 +L376 +R72 +R357 +L52 +R308 +L13 +L25 +R71 +R40 +R18 +R96 +L30 +L56 +L31 +L83 +L8 +R29 +L26 +R92 +L82 +R295 +R30 +L30 +R47 +L2 +L28 +L17 +R23 +L35 +R212 +L91 +L62 +L47 +R801 +R68 +L69 +L55 +L45 +L79 +L421 +L50 +L250 +R815 +L415 +R19 +L359 +R87 +L71 +R84 +L60 +R60 +L59 +R10 +R89 +L35 +L65 +L75 +L54 +L14 +L98 +R41 +R59 +L89 +R4 +R44 +L45 +R968 +R59 +R73 +L35 +R69 +R44 +R48 +R1 +R825 +L47 +L578 +R88 +L88 +R39 +L81 +L158 +L580 +R67 +R13 +L212 +L93 +L74 +R79 +L253 +L47 +R955 +R2 +R98 +L55 +R4 +L4 +L57 +R57 +R2 +L86 +R82 +L318 +L57 +R651 +R31 +R32 +R10 +L47 +R95 +R5 +L23 +R55 +R268 +R91 +L1 +R10 +L35 +L89 +L89 +R13 +R49 +L4 +R79 +R76 +L85 +R85 +R75 +L13 +L201 +R228 +L889 +R16 +L116 +R70 +L70 +R566 +R65 +R74 +L88 +L13 +R4 +R472 +L36 +R43 +L65 +R70 +L394 +L44 +R746 +L69 +R83 +L319 +R55 +L49 +L60 +R36 +R23 +R87 +R38 +L25 +R49 +R82 +R45 +R12 +L88 +L43 +R975 +L42 +L42 +L48 +R63 +R58 +R179 +R73 +R27 +L34 +L76 +L48 +R9 +R26 +R923 +L78 +L22 +L29 +L71 +L854 +R15 +R39 +L496 +R22 +R74 +R9 +L9 +R18 +R27 +R547 +L77 +L11 +R96 +L40 +R27 +R13 +L67 +R79 +L666 +R54 +L26 +L74 +L10 +L482 +R50 +L12 +R54 +R168 +R32 +R36 +L1 +L51 +R610 +R7 +R89 +L290 +R71 +L14 +R91 +R52 +L23 +R23 +L80 +R20 +L33 +L26 +R49 +R70 +R95 +R79 +R468 +L642 +L624 +R31 +L23 +L84 +L80 +R8 +L28 +R47 +L981 +R72 +L899 +R61 +R87 +R78 +L56 +L90 +R68 +L87 +L56 +L244 +L9 +R71 +L318 +R4 +R94 +L542 +R17 +L386 +L64 +R44 +R23 +L24 +L53 +R773 +L352 +R22 +R77 +L24 +R70 +R77 +L64 +L36 +L7 +R91 +R411 +L95 +L22 +L78 +R45 +R354 +L599 +L59 +L41 +L40 +L60 +L23 +L90 +R62 +L37 +R888 +L48 +L58 +R6 +L97 +L235 +R30 +L998 +L58 +R45 +R76 +L62 +L31 +L70 +L163 +R43 +L80 +L97 +R95 +L98 +R16 +R40 +L676 +L56 +L25 +R601 +R44 +L25 +L40 +R703 +R918 +R66 +L3 +L63 +R32 +L32 +R24 +R5 +L40 +L89 +L41 +L216 +L743 +R48 +L94 +L31 +R88 +R89 +R27 +R51 +R22 +L261 +R77 +L916 +R92 +R84 +L58 +R75 +L90 +R302 +R495 +R99 +L85 +L80 +R37 +L26 +L45 +R98 +L98 +L54 +L94 +R56 +L8 +R23 +L920 +R505 +R12 +R48 +L70 +L78 +R85 +R95 +L74 +L26 +R40 +R64 +R34 +L32 +L66 +L748 +L55 +R37 +L74 +R79 +L79 +L44 +L56 +R71 +L79 +L92 +R43 +R57 +R777 +R97 +R73 +L94 +R47 +L71 +L91 +L41 +L61 +R943 +L37 +L42 +L94 +L6 +L69 +L931 +L94 +L305 +L93 +L8 +L79 +L21 +L80 +L61 +L49 +L37 +L59 +R86 +L51 +L49 +R37 +R63 +R48 +L48 +L46 +L98 +L46 +R81 +R37 +L428 +L54 +L846 +L12 +L91 +R7 +L54 +R850 +L18 +L254 +L28 +L10 +L88 +L2 +R878 +L80 +L75 +L84 +L39 +L38 +R17 +R99 +R637 +R50 +L73 +R95 +R613 +L3 +R99 +L78 +L10 +L70 +R34 +R80 +L60 +L92 +L5 +L95 +L25 +L41 +L34 +L11 +R11 +R49 +L68 +L40 +L51 +L423 +R9 +R16 +L539 +L388 +R94 +L4 +R120 +R69 +R56 +L643 +L57 +R122 +L22 +R449 +L287 +L62 +L21 +L5 +R68 +R4 +L611 +R252 +L37 +R91 +L62 +L96 +R91 +R26 +L10 +R65 +L41 +L34 +R20 +L97 +L89 +R73 +R34 +L21 +R59 +R36 +L95 +L58 +R49 +L91 +R76 +L64 +R35 +R80 +L27 +R50 +L52 +L89 +L83 +L24 +R98 +R55 +R31 +L55 +R53 +L67 +L1 +R84 +L78 +L55 +R62 +R73 +R35 +L37 +L46 +L7 +R43 +R81 +L16 +R51 +L6 +R84 +L87 +R3 +L82 +L18 +L41 +R41 +R25 +L1 +R95 +L75 +L17 +R33 +R17 +R35 +R25 +L36 +L26 +R10 +R13 +L15 +R9 +L31 +R39 +R11 +R38 +L42 +L6 +R38 +R1 +L45 +L35 +L30 +R48 +R48 +R34 +R6 +L28 +R5 +L11 +L47 +R48 +L41 +L4 +R16 +R45 +R30 +L18 +R48 +L31 +L50 +R4 +L33 +L48 +R27 +L44 +L39 +R2 +R33 +L22 +L10 diff --git a/day1/test.txt b/day1/test.txt new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/day1/test.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 diff --git a/shared.zig b/shared.zig new file mode 100644 index 0000000..497b581 --- /dev/null +++ b/shared.zig @@ -0,0 +1,100 @@ +const std = @import("std"); +const Io = std.Io; + +var stdout_buffer: [1024]u8 = undefined; +var stdout_file_writer: Io.File.Writer = undefined; +var process: std.process.Init = undefined; + +pub fn print(comptime fmt: []const u8, args: anytype) void { + writer().print(fmt ++ "\n", args) catch unreachable; + writer().flush() catch unreachable; +} + +pub fn writer() *Io.Writer { + return &stdout_file_writer.interface; +} + +pub fn sharedInit(init: std.process.Init) !void { + process = init; + const io = init.io; + stdout_file_writer = .init(.stdout(), io, &stdout_buffer); +} + +pub fn loadBytesFile(allocator: std.mem.Allocator, path: []const u8) []u8 { + const bytes = std.Io.Dir.cwd().readFileAlloc(process.io, path, allocator, .unlimited) catch { + std.debug.print("unable to load file {s}\n", .{path}); + unreachable; + }; + return bytes; +} + +pub fn loadBytesArg(allocator: std.mem.Allocator) []const u8 { + // Accessing command line arguments: + const args = process.minimal.args.toSlice(allocator) catch unreachable; + + if (args.len < 2) { + print("invalid number of arguments", .{}); + unreachable; + } + return trim(normalizeEndings(allocator, loadBytesFile(allocator, args[1]))); +} + +pub fn normalizeEndings(allocator: std.mem.Allocator, bytes: []const u8) []u8 { + var s: std.ArrayList(u8) = .empty; + + for (bytes, 0..) |c, i| { + if (c != '\r' or c != '\n') + s.append(allocator, c) catch unreachable; + if (c == '\r') if (bytes[i + 1] == '\n') + s.append(allocator, '\n') catch unreachable; + } + + return s.toOwnedSlice(allocator) catch unreachable; +} + +pub fn isWhiteSpace(s: []const u8, off: usize) bool { + const c = s[off]; + return c == ' ' or c == '\n' or c == '\r' or c == '\t'; +} + +pub fn trim(bytes: []const u8) []const u8 { + if (bytes.len == 0) return bytes; + + var start: usize = 0; + while (isWhiteSpace(bytes, start)) start += 1; + + var end: usize = bytes.len - 1; + while (end - 1 > 0 and isWhiteSpace(bytes, end)) end -= 1; + + return bytes[start .. end + 1]; +} + +pub const LineIter = struct { + line: usize = 0, + s: usize = 0, + e: usize = 0, + + pub fn toSlice(self: *@This(), bytes: []const u8) []const u8 { + return trim(bytes[self.s..self.e]); + } + + pub fn nextLine(self: *@This(), bytes: []const u8) ?[]const u8 { + if (self.e == bytes.len) { + return null; + } + + self.s = self.e; + if (isWhiteSpace(bytes, self.e)) self.s += 1; + + self.e = self.s; + self.line += 1; + + while (self.e != bytes.len and bytes[self.e] != '\n') { + self.e += 1; + } + + if (self.e != bytes.len and bytes[self.e] == '\n') self.e += 1; + + return self.toSlice(bytes); + } +};