Compare commits
No commits in common. "b04ae5c077a96ea3854f6a53f53e05617d861bfd" and "906cc597cd3ec9c97b5aa83d34001c4027331c57" have entirely different histories.
b04ae5c077
...
906cc597cd
4
go.mod
4
go.mod
@ -1,7 +1,3 @@
|
|||||||
module git.bizdoc.ro/gabi-public/Advent-of-Code.git
|
module git.bizdoc.ro/gabi-public/Advent-of-Code.git
|
||||||
|
|
||||||
go 1.25.1
|
go 1.25.1
|
||||||
|
|
||||||
require git.bizdoc.ro/private/devkit.git v0.0.0-20250902190935-21cc248cb135
|
|
||||||
|
|
||||||
require golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
|
|
||||||
|
|||||||
4
go.sum
4
go.sum
@ -1,4 +0,0 @@
|
|||||||
git.bizdoc.ro/private/devkit.git v0.0.0-20250902190935-21cc248cb135 h1:mUorxNlLlyvmPuZMKP80RFJVRcI1j85u1g8TDPht7AM=
|
|
||||||
git.bizdoc.ro/private/devkit.git v0.0.0-20250902190935-21cc248cb135/go.mod h1:r/tE3YYNlrYNQc9DF4ph2Ur5WYKCtaqOM+8jqvzSoAQ=
|
|
||||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo=
|
|
||||||
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak=
|
|
||||||
@ -5,10 +5,11 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"iter"
|
"iter"
|
||||||
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Day1Part1(r io.Reader, l Logger) (any, error) {
|
func Day1Part1(r io.Reader, l *log.Logger) (any, error) {
|
||||||
dial := 50
|
dial := 50
|
||||||
solution := 0
|
solution := 0
|
||||||
for pair := range day1GetPairs(r) {
|
for pair := range day1GetPairs(r) {
|
||||||
@ -26,7 +27,7 @@ func Day1Part1(r io.Reader, l Logger) (any, error) {
|
|||||||
return solution, nil
|
return solution, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day1Part2Slow(r io.Reader, l Logger) (any, error) {
|
func Day1Part2Slow(r io.Reader, l *log.Logger) (any, error) {
|
||||||
dial := 50
|
dial := 50
|
||||||
solution := 0
|
solution := 0
|
||||||
for pair := range day1GetPairs(r) {
|
for pair := range day1GetPairs(r) {
|
||||||
@ -44,7 +45,7 @@ func Day1Part2Slow(r io.Reader, l Logger) (any, error) {
|
|||||||
return solution, nil
|
return solution, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day1Part2Fast(r io.Reader, l Logger) (any, error) {
|
func Day1Part2Fast(r io.Reader, l *log.Logger) (any, error) {
|
||||||
dial := 50
|
dial := 50
|
||||||
solution := 0
|
solution := 0
|
||||||
for pair := range day1GetPairs(r) {
|
for pair := range day1GetPairs(r) {
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ func (s *day2Scanner) Bounds() (int, int) {
|
|||||||
return s.a, s.b
|
return s.a, s.b
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day2Part1Simple(r io.Reader, l Logger) (any, error) {
|
func Day2Part1Simple(r io.Reader, l *log.Logger) (any, error) {
|
||||||
input, err := aocutils.ReadString(r)
|
input, err := aocutils.ReadString(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to read input: %s", err)
|
return nil, fmt.Errorf("failed to read input: %s", err)
|
||||||
@ -94,7 +95,7 @@ func Day2Part1Simple(r io.Reader, l Logger) (any, error) {
|
|||||||
return sum, nil
|
return sum, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day2Part2Simple(r io.Reader, l Logger) (any, error) {
|
func Day2Part2Simple(r io.Reader, l *log.Logger) (any, error) {
|
||||||
input, err := aocutils.ReadString(r)
|
input, err := aocutils.ReadString(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to read input: %s", err)
|
return nil, fmt.Errorf("failed to read input: %s", err)
|
||||||
@ -154,7 +155,7 @@ func Day2Part2Simple(r io.Reader, l Logger) (any, error) {
|
|||||||
return sum, nil
|
return sum, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day2Part1(r io.Reader, logger Logger) (any, error) {
|
func Day2Part1(r io.Reader, logger *log.Logger) (any, error) {
|
||||||
inputScanner := bufio.NewScanner(r)
|
inputScanner := bufio.NewScanner(r)
|
||||||
inputScanner.Split(aocutils.SplitComma)
|
inputScanner.Split(aocutils.SplitComma)
|
||||||
scanner := &day2Scanner{scanner: inputScanner, sep: '-'}
|
scanner := &day2Scanner{scanner: inputScanner, sep: '-'}
|
||||||
@ -181,7 +182,7 @@ func Day2Part1(r io.Reader, logger Logger) (any, error) {
|
|||||||
return sum, scanner.Err()
|
return sum, scanner.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day2Part2(r io.Reader, logger Logger) (any, error) {
|
func Day2Part2(r io.Reader, logger *log.Logger) (any, error) {
|
||||||
inputScanner := bufio.NewScanner(r)
|
inputScanner := bufio.NewScanner(r)
|
||||||
inputScanner.Split(aocutils.SplitComma)
|
inputScanner.Split(aocutils.SplitComma)
|
||||||
|
|
||||||
|
|||||||
@ -4,16 +4,17 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Day3Part1(r io.Reader, l Logger) (any, error) {
|
func Day3Part1(r io.Reader, l *log.Logger) (any, error) {
|
||||||
return Day3(r, l, 2)
|
return Day3(r, l, 2)
|
||||||
}
|
}
|
||||||
func Day3Part2(r io.Reader, l Logger) (any, error) {
|
func Day3Part2(r io.Reader, l *log.Logger) (any, error) {
|
||||||
return Day3(r, l, 12)
|
return Day3(r, l, 12)
|
||||||
}
|
}
|
||||||
func Day3(r io.Reader, logger Logger, size int) (int64, error) {
|
func Day3(r io.Reader, logger *log.Logger, size int) (int64, error) {
|
||||||
scanner := bufio.NewScanner(r)
|
scanner := bufio.NewScanner(r)
|
||||||
scanner.Split(bufio.ScanLines)
|
scanner.Split(bufio.ScanLines)
|
||||||
var sum int64
|
var sum int64
|
||||||
|
|||||||
@ -1,78 +0,0 @@
|
|||||||
package year25
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
"git.bizdoc.ro/private/devkit.git/collections/geometry/v2"
|
|
||||||
)
|
|
||||||
|
|
||||||
const Day4PaperRoll = '@'
|
|
||||||
|
|
||||||
func Day4Part1(r io.Reader, l Logger) (any, error) {
|
|
||||||
// 4 rolls in 8 adjacent positions
|
|
||||||
|
|
||||||
var accessibleRolls int
|
|
||||||
g, err := geometry.ReaderToByteGrid(r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("day4: failed to read grid: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for c := range g.Points() {
|
|
||||||
if g.At(c) != Day4PaperRoll {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var count int
|
|
||||||
for p := range g.SubgridPointsIter(c.MoveUpLeft(), c.MoveDownRight()) {
|
|
||||||
if g.At(p) == Day4PaperRoll {
|
|
||||||
count += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if count <= 4 {
|
|
||||||
accessibleRolls += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return accessibleRolls, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Day4Part2(r io.Reader, l Logger) (any, error) {
|
|
||||||
// 4 rolls in 8 adjacent positions
|
|
||||||
|
|
||||||
var totalRemovedRolls int
|
|
||||||
g, err := geometry.ReaderToByteGrid(r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("day4: failed to read grid: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
|
||||||
removedRolls := 0
|
|
||||||
for c := range g.Points() {
|
|
||||||
if g.At(c) != Day4PaperRoll {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
var count int
|
|
||||||
for p := range g.SubgridPointsIter(c.MoveUpLeft(), c.MoveDownRight()) {
|
|
||||||
if g.At(p) == Day4PaperRoll {
|
|
||||||
count += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if count <= 4 {
|
|
||||||
removedRolls += 1
|
|
||||||
g.Set(c, '.') // remove grid
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if removedRolls == 0 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
totalRemovedRolls += removedRolls
|
|
||||||
}
|
|
||||||
|
|
||||||
return totalRemovedRolls, nil
|
|
||||||
}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
package year25
|
|
||||||
|
|
||||||
type Logger interface {
|
|
||||||
Printf(string, ...interface{})
|
|
||||||
Println(...interface{})
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user