Solved 2024/18 P2
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
## \-\-- Day 19: Linen Layout \-\--
|
||||
|
||||
Today, The Historians take you up to the [hot springs](/2023/day/12) on
|
||||
Gear Island! Very
|
||||
[suspiciously](https://www.youtube.com/watch?v=ekL881PJMjI),
|
||||
absolutely nothing goes wrong as they begin their careful search of the
|
||||
vast field of helixes.
|
||||
|
||||
Could this *finally* be your chance to visit the
|
||||
[onsen](https://en.wikipedia.org/wiki/Onsen) next door?
|
||||
Only one way to find out.
|
||||
|
||||
After a brief conversation with the reception staff at the onsen front
|
||||
desk, you discover that you don\'t have the right kind of money to pay
|
||||
the admission fee. However, before you can leave, the staff get your
|
||||
attention. Apparently, they\'ve heard about how you helped at the hot
|
||||
springs, and they\'re willing to make a deal: if you can simply help
|
||||
them *arrange their towels*, they\'ll let you in for *free*!
|
||||
|
||||
Every towel at this onsen is marked with a *pattern of colored stripes*.
|
||||
There are only a few patterns, but for any particular pattern, the staff
|
||||
can get you as many towels with that pattern as you need. Each
|
||||
stripe
|
||||
can be *white* (`w`), *blue* (`u`), *black* (`b`), *red* (`r`), or
|
||||
*green* (`g`). So, a towel with the pattern `ggr` would have a green
|
||||
stripe, a green stripe, and then a red stripe, in that order. (You
|
||||
can\'t reverse a pattern by flipping a towel upside-down, as that would
|
||||
cause the onsen logo to face the wrong way.)
|
||||
|
||||
The Official Onsen Branding Expert has produced a list of *designs* -
|
||||
each a long sequence of stripe colors - that they would like to be able
|
||||
to display. You can use any towels you want, but all of the towels\'
|
||||
stripes must exactly match the desired design. So, to display the design
|
||||
`rgrgr`, you could use two `rg` towels and then an `r` towel, an `rgr`
|
||||
towel and then a `gr` towel, or even a single massive `rgrgr` towel
|
||||
(assuming such towel patterns were actually available).
|
||||
|
||||
To start, collect together all of the available towel patterns and the
|
||||
list of desired designs (your puzzle input). For example:
|
||||
|
||||
r, wr, b, g, bwu, rb, gb, br
|
||||
|
||||
brwrr
|
||||
bggr
|
||||
gbbr
|
||||
rrbgbr
|
||||
ubwu
|
||||
bwurrg
|
||||
brgr
|
||||
bbrgwb
|
||||
|
||||
The first line indicates the available towel patterns; in this example,
|
||||
the onsen has unlimited towels with a single red stripe (`r`), unlimited
|
||||
towels with a white stripe and then a red stripe (`wr`), and so on.
|
||||
|
||||
After the blank line, the remaining lines each describe a design the
|
||||
onsen would like to be able to display. In this example, the first
|
||||
design (`brwrr`) indicates that the onsen would like to be able to
|
||||
display a black stripe, a red stripe, a white stripe, and then two red
|
||||
stripes, in that order.
|
||||
|
||||
Not all designs will be possible with the available towels. In the above
|
||||
example, the designs are possible or impossible as follows:
|
||||
|
||||
- `brwrr` can be made with a `br` towel, then a `wr` towel, and then
|
||||
finally an `r` towel.
|
||||
- `bggr` can be made with a `b` towel, two `g` towels, and then an `r`
|
||||
towel.
|
||||
- `gbbr` can be made with a `gb` towel and then a `br` towel.
|
||||
- `rrbgbr` can be made with `r`, `rb`, `g`, and `br`.
|
||||
- `ubwu` is *impossible*.
|
||||
- `bwurrg` can be made with `bwu`, `r`, `r`, and `g`.
|
||||
- `brgr` can be made with `br`, `g`, and `r`.
|
||||
- `bbrgwb` is *impossible*.
|
||||
|
||||
In this example, `6` of the eight designs are possible with the
|
||||
available towel patterns.
|
||||
|
||||
To get into the onsen as soon as possible, consult your list of towel
|
||||
patterns and desired designs carefully. *How many designs are possible?*
|
||||
|
||||
To begin, [get your puzzle input](19/input).
|
||||
|
||||
Answer:
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/bin/python3
|
||||
import sys,time,re
|
||||
from pprint import pprint
|
||||
sys.path.insert(0, '../../')
|
||||
from fred import list2int,get_re,nprint,bfs
|
||||
start_time = time.time()
|
||||
|
||||
input_f = 'test'
|
||||
|
||||
def loadFile():
|
||||
colors = []
|
||||
towels = []
|
||||
with open(input_f) as file:
|
||||
for l,line in enumerate(file):
|
||||
if l == 0:
|
||||
colors = line.rstrip().split(',')
|
||||
if l > 1:
|
||||
towels.append(line.rstrip())
|
||||
return colors,towels
|
||||
|
||||
#########################################
|
||||
# #
|
||||
# Part 1 #
|
||||
# #
|
||||
#########################################
|
||||
|
||||
|
||||
|
||||
def part1():
|
||||
colors,towels = loadFile()
|
||||
|
||||
return
|
||||
|
||||
start_time = time.time()
|
||||
print('Part 1:',part1(), '\t\t', round((time.time() - start_time)*1000), 'ms')
|
||||
|
||||
|
||||
#########################################
|
||||
# #
|
||||
# Part 2 #
|
||||
# #
|
||||
#########################################
|
||||
def part2():
|
||||
return
|
||||
|
||||
start_time = time.time()
|
||||
print('Part 2:',part2(), '\t\t', round((time.time() - start_time)*1000), 'ms')
|
||||
Reference in New Issue
Block a user