From be0c611f0d140fd35199534b39a822b72208a1ee Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Wed, 4 Dec 2019 23:27:58 +0000 Subject: [PATCH] Day 4.2 --- 04/src/main.zig | 56 ++++++++++++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/04/src/main.zig b/04/src/main.zig index c5310cf..b813914 100644 --- a/04/src/main.zig +++ b/04/src/main.zig @@ -1,42 +1,54 @@ const std = @import("std"); const first = 171309; -const last = 643603; +const last = 643603; // - [x] It is a six-digit number (implied) // - [x] The value is within the range given in your puzzle input (implied) // - [x] Two adjacent digits are the same (like 22 in 122345). // - [x] Going from left to right, the digits never decrease; they only ever increase or stay the same (like 111123 or 135679). -fn tests1(num: i32) anyerror!bool { - var buf: [6]u8 = undefined; - var numStr = try std.fmt.bufPrint(&buf, "{}", num); +fn tests1(num: i32, str: []u8) bool { + if (str[0] > str[1] or str[1] > str[2] or + str[2] > str[3] or str[3] > str[4] or + str[4] > str[5]) return false; - if (numStr[0] > numStr[1] or - numStr[1] > numStr[2] or - numStr[2] > numStr[3] or - numStr[3] > numStr[4] or - numStr[4] > numStr[5] - ) return false; + return str[0] == str[1] or str[1] == str[2] or + str[2] == str[3] or str[3] == str[4] or + str[4] == str[5]; +} - return - numStr[0] == numStr[1] or - numStr[1] == numStr[2] or - numStr[2] == numStr[3] or - numStr[3] == numStr[4] or - numStr[4] == numStr[5]; +fn tests2(num: i32, str: []u8) bool { + if (str[0] == str[1] and str[1] != str[2]) return true; // [0 1]2 3 4 5 + if (str[1] == str[2] and str[0] != str[1] and str[2] != str[3]) return true; // 0[1 2]3 4 5 + if (str[2] == str[3] and str[1] != str[2] and str[3] != str[4]) return true; // 0 1[2 3]4 5 + if (str[3] == str[4] and str[2] != str[3] and str[4] != str[5]) return true; // 0 1 2[3 4]5 + if (str[4] == str[5] and str[3] != str[4]) return true; // 0 1 2 3[4 5] + + return false; } pub fn main() anyerror!void { - var count: i32 = 0; + var count1: i32 = 0; + var count2: i32 = 0; var i: i32 = first; - while (i <= last) : (i+=1) { - if (try tests1(i)) { - //std.debug.warn("Match: {}\n", i); - count+=1; + while (i <= last) : (i += 1) { + var buf: [6]u8 = undefined; + var numStr = try std.fmt.bufPrint(&buf, "{}", i); + + if (tests1(i, numStr)) { + count1 += 1; + + if (tests2(i, numStr)) { + std.debug.warn("Match: {}\n", i); + count2 += 1; + } } } - std.debug.warn("Part 1: matches: {}\n", count); + std.debug.warn(" 012345\n"); + + std.debug.warn("Part 1: matches: {}\n", count1); + std.debug.warn("Part 2: matches: {}\n", count2); }