2024 Day 22 Part 1
This commit is contained in:
parent
1f36d1a292
commit
e6a34fa600
1 changed files with 50 additions and 0 deletions
50
2024/src/day22.zig
Normal file
50
2024/src/day22.zig
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const aoc = @import("aoc.zig");
|
||||||
|
|
||||||
|
const Allocator = std.mem.Allocator;
|
||||||
|
const List = std.ArrayList;
|
||||||
|
const Map = std.AutoHashMap;
|
||||||
|
const Set = aoc.AutoHashSet;
|
||||||
|
const PriorityQueue = std.PriorityQueue;
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .{};
|
||||||
|
defer _ = gpa.deinit();
|
||||||
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
|
const text = try aoc.readAll(allocator, "input/day22.txt");
|
||||||
|
defer allocator.free(text);
|
||||||
|
|
||||||
|
var lines = std.mem.tokenizeScalar(u8, text, '\n');
|
||||||
|
|
||||||
|
var seeds = List(u64).init(allocator);
|
||||||
|
defer seeds.deinit();
|
||||||
|
while (lines.next()) |line| {
|
||||||
|
const seed = try std.fmt.parseInt(u64, line, 10);
|
||||||
|
try seeds.append(seed);
|
||||||
|
}
|
||||||
|
|
||||||
|
var bw = std.io.bufferedWriter(std.io.getStdOut().writer());
|
||||||
|
const stdout = bw.writer();
|
||||||
|
|
||||||
|
try stdout.print("{}\n", .{part1(seeds.items)});
|
||||||
|
try bw.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1(seeds: []u64) u64 {
|
||||||
|
var sum: u64 = 0;
|
||||||
|
for (seeds) |seed| {
|
||||||
|
sum += simulate(seed, 2000);
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn simulate(seed: u64, steps: usize) u64 {
|
||||||
|
var n: u64 = seed;
|
||||||
|
for (0..steps) |_| {
|
||||||
|
n = ((n * 64) ^ n) % 16777216;
|
||||||
|
n = ((n / 32) ^ n) % 16777216;
|
||||||
|
n = ((n * 2048) ^ n) % 16777216;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue