🎉」 init(2025): day 1

This commit is contained in:
2025-12-01 11:25:06 +01:00
commit 6306ab23d1
52 changed files with 2012 additions and 0 deletions

1
2024/day04/.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

27
2024/day04/flake.lock generated Normal file
View File

@@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"flake": false,
"locked": {
"lastModified": 1733120037,
"narHash": "sha256-En+gSoVJ3iQKPDU1FHrR6zIxSLXKjzKY+pnh9tt+Yts=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "f9f0d5c5380be0a599b1fb54641fa99af8281539",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-24.11",
"type": "indirect"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

28
2024/day04/flake.nix Normal file
View File

@@ -0,0 +1,28 @@
{
description = "a test development environment for python";
inputs = {
nixpkgs = {
url = "nixpkgs/nixos-24.11";
flake = false;
};
};
outputs = inputs@{ nixpkgs, ... }:
{
devShell = {
x86_64-linux = let
pkgs = import nixpkgs { system = "x86_64-linux"; };
in pkgs.mkShell {
packages = with pkgs; [
gcc python3
];
shellHook = ''
echo -e "\x1B[0;33mentering python test development environment...\x1B[0m"
'';
};
};
};
}

53
2024/day04/part1.py Normal file
View File

@@ -0,0 +1,53 @@
# sorry i gave up.
import os
import os.path
target = "XMAS"
def count_horizontal(grid):
res = 0
for line in grid:
res += line.count(target)
res += line[::-1].count(target)
return (res)
def count_vertical(grid):
res = 0
for i in range(len(grid[0])):
res += (''.join([s[i] for s in grid if len(s) > i])).count(target)
res += (''.join([s[i] for s in grid if len(s) > i]))[::-1].count(target)
return (res)
def count_diagonal_left(grid):
res = 0
for i in range(len(grid)):
res += (''.join([grid[x + i][x] for x in range(min(len(grid) - i, len(grid[0])))])).count(target)
res += (''.join([grid[x + i][x] for x in range(min(len(grid) - i, len(grid[0])))]))[::-1].count(target)
for i in range(1,len(grid[0])):
res += (''.join([grid[x][x + i] for x in range(min(len(grid), len(grid[0]) - i))])).count(target)
res += (''.join([grid[x][x + i] for x in range(min(len(grid), len(grid[0]) - i))]))[::-1].count(target)
return (res)
def count_diagonal_right(grid):
res = 0
for i in range(len(grid)):
res += (''.join([(grid[x + i][::-1])[x] for x in range(min(len(grid) - i, len(grid[0])))])).count(target)
res += (''.join([(grid[x + i][::-1])[x] for x in range(min(len(grid) - i, len(grid[0])))]))[::-1].count(target)
for i in range(1,len(grid[0])):
res += (''.join([(grid[x][::-1])[x + i] for x in range(min(len(grid), len(grid[0]) - i))])).count(target)
res += (''.join([(grid[x][::-1])[x + i] for x in range(min(len(grid), len(grid[0]) - i))]))[::-1].count(target)
return (res)
def main():
file_path = "./input.txt"
if (os.path.isfile(file_path)):
content = open(file_path, "r").read()
else:
content = "MMMSXXMASM\nMSAMXMSMSA\nAMXSXMAAMM\nMSAMASMSMX\nXMASAMXAMM\nXXAMMXXAMA\nSMSMSASXSS\nSAXAMASAAA\nMAMMMXMMMM\nMXMXAXMASX"
grid = content.split('\n')
print(count_horizontal(grid) + count_vertical(grid) + count_diagonal_left(grid) + count_diagonal_right(grid))
if __name__ == '__main__':
main()

38
2024/day04/part2.py Normal file
View File

@@ -0,0 +1,38 @@
# sorry i gave up.
import os
import os.path
target = "XMAS"
def check_x(grid, x, y):
if (x not in range(1, len(grid[0]) - 1) or y not in range(1, len(grid) - 1)):
return (0)
str = grid[y - 1][x - 1] + grid[y + 1][x + 1]
if (str not in "SMS"):
return (0)
str = grid[y + 1][x - 1] + grid[y - 1][x + 1]
if (str not in "SMS"):
return (0)
return (1)
def count_xmas(grid):
res = 0
for y in range(len(grid)):
for x in range(len(grid[0])):
if (grid[y][x] == 'A'):
res += check_x(grid, x, y)
return (res)
def main():
file_path = "./input.txt"
if (os.path.isfile(file_path)):
content = open(file_path, "r").read()
else:
content = "MMMSXXMASM\nMSAMXMSMSA\nAMXSXMAAMM\nMSAMASMSMX\nXMASAMXAMM\nXXAMMXXAMA\nSMSMSASXSS\nSAXAMASAAA\nMAMMMXMMMM\nMXMXAXMASX"
grid = content.split('\n')
print(count_xmas(grid))
if __name__ == '__main__':
main()