| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- const std = @import("std");
- const inputModule = @import("input.zig");
- const indicatorsModule = @import("indicators.zig");
- const MachineScheme = inputModule.MachineScheme;
- const readInput = inputModule.readInput;
- const Indicators = indicatorsModule.Indicators;
- const IndicatorSet = indicatorsModule.IndicatorSet;
- const createIndicators = indicatorsModule.createIndicators;
- const print = std.debug.print;
- const readInputIntoString = inputModule.readInputIntoString;
- const readMachineScheme = inputModule.readMachineScheme;
- pub fn main() !void {
- var gpa = std.heap.GeneralPurposeAllocator(.{}){};
- const allocator = gpa.allocator();
- var totalButtonPresses: i32 = 0;
- const machineSchemes = try readInput(allocator, "input.txt");
- for (machineSchemes) |machineScheme| {
- var initialIndicators = try createIndicators(allocator, machineScheme);
- if (initialIndicators.isComplete()) {
- continue;
- }
- var buttonPresses: i32 = 1;
- var indicatorsSet = IndicatorSet.init(allocator);
- try initialIndicators.applyAllButtons(allocator, &indicatorsSet);
- outer: while(true) {
- var it = indicatorsSet.keyIterator();
- while (it.next()) |indicators| {
- if (indicators.isComplete()) {
- break :outer;
- }
- }
- buttonPresses += 1;
-
- var nextIndicatorsSet = IndicatorSet.init(allocator);
- it = indicatorsSet.keyIterator();
- while (it.next()) |indicators| {
- try indicators.applyAllButtons(allocator, &nextIndicatorsSet);
- }
- indicatorsSet = nextIndicatorsSet;
- }
-
- totalButtonPresses += buttonPresses;
- }
- print("total: {d}\n", .{totalButtonPresses});
- }
|