「🎉」 init(2025): day 1
This commit is contained in:
1
2024/day04/.envrc
Normal file
1
2024/day04/.envrc
Normal file
@@ -0,0 +1 @@
|
||||
use flake
|
||||
27
2024/day04/flake.lock
generated
Normal file
27
2024/day04/flake.lock
generated
Normal 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
28
2024/day04/flake.nix
Normal 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
53
2024/day04/part1.py
Normal 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
38
2024/day04/part2.py
Normal 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()
|
||||
Reference in New Issue
Block a user