🎅 2025 Day 12 Complete! 🎄
This commit is contained in:
1030
2025/day12/input
Normal file
1030
2025/day12/input
Normal file
File diff suppressed because it is too large
Load Diff
78
2025/day12/main.go
Normal file
78
2025/day12/main.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
fmt.Println()
|
||||
part2(inp)
|
||||
}
|
||||
|
||||
func part1(inp []string) {
|
||||
p, r := parseInput(inp)
|
||||
|
||||
var acc int
|
||||
for i := range r {
|
||||
area := r[i].x * r[i].y
|
||||
size := 0
|
||||
for j := range r[i].req {
|
||||
size += r[i].req[j] * p[j].area
|
||||
}
|
||||
if area > size {
|
||||
acc++
|
||||
}
|
||||
}
|
||||
fmt.Println("Part 1")
|
||||
fmt.Println(p)
|
||||
fmt.Println(acc)
|
||||
}
|
||||
|
||||
func part2(inp []string) {
|
||||
}
|
||||
|
||||
type Region struct {
|
||||
x, y int
|
||||
req []int
|
||||
}
|
||||
type Present struct {
|
||||
area int
|
||||
}
|
||||
|
||||
func BuildPresent(inp []string) Present {
|
||||
area := 0
|
||||
for _, row := range inp {
|
||||
area += bytes.Count([]byte(row), []byte{'#'})
|
||||
}
|
||||
return Present{area: area}
|
||||
}
|
||||
|
||||
func parseInput(inp []string) ([]Present, []Region) {
|
||||
// All presents are 3x3, we have 6 of them
|
||||
var presents []Present
|
||||
var regions []Region
|
||||
for i := 0; i < 30; i += 5 {
|
||||
if len(presents) == 6 {
|
||||
break
|
||||
}
|
||||
presents = append(presents, BuildPresent(inp[i+1:i+4]))
|
||||
}
|
||||
|
||||
for i := 30; i < len(inp); i++ {
|
||||
// Parse regions
|
||||
r := Region{}
|
||||
var p0, p1, p2, p3, p4, p5 int
|
||||
fmt.Sscanf(
|
||||
inp[i], "%dx%d: %d %d %d %d %d %d",
|
||||
&r.x, &r.y, &p0, &p1, &p2, &p3, &p4, &p5,
|
||||
)
|
||||
r.req = []int{p0, p1, p2, p3, p4, p5}
|
||||
regions = append(regions, r)
|
||||
}
|
||||
return presents, regions
|
||||
}
|
||||
185
2025/day12/problem
Normal file
185
2025/day12/problem
Normal file
@@ -0,0 +1,185 @@
|
||||
[1]Advent of Code
|
||||
br0xen [7](AoC++) 24*
|
||||
|
||||
--- Day 12: Christmas Tree Farm ---
|
||||
|
||||
You're almost out of time, but there can't be much left to decorate.
|
||||
Although there are no stairs, elevators, escalators, tunnels, chutes,
|
||||
teleporters, firepoles, or conduits here that would take you deeper into
|
||||
the North Pole base, there is a ventilation duct. You jump in.
|
||||
|
||||
After bumping around for a few minutes, you emerge into a large, well-lit
|
||||
cavern full of Christmas trees!
|
||||
|
||||
There are a few Elves here frantically decorating before the deadline.
|
||||
They think they'll be able to finish most of the work, but the one thing
|
||||
they're worried about is the presents for all the young Elves that live
|
||||
here at the North Pole. It's an ancient tradition to put the presents
|
||||
under the trees, but the Elves are worried they won't fit.
|
||||
|
||||
The presents come in a few standard but very weird shapes. The shapes and
|
||||
the regions into which they need to fit are all measured in standard
|
||||
units. To be aesthetically pleasing, the presents need to be placed into
|
||||
the regions in a way that follows a standardized two-dimensional unit
|
||||
grid; you also can't stack presents.
|
||||
|
||||
As always, the Elves have a summary of the situation (your puzzle input)
|
||||
for you. First, it contains a list of the presents' shapes. Second, it
|
||||
contains the size of the region under each tree and a list of the number
|
||||
of presents of each shape that need to fit into that region. For example:
|
||||
|
||||
0:
|
||||
###
|
||||
##.
|
||||
##.
|
||||
|
||||
1:
|
||||
###
|
||||
##.
|
||||
.##
|
||||
|
||||
2:
|
||||
.##
|
||||
###
|
||||
##.
|
||||
|
||||
3:
|
||||
##.
|
||||
###
|
||||
##.
|
||||
|
||||
4:
|
||||
###
|
||||
#..
|
||||
###
|
||||
|
||||
5:
|
||||
###
|
||||
.#.
|
||||
###
|
||||
|
||||
4x4: 0 0 0 0 2 0
|
||||
12x5: 1 0 1 0 2 2
|
||||
12x5: 1 0 1 0 3 2
|
||||
|
||||
The first section lists the standard present shapes. For convenience, each
|
||||
shape starts with its index and a colon; then, the shape is displayed
|
||||
visually, where # is part of the shape and . is not.
|
||||
|
||||
The second section lists the regions under the trees. Each line starts
|
||||
with the width and length of the region; 12x5 means the region is 12 units
|
||||
wide and 5 units long. The rest of the line describes the presents that
|
||||
need to fit into that region by listing the quantity of each shape of
|
||||
present; 1 0 1 0 3 2 means you need to fit one present with shape index 0,
|
||||
no presents with shape index 1, one present with shape index 2, no
|
||||
presents with shape index 3, three presents with shape index 4, and two
|
||||
presents with shape index 5.
|
||||
|
||||
Presents can be rotated and flipped as necessary to make them fit in the
|
||||
available space, but they have to always be placed perfectly on the grid.
|
||||
Shapes can't overlap (that is, the # part from two different presents
|
||||
can't go in the same place on the grid), but they can fit together (that
|
||||
is, the . part in a present's shape's diagram does not block another
|
||||
present from occupying that space on the grid).
|
||||
|
||||
The Elves need to know how many of the regions can fit the presents
|
||||
listed. In the above example, there are six unique present shapes and
|
||||
three regions that need checking.
|
||||
|
||||
The first region is 4x4:
|
||||
|
||||
....
|
||||
....
|
||||
....
|
||||
....
|
||||
|
||||
In it, you need to determine whether you could fit two presents that have
|
||||
shape index 4:
|
||||
|
||||
###
|
||||
#..
|
||||
###
|
||||
|
||||
After some experimentation, it turns out that you can fit both presents in
|
||||
this region. Here is one way to do it, using A to represent one present
|
||||
and B to represent the other:
|
||||
|
||||
AAA.
|
||||
ABAB
|
||||
ABAB
|
||||
.BBB
|
||||
|
||||
The second region, 12x5: 1 0 1 0 2 2, is 12 units wide and 5 units long.
|
||||
In that region, you need to try to fit one present with shape index 0, one
|
||||
present with shape index 2, two presents with shape index 4, and two
|
||||
presents with shape index 5.
|
||||
|
||||
It turns out that these presents can all fit in this region. Here is one
|
||||
way to do it, again using different capital letters to represent all the
|
||||
required presents:
|
||||
|
||||
....AAAFFE.E
|
||||
.BBBAAFFFEEE
|
||||
DDDBAAFFCECE
|
||||
DBBB....CCC.
|
||||
DDD.....C.C.
|
||||
|
||||
The third region, 12x5: 1 0 1 0 3 2, is the same size as the previous
|
||||
region; the only difference is that this region needs to fit one
|
||||
additional present with shape index 4. Unfortunately, no matter how hard
|
||||
you try, there is no way to fit all of the presents into this region.
|
||||
|
||||
So, in this example, 2 regions can fit all of their listed presents.
|
||||
|
||||
Consider the regions beneath each tree and the presents the Elves would
|
||||
like to fit into each of them. How many of the regions can fit all of the
|
||||
presents listed?
|
||||
|
||||
Your puzzle answer was 485.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
The Elves thank you profusely for the help and start rearranging the
|
||||
oddly-shaped presents. As you look up, you notice that a lot more Elves
|
||||
have arrived here at the Christmas tree farm.
|
||||
|
||||
In fact, many of these new arrivals look familiar: they're the Elves you
|
||||
helped while decorating the North Pole base. Right on [16]schedule, each
|
||||
group seems to have brought a star to put atop one of the Christmas trees!
|
||||
|
||||
Before any of them can find a ladder, a particularly large Christmas tree
|
||||
suddenly flashes brightly when a large star magically appears above it! As
|
||||
your eyes readjust, you think you notice a portly man with a white beard
|
||||
disappear into the crowd.
|
||||
|
||||
You go look for a ladder; only 23 stars to go.
|
||||
|
||||
If you like, you can [17][ [Decorate the North Pole Again] ] .
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
At this point, all that is left is for you to [18]admire your Advent
|
||||
calendar.
|
||||
|
||||
References
|
||||
|
||||
Visible links
|
||||
1. https://adventofcode.com/
|
||||
2. https://adventofcode.com/2025/about
|
||||
3. https://adventofcode.com/2025/events
|
||||
4. https://adventofcode.com/2025/shop
|
||||
5. https://adventofcode.com/2025/settings
|
||||
6. https://adventofcode.com/2025/auth/logout
|
||||
7. Advent of Code Supporter
|
||||
https://adventofcode.com/2025/support
|
||||
8. https://adventofcode.com/2025
|
||||
9. https://adventofcode.com/2025
|
||||
10. https://adventofcode.com/2025/support
|
||||
11. https://adventofcode.com/2025/sponsors
|
||||
12. https://adventofcode.com/2025/leaderboard/private
|
||||
13. https://adventofcode.com/2025/stats
|
||||
14. https://adventofcode.com/2025/sponsors
|
||||
15. https://adventofcode.com/2025/sponsors/redirect?url=https%3A%2F%2Fwww%2Eshopify%2Ecom%2Fcareers
|
||||
16. https://adventofcode.com/2025/day/1
|
||||
18. https://adventofcode.com/2025
|
||||
19. https://adventofcode.com/2025/day/12/input
|
||||
33
2025/day12/testinput
Normal file
33
2025/day12/testinput
Normal file
@@ -0,0 +1,33 @@
|
||||
0:
|
||||
###
|
||||
##.
|
||||
##.
|
||||
|
||||
1:
|
||||
###
|
||||
##.
|
||||
.##
|
||||
|
||||
2:
|
||||
.##
|
||||
###
|
||||
##.
|
||||
|
||||
3:
|
||||
##.
|
||||
###
|
||||
##.
|
||||
|
||||
4:
|
||||
###
|
||||
#..
|
||||
###
|
||||
|
||||
5:
|
||||
###
|
||||
.#.
|
||||
###
|
||||
|
||||
4x4: 0 0 0 0 2 0
|
||||
12x5: 1 0 1 0 2 2
|
||||
12x5: 1 0 1 0 3 2
|
||||
Reference in New Issue
Block a user