diff --git a/.envrc b/.envrc index b4523a3..0c271d5 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,4 @@ -PATH_add sbin +PATH_add bin export AOCROOT=`pwd` export CURRDAY=`date +%d` diff --git a/2025/day02/input b/2025/day02/input new file mode 100644 index 0000000..91e39ee --- /dev/null +++ b/2025/day02/input @@ -0,0 +1 @@ +9595822750-9596086139,1957-2424,88663-137581,48152-65638,12354817-12385558,435647-489419,518494-609540,2459-3699,646671-688518,195-245,295420-352048,346-514,8686839668-8686892985,51798991-51835611,8766267-8977105,2-17,967351-995831,6184891-6331321,6161577722-6161678622,912862710-913019953,6550936-6625232,4767634976-4767662856,2122995-2257010,1194-1754,779-1160,22-38,4961-6948,39-53,102-120,169741-245433,92902394-92956787,531-721,64-101,15596-20965,774184-943987,8395-11781,30178-47948,94338815-94398813 diff --git a/2025/day02/main.go b/2025/day02/main.go new file mode 100644 index 0000000..6ab532f --- /dev/null +++ b/2025/day02/main.go @@ -0,0 +1,67 @@ +package main + +import ( + "fmt" + "strings" + + h "git.bullercodeworks.com/brian/adventofcode/helpers" +) + +func main() { + inp := h.StdinToString() + part1(inp) + part2(inp) +} + +func part1(inp string) { + var res int + ranges := getRanges(inp) + for _, rng := range ranges { + for wrk := rng.beg; wrk <= rng.end; wrk++ { + sWrk := h.Itoa(wrk) + hlf := len(sWrk) / 2 + if sWrk[:hlf] == sWrk[hlf:] { + res += wrk + } + } + } + fmt.Println("# Part 1") + fmt.Println(res) +} + +func part2(inp string) { + var res int + ranges := getRanges(inp) + for _, rng := range ranges { + for wrk := rng.beg; wrk <= rng.end; wrk++ { + sWrk := h.Itoa(wrk) + cnt := len(sWrk) + for i := 0; i < cnt/2; i++ { + ch := i + 1 + if cnt%ch != 0 { // Must be divisible + continue + } + if strings.Repeat(sWrk[:ch], cnt/ch) == sWrk { + res += wrk + break + } + } + } + } + fmt.Println("# Part 2") + fmt.Println(res) +} + +type Range struct { + beg, end int +} + +func getRanges(inp string) []Range { + ret := []Range{} + segs := strings.Split(inp, ",") + for i := range segs { + pts := strings.Split(segs[i], "-") + ret = append(ret, Range{beg: h.Atoi(pts[0]), end: h.Atoi(pts[1])}) + } + return ret +} diff --git a/2025/day02/problem b/2025/day02/problem new file mode 100644 index 0000000..5214aa8 --- /dev/null +++ b/2025/day02/problem @@ -0,0 +1,119 @@ +Advent of Code + +br0xen [7](AoC++) 4* + +--- Day 2: Gift Shop --- + + You get inside and take the elevator to its only other stop: the gift + shop. "Thank you for visiting the North Pole!" gleefully exclaims a nearby + sign. You aren't sure who is even allowed to visit the North Pole, but you + know you can access the lobby through here, and from there you can access + the rest of the North Pole base. + + As you make your way through the surprisingly extensive selection, one of + the clerks recognizes you and asks for your help. + + As it turns out, one of the younger Elves was playing on a gift shop + computer and managed to add a whole bunch of invalid product IDs to their + gift shop database! Surely, it would be no trouble for you to identify the + invalid product IDs for them, right? + + They've even checked most of the product ID ranges already; they only have + a few product ID ranges (your puzzle input) that you'll need to check. For + example: + + 11-22,95-115,998-1012,1188511880-1188511890,222220-222224, + 1698522-1698528,446443-446449,38593856-38593862,565653-565659, + 824824821-824824827,2121212118-2121212124 + + (The ID ranges are wrapped here for legibility; in your input, they appear + on a single long line.) + + The ranges are separated by commas (,); each range gives its first ID and + last ID separated by a dash (-). + + Since the young Elf was just doing silly patterns, you can find the + invalid IDs by looking for any ID which is made only of some sequence of + digits repeated twice. So, 55 (5 twice), 6464 (64 twice), and 123123 (123 + twice) would all be invalid IDs. + + None of the numbers have leading zeroes; 0101 isn't an ID at all. (101 is + a valid ID that you would ignore.) + + Your job is to find all of the invalid IDs that appear in the given + ranges. In the above example: + + • 11-22 has two invalid IDs, 11 and 22. + • 95-115 has one invalid ID, 99. + • 998-1012 has one invalid ID, 1010. + • 1188511880-1188511890 has one invalid ID, 1188511885. + • 222220-222224 has one invalid ID, 222222. + • 1698522-1698528 contains no invalid IDs. + • 446443-446449 has one invalid ID, 446446. + • 38593856-38593862 has one invalid ID, 38593859. + • The rest of the ranges contain no invalid IDs. + + Adding up all the invalid IDs in this example produces 1227775554. + + What do you get if you add up all of the invalid IDs? + + Your puzzle answer was 40398804950. + +--- Part Two --- + + The clerk quickly discovers that there are still invalid IDs in the ranges + in your list. Maybe the young Elf was doing other silly patterns as well? + + Now, an ID is invalid if it is made only of some sequence of digits + repeated at least twice. So, 12341234 (1234 two times), 123123123 (123 + three times), 1212121212 (12 five times), and 1111111 (1 seven times) are + all invalid IDs. + + From the same example as before: + + • 11-22 still has two invalid IDs, 11 and 22. + • 95-115 now has two invalid IDs, 99 and 111. + • 998-1012 now has two invalid IDs, 999 and 1010. + • 1188511880-1188511890 still has one invalid ID, 1188511885. + • 222220-222224 still has one invalid ID, 222222. + • 1698522-1698528 still contains no invalid IDs. + • 446443-446449 still has one invalid ID, 446446. + • 38593856-38593862 still has one invalid ID, 38593859. + • 565653-565659 now has one invalid ID, 565656. + • 824824821-824824827 now has one invalid ID, 824824824. + • 2121212118-2121212124 now has one invalid ID, 2121212121. + + Adding up all the invalid IDs in this example produces 4174379265. + + What do you get if you add up all of the invalid IDs using these new + rules? + + Your puzzle answer was 65794984339. + + Both parts of this puzzle are complete! They provide two gold stars: ** + + At this point, you should [16]return to your Advent calendar and try + another puzzle. + + If you still want to see it, you can [17]get your puzzle input. + +References + + Visible links + 1. https://adventofcode.com/ + 2. https://adventofcode.com/2025/about + 3. https://adventofcode.com/2025/events + 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%2Ecitadelsecurities%2Ecom%2F + 16. https://adventofcode.com/2025 + 17. https://adventofcode.com/2025/day/2/input diff --git a/2025/day02/testinput b/2025/day02/testinput new file mode 100644 index 0000000..a3f22ef --- /dev/null +++ b/2025/day02/testinput @@ -0,0 +1 @@ +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124