Day2
This commit is contained in:
1
day2/zig/input.txt
Normal file
1
day2/zig/input.txt
Normal file
@@ -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
|
||||
600
day2/zig/main.zig
Normal file
600
day2/zig/main.zig
Normal file
@@ -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});
|
||||
}
|
||||
1
day2/zig/sample.txt
Normal file
1
day2/zig/sample.txt
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user