mirror of
https://github.com/javalsai/aoc.git
synced 2026-01-13 01:19:59 +01:00
day 2 ;(
This commit is contained in:
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# inputs
|
||||||
|
demo.txt
|
||||||
|
input.txt
|
||||||
|
|
||||||
|
# binaries
|
||||||
|
main
|
||||||
|
test
|
||||||
|
|
||||||
|
# object files
|
||||||
|
*.o
|
||||||
|
|
||||||
|
# zig...
|
||||||
|
.zig-cache
|
||||||
|
*.log
|
||||||
37
2024/02/p1/main.zig
Normal file
37
2024/02/p1/main.zig
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var file = try std.fs.cwd()
|
||||||
|
.openFile("../input.txt", .{});
|
||||||
|
defer file.close();
|
||||||
|
|
||||||
|
var buf_reader = std.io.bufferedReader(file.reader());
|
||||||
|
var in_stream = buf_reader.reader();
|
||||||
|
|
||||||
|
var buf: [64]u8 = undefined;
|
||||||
|
var t: u32 = 0;
|
||||||
|
while (try in_stream.readUntilDelimiterOrEof(&buf, '\n')) |line| {
|
||||||
|
var split_iter = std.mem.split(u8, line, " ");
|
||||||
|
|
||||||
|
var dir: i8 = 0;
|
||||||
|
var prev = try std.fmt.parseInt(i8, split_iter.next() orelse unreachable, 10);
|
||||||
|
t += while (split_iter.next()) |strnum| {
|
||||||
|
const n = try std.fmt.parseInt(i8, strnum, 10);
|
||||||
|
const d = prev - n;
|
||||||
|
prev = n;
|
||||||
|
if (d == 0 or @abs(d) > 3)
|
||||||
|
break 0;
|
||||||
|
|
||||||
|
if (dir == 0) {
|
||||||
|
dir = d;
|
||||||
|
} else if (!sameSign(dir, d)) {
|
||||||
|
break 0;
|
||||||
|
}
|
||||||
|
} else 1;
|
||||||
|
}
|
||||||
|
std.debug.print("Total {d}\n", .{t});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sameSign(n1: i8, n2: i8) bool {
|
||||||
|
return (n1 < 0) == (n2 < 0);
|
||||||
|
}
|
||||||
69
2024/02/p2/main.zig
Normal file
69
2024/02/p2/main.zig
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
var file = try std.fs.cwd()
|
||||||
|
.openFile("../input.txt", .{});
|
||||||
|
defer file.close();
|
||||||
|
|
||||||
|
var buf_reader = std.io.bufferedReader(file.reader());
|
||||||
|
var in_stream = buf_reader.reader();
|
||||||
|
|
||||||
|
var buf: [64]u8 = undefined;
|
||||||
|
var t: u32 = 0;
|
||||||
|
out: while (try in_stream.readUntilDelimiterOrEof(&buf, '\n')) |line| {
|
||||||
|
var split_iter = std.mem.split(u8, line, " ");
|
||||||
|
const first_res = try check_list(&split_iter, null);
|
||||||
|
if (first_res != null) {
|
||||||
|
var res: ?usize = first_res;
|
||||||
|
var fail: usize = 0;
|
||||||
|
while (res != null) {
|
||||||
|
if (res.? < fail) {
|
||||||
|
// std.debug.print(".. {s}\n", .{line});
|
||||||
|
continue :out;
|
||||||
|
}
|
||||||
|
var split_iter_l = std.mem.split(u8, line, " ");
|
||||||
|
res = try check_list(&split_iter_l, fail);
|
||||||
|
fail += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t += 1;
|
||||||
|
}
|
||||||
|
std.debug.print("Total {d}\n", .{t});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sameSign(n1: i8, n2: i8) bool {
|
||||||
|
return (n1 < 0) == (n2 < 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// null if everythin alr
|
||||||
|
// idx num of failure otherwise
|
||||||
|
pub fn check_list(iter: *std.mem.SplitIterator(u8, .sequence), skip: ?usize) !?usize {
|
||||||
|
var dir: i8 = 0;
|
||||||
|
var i: usize = 0;
|
||||||
|
if (skip != null and skip.? == 0) {
|
||||||
|
_ = iter.next();
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
var prev = try std.fmt.parseInt(i8, iter.next().?, 10);
|
||||||
|
while (iter.next()) |strnum| {
|
||||||
|
i += 1;
|
||||||
|
if (skip != null and skip.? == i) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const n = try std.fmt.parseInt(i8, strnum, 10);
|
||||||
|
// std.debug.print("i={d} prev={} sk={any} n={}\n", .{ i, prev, skip, n });
|
||||||
|
const d = prev - n;
|
||||||
|
if (d == 0 or @abs(d) > 3) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir == 0) {
|
||||||
|
dir = d;
|
||||||
|
} else if (!sameSign(dir, d)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
prev = n;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
44
2024/02/p2/test.zig
Normal file
44
2024/02/p2/test.zig
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
const line = "50 29 30 31 34 35 37";
|
||||||
|
var iter = std.mem.split(u8, line, " ");
|
||||||
|
const res = check_list(&iter, 0);
|
||||||
|
std.debug.print("{any}\n", .{res});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sameSign(n1: i8, n2: i8) bool {
|
||||||
|
return (n1 < 0) == (n2 < 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// null if everythin alr
|
||||||
|
// idx num of failure otherwise
|
||||||
|
pub fn check_list(iter: *std.mem.SplitIterator(u8, .sequence), skip: ?usize) !?usize {
|
||||||
|
var dir: i8 = 0;
|
||||||
|
var i: usize = 0;
|
||||||
|
if (skip != null and skip.? == 0) {
|
||||||
|
_ = iter.next();
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
var prev = try std.fmt.parseInt(i8, iter.next().?, 10);
|
||||||
|
while (iter.next()) |strnum| {
|
||||||
|
i += 1;
|
||||||
|
if (skip != null and skip.? == i) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const n = try std.fmt.parseInt(i8, strnum, 10);
|
||||||
|
std.debug.print("i={d} prev={} sk={any} n={}\n", .{ i, prev, skip, n });
|
||||||
|
const d = prev - n;
|
||||||
|
if (d == 0 or @abs(d) > 3) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir == 0) {
|
||||||
|
dir = d;
|
||||||
|
} else if (!sameSign(dir, d)) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
prev = n;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
8
README.md
Normal file
8
README.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# AOC
|
||||||
|
What is AOC??: [adventofcode](https://adventofcode.com)
|
||||||
|
|
||||||
|
All this is a mix of langs, but in general:
|
||||||
|
* `asm`: I use nasm, at least for now for assembly programs (linux, x86\_64), no special linking normallly, so just elf64 compile and link.
|
||||||
|
* `zig`: No need to set up a full project, simply `zig build-exe -fstrip -OReleaseFast main.zig`
|
||||||
|
|
||||||
|
I also tend to use `perf stat` to check their performance.
|
||||||
Reference in New Issue
Block a user