diff --git a/challenges/2021/01-sonarSweep/benchmark.txt b/challenges/2021/01-sonarSweep/benchmark.txt new file mode 100644 index 0000000..8409240 --- /dev/null +++ b/challenges/2021/01-sonarSweep/benchmark.txt @@ -0,0 +1,23 @@ +Day 1 (Sonar Sweep) benchmark + +Dir: challenges/2021/01-sonarSweep +Runs per part: 200 +-------------------------------------------------------------------------------- +Golang + +benchmark.part.1.avg: 0.000094 seconds +benchmark.part.1.min: 0.000047 seconds +benchmark.part.1.max: 0.000818 seconds +benchmark.part.2.avg: 0.000112 seconds +benchmark.part.2.min: 0.000057 seconds +benchmark.part.2.max: 0.000535 seconds +-------------------------------------------------------------------------------- +Python + +benchmark.part.1.avg: 0.001437 seconds +benchmark.part.1.min: 0.000452 seconds +benchmark.part.1.max: 0.012373 seconds +benchmark.part.2.avg: 0.002187 seconds +benchmark.part.2.min: 0.000762 seconds +benchmark.part.2.max: 0.005535 seconds +-------------------------------------------------------------------------------- diff --git a/challenges/2021/01-sonarSweep/go/challenge.go b/challenges/2021/01-sonarSweep/go/challenge.go new file mode 100644 index 0000000..2698e1b --- /dev/null +++ b/challenges/2021/01-sonarSweep/go/challenge.go @@ -0,0 +1,62 @@ +package challenge + +import ( + "strconv" + "strings" + + "github.com/codemicro/adventOfCode/lib/aocgo" +) + +func parse(instr string) ([]int, error) { + var o []int + for _, line := range strings.Split(instr, "\n") { + if line == "" { + continue + } + t := strings.TrimSpace(line) + n, err := strconv.Atoi(t) + if err != nil { + return nil, err + } + o = append(o, n) + } + return o, nil +} + +func countIncreases(data []int) int { + var c int + for i := 1; i < len(data); i += 1 { + if data[i] > data[i-1] { + c += 1 + } + } + return c +} + +type Challenge struct { + aocgo.BaseChallenge +} + +func (c Challenge) One(instr string) (interface{}, error) { + data, err := parse(instr) + if err != nil { + return nil, err + } + return countIncreases(data), nil +} + +func (c Challenge) Two(instr string) (interface{}, error) { + data, err := parse(instr) + if err != nil { + return nil, err + } + + var sums []int + { + for i := 0; i < len(data)-2; i += 1 { + sums = append(sums, data[i]+data[i+1]+data[i+2]) + } + } + + return countIncreases(sums), nil +}