From f9448c3986fe51f902f3e4ad132b046b57e749b9 Mon Sep 17 00:00:00 2001 From: MrBounty Date: Sun, 8 Dec 2024 01:27:58 +0100 Subject: [PATCH] Update day 5 --- day5/part1.zig | 4 ++-- day5/part2.zig | 34 ++++++---------------------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/day5/part1.zig b/day5/part1.zig index 07e80c1..0b087fc 100644 --- a/day5/part1.zig +++ b/day5/part1.zig @@ -69,10 +69,10 @@ pub fn main() !void { while (iter.next()) |line| { if (std.mem.eql(u8, line, "")) break; - _ = try bad_rules.getOrPut(Rule{ + _ = try bad_rules.put(Rule{ .right = try std.fmt.parseInt(usize, line[0..2], 10), .left = try std.fmt.parseInt(usize, line[3..5], 10), - }); + }, {}); } // ========= Evaluate =========== diff --git a/day5/part2.zig b/day5/part2.zig index 7591a9c..0b087fc 100644 --- a/day5/part2.zig +++ b/day5/part2.zig @@ -6,8 +6,7 @@ const Rule = struct { right: usize, fn ok(self: Rule, sub_page: Rule) bool { - if (sub_page.left == self.right and sub_page.right == self.left) return false; - return true; + return !(sub_page.left == self.right and sub_page.right == self.left); } }; @@ -70,10 +69,10 @@ pub fn main() !void { while (iter.next()) |line| { if (std.mem.eql(u8, line, "")) break; - _ = try bad_rules.getOrPut(Rule{ + _ = try bad_rules.put(Rule{ .right = try std.fmt.parseInt(usize, line[0..2], 10), .left = try std.fmt.parseInt(usize, line[3..5], 10), - }); + }, {}); } // ========= Evaluate =========== @@ -93,36 +92,15 @@ pub fn main() !void { total += try evaluate(bad_rules, page.items); } - try std.testing.expectEqual(4145, total); + try std.testing.expectEqual(6949, total); } -fn pageOk(bad_rules: std.AutoHashMap(Rule, void), page: []usize) bool { +fn evaluate(bad_rules: std.AutoHashMap(Rule, void), page: []usize) !usize { var iter = PageIterator{ .indexL = 0, .indexR = 0, .buff = page }; defer iter.reset(); while (iter.next()) |sub_page| { - if (bad_rules.contains(sub_page)) return false; - } - return true; -} - -fn evaluate(bad_rules: std.AutoHashMap(Rule, void), page: []usize) !usize { - var notOk = true; - var iter = PageIterator{ .indexL = 0, .indexR = 0, .buff = page }; - - if (pageOk(bad_rules, page)) return 0; - - while (notOk) { - notOk = false; - blk: { - while (iter.next()) |sub_page| { - if (bad_rules.contains(sub_page)) { - notOk = true; - iter.swap(); - break :blk; - } - } - } + if (bad_rules.contains(sub_page)) return 0; } const middle = try std.math.divFloor(usize, page.len, 2); return page[middle];