diff --git a/day2/zig/input.txt b/day2/zig/input.txt new file mode 100644 index 0000000..7d2d160 --- /dev/null +++ b/day2/zig/input.txt @@ -0,0 +1 @@ +5542145-5582046,243-401,884211-917063,1174-1665,767028-791710,308275-370459,285243789-285316649,3303028-3361832,793080-871112,82187-123398,7788-14096,21-34,33187450-33443224,2750031-2956556,19974-42168,37655953-37738891,1759-2640,55544-75026,9938140738-9938223673,965895186-966026269,502675-625082,11041548-11204207,1-20,3679-7591,8642243-8776142,40-88,2872703083-2872760877,532-998,211488-230593,3088932-3236371,442734-459620,8484829519-8484873271,5859767462-5859911897,9987328-10008767,656641-673714,262248430-262271846 diff --git a/day2/zig/main.zig b/day2/zig/main.zig new file mode 100644 index 0000000..ad7fcd9 --- /dev/null +++ b/day2/zig/main.zig @@ -0,0 +1,600 @@ +const std = @import("std"); + +const Range = struct { begin: u64, end: u64 }; + +pub fn main() !void { + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + defer _ = gpa.deinit(); + var stdin_buffer: [1024]u8 = undefined; + var stdin_reader = std.fs.File.stdin().reader(&stdin_buffer); + + const stdin = &stdin_reader.interface; + + const allocator = gpa.allocator(); + var ranges = try std.ArrayList(Range).initCapacity(allocator, 1); + defer ranges.deinit(allocator); + + while (try stdin.takeDelimiter(',')) |range_str| { + const range_str_trimmed = std.mem.trim(u8, range_str, "\n"); + + var it = std.mem.splitScalar(u8, range_str_trimmed, '-'); + + const begin = try std.fmt.parseInt(u64, it.next().?, 10); + const end = try std.fmt.parseInt(u64, it.next().?, 10); + + const range = Range{ .begin = begin, .end = end }; + + try ranges.append(allocator, range); + } + + var i: u64 = 1; + var task1: u64 = 0; + var task2: u64 = 0; + var founds = try std.ArrayList(u64).initCapacity(allocator, 1); + defer founds.deinit(allocator); + while (i < 1000000) : (i += 1) { + var n: u64 = i; + var digits: u64 = 0; + var number: u64 = i; + + while (n != 0) { + digits += 1; + n /= 10; + } + + // doubles + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + task1 += number; + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + + break; + } + } + + number = 0; + // Triples + if (i < 10000) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 4s + if (i < 1000) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 5s + if (i < 1000) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 6s + if (i < 100) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 7s + if (i < 100) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 8s + if (i < 100) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 9s + if (i < 100) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 10s + if (i < 100) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 11s + if (i < 10) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + // 12s + if (i < 10) { + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (0..digits) |_| { + number *= 10; + } + number += i; + + for (ranges.items) |range| { + if (number <= range.end and number >= range.begin) { + var f = false; + for (founds.items) |found| { + if (found == number) { + f = true; + break; + } + } + if (!f) { + task2 += number; + try founds.append(allocator, number); + } + break; + } + } + } + number = 0; + } + + std.debug.print("{d}\n", .{task1}); + std.debug.print("{d}\n", .{task2}); +} diff --git a/day2/zig/sample.txt b/day2/zig/sample.txt new file mode 100644 index 0000000..a3f22ef --- /dev/null +++ b/day2/zig/sample.txt @@ -0,0 +1 @@ +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124