const std = @import("std"); const common = @import("common.zig"); const Hand = common.Hand; const data = @embedFile("inputs/puzzle.txt"); pub fn main() !void { const stdout = std.io.getStdOut().writer(); const hands = try common.parse(data); defer hands.deinit(); var sum: u64 = 0; std.mem.sort(Hand, hands.items, {}, compare_hands); for (hands.items, 1..) |hand, rank| { const value = hand.bid * rank; sum += value; } try stdout.print("{d}\n", .{sum}); } fn compare_hands(_: void, lhs: Hand, rhs: Hand) bool { if (lhs.type == rhs.type) { for (lhs.cards, rhs.cards) |lcard, rcard| { if (lcard != rcard) { return lcard < rcard; } } } else { return lhs.type.as_u8() < rhs.type.as_u8(); } return false; }