Solved 2024/04 P1 + P2

This commit is contained in:
2024-12-04 20:53:21 +01:00
parent 0d35287000
commit 68d3e12001
8 changed files with 229 additions and 30 deletions
+104
View File
@@ -0,0 +1,104 @@
## \-\-- Day 4: Ceres Search \-\--
\"Looks like the Chief\'s not here. Next!\" One of The Historians pulls
out a device and pushes the only button on it. After a brief flash, you
recognize the interior of the [Ceres monitoring station](/2019/day/10)!
As the search for the Chief continues, a small Elf who lives on the
station tugs on your shirt; she\'d like to know if you could help her
with her *word search* (your puzzle input). She only has to find one
word: `XMAS`.
This word search allows words to be horizontal, vertical, diagonal,
written backwards, or even overlapping other words. It\'s a little
unusual, though, as you don\'t merely need to find one instance of
`XMAS` - you need to find *all of them*. Here are a few ways `XMAS`
might appear, where irrelevant characters have been replaced with `.`:
..X...
.SAMX.
.A..A.
XMAS.S
.X....
The actual word search will be full of letters instead. For example:
MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX
In this word search, `XMAS` occurs a total of `18` times; here\'s the
same word search again, but where letters not involved in any `XMAS`
have been replaced with `.`:
....XXMAS.
.SAMXMS...
...S..A...
..A.A.MS.X
XMASAMX.MM
X.....XA.A
S.S.S.S.SS
.A.A.A.A.A
..M.M.M.MM
.X.X.XMASX
Take a look at the little Elf\'s word search. *How many times does
`XMAS` appear?*
Your puzzle answer was `2378`.
## \-\-- Part Two \-\-- {#part2}
The Elf looks quizzically at you. Did you misunderstand the assignment?
Looking for the instructions, you flip over the word search to find that
this isn\'t actually an `XMAS` puzzle; it\'s an
`X-MAS`
puzzle in which you\'re supposed to find two `MAS` in the shape of an
`X`. One way to achieve that is like this:
M.S
.A.
M.S
Irrelevant characters have again been replaced with `.` in the above
diagram. Within the `X`, each `MAS` can be written forwards or
backwards.
Here\'s the same example from before, but this time all of the `X-MAS`es
have been kept instead:
.M.S......
..A..MSMS.
.M.S.MAA..
..A.ASMSM.
.M.S.M....
..........
S.S.S.S.S.
.A.A.A.A..
M.M.M.M.M.
..........
In this example, an `X-MAS` appears `9` times.
Flip the word search from the instructions back over to the word search
side and try again. *How many times does an `X-MAS` appear?*
Your puzzle answer was `1796`.
Both parts of this puzzle are complete! They provide two gold stars:
\*\*
At this point, you should [return to your Advent calendar](/2024) and
try another puzzle.
If you still want to see it, you can [get your puzzle
input](4/input).
+66
View File
@@ -0,0 +1,66 @@
#!/bin/python3
import sys,re
from itertools import cycle
from pprint import pprint
sys.path.insert(0, '../../')
from fred import list2int,get_re,nprint,lprint, toGrid,grid_valid,addTuples,get_value_in_direction
input_f = 'input'
part = 2
grid = toGrid(input_f)
directions = {
'up': (-1, 0),
'down': (1, 0),
'left': (0, -1),
'right': (0, 1),
'up-left': (-1, -1),
'up-right': (-1, 1),
'down-left': (1, -1),
'down-right': (1, 1)
}
count = 0
#########################################
# #
# Part 1 #
# #
#########################################
if part == 1:
directions = {
'up': (-1, 0),
'down': (1, 0),
'left': (0, -1),
'right': (0, 1),
'up-left': (-1, -1),
'up-right': (-1, 1),
'down-left': (1, -1),
'down-right': (1, 1)
}
for r, rows in enumerate(grid):
for c, _ in enumerate(rows):
if get_value_in_direction(grid,(r,c)) == 'X':
for d in directions:
if get_value_in_direction(grid,(r,c),d,4,'str') == 'XMAS':
count += 1
print(count)
#########################################
# #
# Part 2 #
# #
#########################################
if part == 2:
# Kinda ugly code, wish it would be nicer.
for r, rows in enumerate(grid):
for c, _ in enumerate(rows):
tmp = ''
if get_value_in_direction(grid,(r,c)) == 'A':
if (get_value_in_direction(grid,(r,c),'up-left') == 'M' and get_value_in_direction(grid,(r,c),'down-right') == 'S') or (get_value_in_direction(grid,(r,c),'up-left') == 'S' and get_value_in_direction(grid,(r,c),'down-right') == 'M'):
if (get_value_in_direction(grid,(r,c),'up-right') == 'M' and get_value_in_direction(grid,(r,c),'down-left') == 'S') or (get_value_in_direction(grid,(r,c),'up-right') == 'S' and get_value_in_direction(grid,(r,c),'down-left') == 'M'):
count += 1
print(count)