From 8c8057fd3a493aaa11aec35602dc429873ccad42 Mon Sep 17 00:00:00 2001 From: Tarik Hijstek Date: Fri, 29 Sep 2023 13:17:28 +0200 Subject: [PATCH] non brute force solution. --- 2020/day13/mainPart2.zig | 48 ++++++++++++---------------------------- 1 file changed, 14 insertions(+), 34 deletions(-) diff --git a/2020/day13/mainPart2.zig b/2020/day13/mainPart2.zig index 6c38119..0e493c9 100644 --- a/2020/day13/mainPart2.zig +++ b/2020/day13/mainPart2.zig @@ -1,62 +1,42 @@ const input = @embedFile("inputPart2.txt"); const std = @import("std"); - pub fn main() !void { //Data wrangling var it = std.mem.tokenize(u8, input, "\n"); - var busses:[68]u32 = std.mem.zeroes([68:0]u32); + var busses: [68]u32 = std.mem.zeroes([68:0]u32); var i: u32 = 0; - while(it.next()) - |line| - :(i+=1) - { + while (it.next()) |line| : (i += 1) { busses[i] = readNum(line); } //count total active buslines var busTotal: u8 = 0; - for(busses)|bus|{ - if(bus > 0) + for (busses) |bus| { + if (bus > 0) busTotal += 1; } - const stepSize: u32 = 1; + var stepSize: u64 = 1; var n: u64 = 1; - var found: u8 = 0; - - //Algorithm - while(found != busTotal):(n+=stepSize){ - - for(busses, 0..)|bus, offset|{ - //skip - if(bus == 0){ - continue; - } - - if(((n + offset) % bus) == 0){ - found +=1; - } - } - if(found >= 7){ - std.debug.print("tick {d} has {d} aligned!\n",.{n, found}); + for (busses, 0..) |bus, offset| { + //skip + if (bus == 0) { + continue; } - if(found == busTotal){ - std.debug.print("Final tick {d}\n",.{n}); - break; - }else{ - found = 0; - } + while (((n + offset) % bus) != 0) : (n += stepSize) {} + + stepSize = stepSize * bus; } + std.debug.print("tick: {d}", .{n}); } fn readNum(line: []const u8) u32 { return std.fmt.parseInt(u32, line, 10) catch { return 0; }; - -} \ No newline at end of file +}