day10a.zig 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const std = @import("std");
  2. const inputModule = @import("input.zig");
  3. const indicatorsModule = @import("indicators.zig");
  4. const MachineScheme = inputModule.MachineScheme;
  5. const readInput = inputModule.readInput;
  6. const Indicators = indicatorsModule.Indicators;
  7. const IndicatorSet = indicatorsModule.IndicatorSet;
  8. const createIndicators = indicatorsModule.createIndicators;
  9. const print = std.debug.print;
  10. const readInputIntoString = inputModule.readInputIntoString;
  11. const readMachineScheme = inputModule.readMachineScheme;
  12. pub fn main() !void {
  13. var gpa = std.heap.GeneralPurposeAllocator(.{}){};
  14. const allocator = gpa.allocator();
  15. var totalButtonPresses: i32 = 0;
  16. const machineSchemes = try readInput(allocator, "input.txt");
  17. for (machineSchemes) |machineScheme| {
  18. var initialIndicators = try createIndicators(allocator, machineScheme);
  19. if (initialIndicators.isComplete()) {
  20. continue;
  21. }
  22. var buttonPresses: i32 = 1;
  23. var indicatorsSet = IndicatorSet.init(allocator);
  24. try initialIndicators.applyAllButtons(allocator, &indicatorsSet);
  25. outer: while(true) {
  26. var it = indicatorsSet.keyIterator();
  27. while (it.next()) |indicators| {
  28. if (indicators.isComplete()) {
  29. break :outer;
  30. }
  31. }
  32. buttonPresses += 1;
  33. var nextIndicatorsSet = IndicatorSet.init(allocator);
  34. it = indicatorsSet.keyIterator();
  35. while (it.next()) |indicators| {
  36. try indicators.applyAllButtons(allocator, &nextIndicatorsSet);
  37. }
  38. indicatorsSet = nextIndicatorsSet;
  39. }
  40. totalButtonPresses += buttonPresses;
  41. }
  42. print("total: {d}\n", .{totalButtonPresses});
  43. }