aoc2025 @ 88decc8a274755106d828e7053890be2a6b97e9d

  1diff --git a/BENCH b/BENCH
  2index 7dc31f359e5a958c9b558b7c30bbf8fc8fcf5498..e3ad98bbb9d3efb765d038e8bf6e4cbc60405519 100644
  3--- a/BENCH
  4+++ b/BENCH
  5@@ -1,39 +1,83 @@
  6+Zig:  0.15.2
  7+
  8 RELEASE FAST
  9-2.4M	zig-out/bin/aoc2024
 10+2.4M	zig-out/bin/aoc2025
 11 
 12 benchmark              runs     total time     time/run (avg ± σ)    (min ... max)                p75        p99        p995      
 13 -----------------------------------------------------------------------------------------------------------------------------
 14-Dia 1 parte 1          40215    1.836s         45.654us ± 1.099us    (44.904us ... 76.393us)      45.546us   50.274us   50.845us  
 15-Dia 1 parte 2          43858    2.054s         46.837us ± 2.256us    (44.463us ... 94.917us)      49.753us   53.009us   53.731us  
 16-Dia 2 parte 1          95       1.986s         20.913ms ± 112.456us  (20.775ms ... 21.528ms)      20.923ms   21.528ms   21.528ms  
 17-Dia 2 parte 2          27       2.007s         74.339ms ± 631.926us  (73.075ms ... 76.82ms)       74.295ms   76.82ms    76.82ms   
 18-Dia 3 parte 1          100000   187.034ms      1.87us ± 157ns        (1.843us ... 7.534us)        1.864us    1.884us    2.324us   
 19-Dia 3 parte 2          31077    2.016s         64.892us ± 3.846us    (57.537us ... 122.619us)     65.032us   79.088us   81.772us  
 20-Dia 4 parte 1          100000   542.089ms      5.42us ± 351ns        (5.27us ... 45.405us)        5.401us    6.702us    8.175us   
 21-Dia 4 parte 2          434      2.009s         4.629ms ± 95.303us    (4.489ms ... 6.045ms)        4.649ms    4.788ms    5.128ms   
 22-Dia 5 parte 1          52505    2.003s         38.158us ± 2.211us    (37.099us ... 70.281us)      37.791us   45.685us   52.708us  
 23+Dia 1 parte 1          39930    1.936s         48.489us ± 2.339us    (44.543us ... 99.355us)      49.633us   53.09us    54.291us  
 24+Dia 1 parte 2          43968    1.983s         45.117us ± 987ns      (44.593us ... 75.631us)      44.974us   49.593us   50.324us  
 25+Dia 2 parte 1          103      1.987s         19.293ms ± 357.003us  (19.069ms ... 22.658ms)      19.285ms   20.229ms   22.658ms  
 26+Dia 2 parte 2          30       1.999s         66.654ms ± 351.695us  (66.28ms ... 67.743ms)       66.644ms   67.743ms   67.743ms  
 27+Dia 3 parte 1          100000   167.504ms      1.675us ± 157ns       (1.643us ... 8.346us)        1.673us    2.024us    2.093us   
 28+Dia 3 parte 2          29429    2.002s         68.033us ± 3.378us    (66.374us ... 121.316us)     67.326us   80.07us    83.245us  
 29+Dia 4 parte 1          100000   536.372ms      5.363us ± 291ns       (5.229us ... 28.162us)       5.35us     6.362us    8.106us   
 30+Dia 4 parte 2          414      2.011s         4.858ms ± 107.909us   (4.729ms ... 6.158ms)        4.883ms    5.078ms    5.44ms    
 31+Dia 5 parte 1          52654    2.001s         38.014us ± 2.956us    (36.638us ... 84.909us)      37.62us    47.248us   56.315us  
 32 Dia 5 parte 1 [MEMORY]                         128B ± 0B             (128B ... 128B)              128B       128B       128B      
 33-Dia 5 parte 2          87876    2.01s          22.881us ± 3.791us    (21.54us ... 111.949us)      22.172us   30.557us   33.703us  
 34+Dia 5 parte 2          83866    1.983s         23.649us ± 5.512us    (22.221us ... 145.041us)     23.053us   31.419us   34.565us  
 35 Dia 5 parte 2 [MEMORY]                         256B ± 0B             (256B ... 256B)              256B       256B       256B      
 36+Dia 6 parte 1          48837    1.986s         40.682us ± 886ns      (39.704us ... 70.612us)      40.746us   44.714us   45.365us  
 37+Dia 6 parte 2          73561    2.177s         29.596us ± 2.21us     (26.46us ... 246.451us)      30.497us   35.316us   37.741us  
 38+
 39+
 40+RELEASE SAFE
 41+2.6M	zig-out/bin/aoc2025
 42+
 43+benchmark              runs     total time     time/run (avg ± σ)    (min ... max)                p75        p99        p995      
 44+-----------------------------------------------------------------------------------------------------------------------------
 45+Dia 1 parte 1          27573    2.13s          77.269us ± 4.151us    (69.66us ... 238.526us)      78.086us   92.313us   94.807us  
 46+Dia 1 parte 2          3185     2.136s         670.652us ± 37.759us  (617.715us ... 914.469us)    698.695us  781.31us   804.373us 
 47+Dia 2 parte 1          74       1.933s         26.123ms ± 108.534us  (25.906ms ... 26.341ms)      26.22ms    26.341ms   26.341ms  
 48+Dia 2 parte 2          20       1.838s         91.932ms ± 4.529ms    (88.636ms ... 99.29ms)       98.872ms   99.29ms    99.29ms   
 49+Dia 3 parte 1          43325    1.806s         41.686us ± 1.648us    (40.906us ... 75.942us)      41.528us   47.218us   48.912us  
 50+Dia 3 parte 2          25603    2.15s          83.985us ± 5.192us    (75.541us ... 147.576us)     84.699us   116.447us  116.558us 
 51+Dia 4 parte 1          6288     1.981s         315.118us ± 3.36us    (308.336us ... 348.742us)    317.193us  324.657us  325.969us 
 52+Dia 4 parte 2          337      1.984s         5.888ms ± 144.821us   (5.795ms ... 6.709ms)        5.882ms    6.682ms    6.689ms   
 53+Dia 5 parte 1          14052    2.219s         157.972us ± 8.196us   (137.998us ... 220.863us)    161.02us   186.198us  194.053us 
 54+Dia 5 parte 2          83082    2.188s         26.342us ± 3.392us    (24.276us ... 83.176us)      25.869us   34.715us   38.451us  
 55+Dia 6 parte 1          44184    2.171s         49.144us ± 2.659us    (44.082us ... 305.04us)      49.343us   57.868us   60.283us  
 56+Dia 6 parte 2          35427    1.947s         54.958us ± 3.466us    (50.054us ... 106.479us)     56.676us   65.873us   67.997us  
 57 
 58 
 59 RELEASE SMALL
 60-116K	zig-out/bin/aoc2024
 61+136K	zig-out/bin/aoc2025
 62 
 63 benchmark              runs     total time     time/run (avg ± σ)    (min ... max)                p75        p99        p995      
 64 -----------------------------------------------------------------------------------------------------------------------------
 65-Dia 1 parte 1          29977    1.999s         66.697us ± 1.11us     (65.633us ... 97.102us)      66.885us   71.394us   71.915us  
 66-Dia 1 parte 2          29850    2.134s         71.503us ± 3.903us    (65.423us ... 113.212us)     73.057us   85.229us   88.946us  
 67-Dia 2 parte 1          33       1.914s         58.013ms ± 2.834ms    (55.947ms ... 63.138ms)      61.104ms   63.138ms   63.138ms  
 68-Dia 2 parte 2          17       1.954s         114.972ms ± 674.784us (113.864ms ... 116.07ms)     115.499ms  116.07ms   116.07ms  
 69-Dia 3 parte 1          53371    1.857s         34.812us ± 1.992us    (33.332us ... 64.391us)      36.438us   41.718us   43.09us   
 70-Dia 3 parte 2          29439    1.984s         67.401us ± 2.331us    (65.793us ... 92.513us)      67.186us   75.121us   76.382us  
 71-Dia 4 parte 1          10396    2.037s         196.023us ± 11.778us  (172.763us ... 301.785us)    199.163us  225.131us  227.986us 
 72-Dia 4 parte 2          441      2.084s         4.727ms ± 267.787us   (4.125ms ... 6.215ms)        4.826ms    5.747ms    6.173ms   
 73-Dia 5 parte 1          39224    2.183s         55.67us ± 4.385us     (49.393us ... 130.885us)     54.972us   76.864us   81.753us  
 74+Dia 1 parte 1          29752    1.972s         66.282us ± 1.06us     (64.921us ... 91.311us)      66.474us   70.682us   71.373us  
 75+Dia 1 parte 2          30067    1.994s         66.339us ± 1.223us    (64.992us ... 96.36us)       66.545us   71.383us   72.496us  
 76+Dia 2 parte 1          35       1.999s         57.141ms ± 2.444ms    (56.019ms ... 65.978ms)      56.555ms   65.978ms   65.978ms  
 77+Dia 2 parte 2          17       1.949s         114.657ms ± 742.671us (113.724ms ... 115.756ms)    115.321ms  115.756ms  115.756ms 
 78+Dia 3 parte 1          50865    2.008s         39.495us ± 1.309us    (38.863us ... 71.844us)      39.444us   46.947us   46.958us  
 79+Dia 3 parte 2          26308    1.995s         75.853us ± 2.157us    (74.86us ... 105.477us)      75.481us   88.055us   88.094us  
 80+Dia 4 parte 1          8425     1.995s         236.824us ± 2.548us   (234.087us ... 270.776us)    237.965us  244.857us  246.391us 
 81+Dia 4 parte 2          314      2.103s         6.699ms ± 29.229us    (6.646ms ... 6.926ms)        6.702ms    6.857ms    6.892ms   
 82+Dia 5 parte 1          38446    1.913s         49.759us ± 2.545us    (48.059us ... 102.332us)     49.363us   60.844us   61.194us  
 83 Dia 5 parte 1 [MEMORY]                         128B ± 0B             (128B ... 128B)              128B       128B       128B      
 84-Dia 5 parte 2          66790    1.815s         27.18us ± 3.205us     (25.828us ... 100.097us)     26.63us    35.026us   38.742us  
 85+Dia 5 parte 2          70888    2.026s         28.583us ± 3.058us    (26.69us ... 92.824us)       28.022us   36.127us   40.055us  
 86 Dia 5 parte 2 [MEMORY]                         256B ± 0B             (256B ... 256B)              256B       256B       256B      
 87+Dia 6 parte 1          15526    1.994s         128.475us ± 1.698us   (126.998us ... 158.917us)    128.841us  134.121us  135.604us 
 88+Dia 6 parte 2          18185    1.998s         109.899us ± 1.743us   (107.721us ... 151.583us)    110.216us  115.426us  117.099us 
 89+
 90+
 91+DEBUG
 92+9.2M	zig-out/bin/aoc2025
 93+
 94+benchmark              runs     total time     time/run (avg ± σ)    (min ... max)                p75        p99        p995      
 95+-----------------------------------------------------------------------------------------------------------------------------
 96+Dia 1 parte 1          863      1.83s          2.12ms ± 91.626us     (2.047ms ... 2.312ms)        2.147ms    2.305ms    2.306ms   
 97+Dia 1 parte 2          229      1.996s         8.717ms ± 35.291us    (8.661ms ... 8.847ms)        8.747ms    8.807ms    8.807ms   
 98+Dia 2 parte 1          2        1.425s         712.909ms ± 2.908ms   (710.852ms ... 714.966ms)    714.966ms  714.966ms  714.966ms 
 99+Dia 2 parte 2          1        1.303s         1.303s ± 0ns          (1.303s ... 1.303s)          1.303s     1.303s     1.303s    
