43 lines
1.1 KiB
Zig
43 lines
1.1 KiB
Zig
|
const std = @import("std");
|
||
|
|
||
|
const first = 171309;
|
||
|
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);
|
||
|
|
||
|
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
|
||
|
numStr[0] == numStr[1] or
|
||
|
numStr[1] == numStr[2] or
|
||
|
numStr[2] == numStr[3] or
|
||
|
numStr[3] == numStr[4] or
|
||
|
numStr[4] == numStr[5];
|
||
|
}
|
||
|
|
||
|
pub fn main() anyerror!void {
|
||
|
var count: i32 = 0;
|
||
|
var i: i32 = first;
|
||
|
|
||
|
while (i <= last) : (i+=1) {
|
||
|
if (try tests1(i)) {
|
||
|
//std.debug.warn("Match: {}\n", i);
|
||
|
count+=1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
std.debug.warn("Part 1: matches: {}\n", count);
|
||
|
}
|