Solved 2024/04 P1 + P2
This commit is contained in:
+104
@@ -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).
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user