100+Dia 3 parte 1          3482     2.166s         622.342us ± 33.283us  (565.947us ... 942.401us)    637.291us  732.339us  756.894us 
101+Dia 3 parte 2          2668     1.968s         737.851us ± 5.875us   (729.252us ... 803.041us)    740.865us  758.157us  761.073us 
102+Dia 4 parte 1          51       1.97s          38.63ms ± 195.218us   (38.386ms ... 39.012ms)      38.819ms   39.012ms   39.012ms  
103+Dia 4 parte 2          1        1.086s         1.086s ± 0ns          (1.086s ... 1.086s)          1.086s     1.086s     1.086s    
104+Dia 5 parte 1          625      1.998s         3.197ms ± 12.171us    (3.175ms ... 3.255ms)        3.205ms    3.226ms    3.229ms   
105+Dia 5 parte 2          3235     2.184s         675.37us ± 39.366us   (610.611us ... 862.742us)    691.092us  802.66us   820.463us 
106+Dia 6 parte 1          1068     2.153s         2.016ms ± 80.434us    (1.808ms ... 2.485ms)        2.036ms    2.281ms    2.323ms   
107+Dia 6 parte 2          1024     1.989s         1.943ms ± 137.981us   (1.774ms ... 2.578ms)        1.991ms    2.276ms    2.297ms   
108 
109 CPU INFO
110 Architecture:                            x86_64
111@@ -51,34 +95,5 @@ Core(s) per socket:                      8
112 Socket(s):                               1
113 Stepping:                                0
114 Frequency boost:                         enabled
115-CPU(s) scaling MHz:                      52%
116+CPU(s) scaling MHz:                      54%
117 CPU max MHz:                             4560.3242
118-CPU min MHz:                             576.9090
119-BogoMIPS:                                7785.12
120-Flags:                                   fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip rdpid overflow_recov succor smca sev sev_es
121-Virtualization:                          AMD-V
122-L1d cache:                               256 KiB (8 instances)
123-L1i cache:                               256 KiB (8 instances)
124-L2 cache:                                4 MiB (8 instances)
125-L3 cache:                                32 MiB (2 instances)
126-NUMA node(s):                            1
127-NUMA node0 CPU(s):                       0-15
128-Vulnerability Gather data sampling:      Not affected
129-Vulnerability Ghostwrite:                Not affected
130-Vulnerability Indirect target selection: Not affected
131-Vulnerability Itlb multihit:             Not affected
132-Vulnerability L1tf:                      Not affected
133-Vulnerability Mds:                       Not affected
134-Vulnerability Meltdown:                  Not affected
135-Vulnerability Mmio stale data:           Not affected
136-Vulnerability Old microcode:             Not affected
137-Vulnerability Reg file data sampling:    Not affected
138-Vulnerability Retbleed:                  Mitigation; untrained return thunk; SMT enabled with STIBP protection
139-Vulnerability Spec rstack overflow:      Mitigation; Safe RET
140-Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
141-Vulnerability Spectre v1:                Mitigation; usercopy/swapgs barriers and __user pointer sanitization
142-Vulnerability Spectre v2:                Mitigation; Retpolines; IBPB conditional; STIBP always-on; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected
143-Vulnerability Srbds:                     Not affected
144-Vulnerability Tsa:                       Not affected
145-Vulnerability Tsx async abort:           Not affected
146-Vulnerability Vmscape:                   Mitigation; IBPB before exit to userspace
147diff --git a/bench.sh b/bench.sh
148index 7b163c08f9fe4a0d811966bc85557af7225cdb38..4d504e9363f1702e3b9447b1909b1837749c3cce 100755
149--- a/bench.sh
150+++ b/bench.sh
151@@ -2,6 +2,8 @@ #!/usr/bin/env bash
152 
153 
154 {
155+    echo "Zig: " "$(zig version)"
156+    echo ""
157     echo "RELEASE FAST";
158     zig build --release=fast;
159     du -sh zig-out/bin/aoc2024;
160@@ -10,23 +12,30 @@
161     echo ""
162     echo ""
163 
164+    echo "RELEASE SAFE";
165+    zig build --release=safe;
166+    du -sh zig-out/bin/aoc2024;
167+    ./zig-out/bin/bench;
168+
169+    echo ""
170+    echo ""
171+
172     echo "RELEASE SMALL";
173     zig build --release=small;
174     du -sh zig-out/bin/aoc2024;
175     ./zig-out/bin/bench;
176 
177-# it panics for now
178-#    echo ""
179-#    echo ""
180-#
181-#    echo "Debug";
182-#    zig build;
183-#    du -sh zig-out/bin/aoc2024;
184-#    ./zig-out/bin/bench;
185+    echo ""
186+    echo ""
187+
188+    echo "DEBUG";
189+    zig build;
190+    du -sh zig-out/bin/aoc2024;
191+    ./zig-out/bin/bench;
192 
193     echo ""
194 
195     echo "CPU INFO"
196-    lscpu
197+    lscpu | head -n 17
198 } > BENCH
199 
200diff --git a/build.zig.zon b/build.zig.zon
201index c15561371fd911cc82329d0e87bcec630ab8e43c..655a74b31979a8129256bef93591bd50e73128e2 100644
202--- a/build.zig.zon
203+++ b/build.zig.zon
204@@ -1,5 +1,5 @@
205 .{
206-    .name = .aoc2024,
207+    .name = .aoc2025,
208     .version = "0.0.0",
209     .minimum_zig_version = "0.15.1",
210     .fingerprint = 0x25105d439732947a,
211diff --git a/src/bench.zig b/src/bench.zig
212index 5dbcd9bef9582ca8d77eae91464b22d2385bf2fc..31f574419df826ca360db2e21fbadce3aaafad71 100644
213--- a/src/bench.zig
214+++ b/src/bench.zig
215@@ -1,4 +1,5 @@
216 const std = @import("std");
217+const builtin = @import("builtin");
218 const zbench = @import("zbench");
219 
220 const day1 = @import("day1.zig");
221@@ -6,6 +7,7 @@ const day2 = @import("day2.zig");
222 const day3 = @import("day3.zig");
223 const day4 = @import("day4.zig");
224 const day5 = @import("day5.zig");
225+const day6 = @import("day6.zig");
226 
227 fn day1pt1(_: std.mem.Allocator) void {
228     _ = day1.pt1(@embedFile("input/day1"));
229@@ -47,6 +49,14 @@ fn day5pt2(alloc: std.mem.Allocator) void {
230     _ = day5.pt2(alloc, @embedFile("input/day5")) catch unreachable;
231 }
232 
233+fn day6pt1(_: std.mem.Allocator) void {
234+    _ = day6.pt1(@embedFile("input/day6"));
235+}
236+
237+fn day6pt2(_: std.mem.Allocator) void {
238+    _ = day6.pt2(@embedFile("input/day6"));
239+}
240+
241 pub fn main() !void {
242     var stdout = std.fs.File.stdout().writerStreaming(&.{});
243     const writer = &stdout.interface;
244@@ -62,8 +72,17 @@     try bench.add("Dia 3 parte 1", day3pt1, .{});
245     try bench.add("Dia 3 parte 2", day3pt2, .{});
246     try bench.add("Dia 4 parte 1", day4pt1, .{});
247     try bench.add("Dia 4 parte 2", day4pt2, .{});
248-    try bench.add("Dia 5 parte 1", day5pt1, .{ .track_allocations = true });
249-    try bench.add("Dia 5 parte 2", day5pt2, .{ .track_allocations = true });
250+    // FIXME: this is a bug on the zbench that on debug or release safe mode it
251+    // panics calculating memory used.
252+    if (builtin.mode == .Debug or builtin.mode == .ReleaseSafe) {
253+        try bench.add("Dia 5 parte 1", day5pt1, .{});
254+        try bench.add("Dia 5 parte 2", day5pt2, .{});
255+    } else {
256+        try bench.add("Dia 5 parte 1", day5pt1, .{ .track_allocations = true });
257+        try bench.add("Dia 5 parte 2", day5pt2, .{ .track_allocations = true });
258+    }
259+    try bench.add("Dia 6 parte 1", day6pt1, .{});
260+    try bench.add("Dia 6 parte 2", day6pt2, .{});
261 
262     try writer.writeAll("\n");
263     try bench.run(writer);
264diff --git a/src/day6.zig b/src/day6.zig
265new file mode 100644
266index 0000000000000000000000000000000000000000..4c6d8f9c768f6246aaf8c05b60960fd5cdf5de17
267--- /dev/null
268+++ b/src/day6.zig
269@@ -0,0 +1,135 @@
270+const std = @import("std");
271+
272+const board_height: u64 = 5;
273+const board_width: u64 = 3785;
274+
275+pub fn pt1(input: []const u8) u64 {
276+    var x: usize = 0;
277+    var counter: u64 = 0;
278+    while (x < board_width) {
279+        const width = getChunkSize(input, x);
280+        counter += calulateChunckPt1(input, x, width);
281+        x += width + 1;
282+    }
283+    return counter;
284+}
285+
286+pub fn pt2(input: []const u8) u64 {
287+    var x: usize = 0;
288+    var counter: u64 = 0;
289+    while (x < board_width) {
290+        const width = getChunkSize(input, x);
291+        counter += calulateChunckPt2(input, x, width);
292+        x += width + 1;
293+    }
294+    return counter;
295+}
296+
297+fn get(input: []const u8, x: usize, y: usize) u8 {
298+    return input[x + (y * board_width)];
299+}
300+
301+fn getChunkSize(input: []const u8, x: usize) usize {
302+    for (x..board_width) |w| {
303+        var empty_count: usize = 0;
304+        for (0..board_height) |h| {
305+            const c = get(input, w, h);
306+            if (c == ' ' or c == '\n') empty_count += 1;
307+        }
308+
309+        if (empty_count == board_height) {
310+            return w - x;
311+        }
312+    }
313+
314+    unreachable;
315+}
316+
317+fn calulateChunckPt1(input: []const u8, x: usize, width: usize) u64 {
318+    var numbers: [board_height - 1]u64 = undefined;
319+
320+    for (0..(board_height - 1)) |h| {
321+        const from = x + (h * board_width);
322+        const to = x + (h * board_width) + width;
323+        const number_str = input[from..to];
324+        const trimed_number_str = std.mem.trim(u8, number_str, " ");
325+        const number = std.fmt.parseInt(u64, trimed_number_str, 10) catch unreachable;
326+        numbers[h] = number;
327+    }
328+
329+    var sum = true;
330+
331+    for (0..width) |w| {
332+        const c = get(input, w + x, board_height - 1);
333+        if (c == '*') {
334+            sum = !sum;
335+            break;
336+        }
337+    }
338+
339+    if (sum) {
340+        var counter: u64 = 0;
341+        for (numbers) |n| {
342+            counter += n;
343+        }
344+        return counter;
345+    } else {
346+        var counter: u64 = 1;
347+        for (numbers) |n| {
348+            counter *= n;
349+        }
350+        return counter;
351+    }
352+}
353+
354+fn calulateChunckPt2(input: []const u8, x: usize, width: usize) u64 {
355+    // guessing a higher number of column so I don't have to alloc
356+    var numbers: [10]u64 = undefined;
357+
358+    var number_str: [board_height - 1]u8 = undefined;
359+
360+    for (x..(x + width), 0..) |w, i| {
361+        for (0..board_height - 1) |h| {
362+            const c = get(input, w, h);
363+            number_str[h] = c;
364+        }
365+
366+        const trimed_number_str = std.mem.trim(u8, &number_str, " ");
367+        const number = std.fmt.parseInt(u64, trimed_number_str, 10) catch unreachable;
368+        numbers[i] = number;
369+    }
370+
371+    var sum = true;
372+
373+    for (0..width) |w| {
374+        const c = get(input, w + x, board_height - 1);
375+        if (c == '*') {
376+            sum = !sum;
377+            break;
378+        }
379+    }
380+
381+    if (sum) {
382+        var counter: u64 = 0;
383+        for (0..width) |n| {
384+            counter += numbers[n];
385+        }
386+        return counter;
387+    } else {
388+        var counter: u64 = 1;
389+        for (0..width) |n| {
390+            counter *= numbers[n];
391+        }
392+        return counter;
393+    }
394+}
395+
396+test "Day 6 part 1" {
397+    const res = pt1(@embedFile("./input/day6"));
398+    try std.testing.expect(res == 6757749566978);
399+}
400+
401+test "Day 6 part 2" {
402+    const res = pt2(@embedFile("./input/day6"));
403+    try std.testing.expect(res == 10603075273949);
404+}
405diff --git a/src/input/day6 b/src/input/day6
406new file mode 100644
407index 0000000000000000000000000000000000000000..94a75eb715fc5b073fe9e3b2eda0b856a781421c
408Binary files /dev/null and b/src/input/day6 differ
409diff --git a/src/main.zig b/src/main.zig
410index 911929f200374eb17e0ec8f9461609c4465d5d7f..abb98481e45e3776b8b7f75bf3fea8e90dde508c 100644
411--- a/src/main.zig
412+++ b/src/main.zig
413@@ -4,6 +4,7 @@ const day2 = @import("day2.zig");
414 const day3 = @import("day3.zig");
415 const day4 = @import("day4.zig");
416 const day5 = @import("day5.zig");
417+const day6 = @import("day6.zig");
418 
419 pub fn main() !void {
420     var gpa = std.heap.GeneralPurposeAllocator(.{ .thread_safe = false }){};
421@@ -33,6 +34,10 @@         } else if (std.mem.eql(u8, "day5", day)) {
422             const input = @embedFile("./input/day5");
423             print(try day5.pt1(alloc, input));
424             print(try day5.pt2(alloc, input));
425+        } else if (std.mem.eql(u8, "day6", day)) {
426+            const input = @embedFile("./input/day6");
427+            print(day6.pt1(input));
428+            print(day6.pt2(input));
429         }
430     }
431 }