Add 2020-03
Signed-off-by: AKU <tom@tdpain.net>
This commit is contained in:
parent
c8fd7ad9ba
commit
1ad039bb13
5 changed files with 136 additions and 0 deletions
2
challenges/2020/03-tobogganTrajectory/README.md
Normal file
2
challenges/2020/03-tobogganTrajectory/README.md
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# [Day 3: Toboggan Trajactory](https://adventofcode.com/2021/day/3)
|
||||||
|
|
23
challenges/2020/03-tobogganTrajectory/benchmark.txt
Normal file
23
challenges/2020/03-tobogganTrajectory/benchmark.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
Day 3 (Toboggan Trajectory) benchmark
|
||||||
|
|
||||||
|
Dir: challenges/2020/03-tobogganTrajectory
|
||||||
|
Runs per part: 50
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Golang
|
||||||
|
|
||||||
|
benchmark.part.1.avg: 0.000101 seconds
|
||||||
|
benchmark.part.1.min: 0.000039 seconds
|
||||||
|
benchmark.part.1.max: 0.000569 seconds
|
||||||
|
benchmark.part.2.avg: 0.000089 seconds
|
||||||
|
benchmark.part.2.min: 0.000047 seconds
|
||||||
|
benchmark.part.2.max: 0.000229 seconds
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
Python
|
||||||
|
|
||||||
|
benchmark.part.1.avg: 0.000542 seconds
|
||||||
|
benchmark.part.1.min: 0.000341 seconds
|
||||||
|
benchmark.part.1.max: 0.001299 seconds
|
||||||
|
benchmark.part.2.avg: 0.000756 seconds
|
||||||
|
benchmark.part.2.min: 0.000504 seconds
|
||||||
|
benchmark.part.2.max: 0.001462 seconds
|
||||||
|
--------------------------------------------------------------------------------
|
66
challenges/2020/03-tobogganTrajectory/go/challenge.go
Normal file
66
challenges/2020/03-tobogganTrajectory/go/challenge.go
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
package challenge
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/codemicro/adventOfCode/lib/aocgo"
|
||||||
|
)
|
||||||
|
|
||||||
|
func parse(instr string) [][]rune {
|
||||||
|
inputSlice := strings.Split(strings.TrimSpace(instr), "\n")
|
||||||
|
|
||||||
|
var forest [][]rune
|
||||||
|
for _, line := range inputSlice {
|
||||||
|
forest = append(forest, []rune(line))
|
||||||
|
}
|
||||||
|
return forest
|
||||||
|
}
|
||||||
|
|
||||||
|
var tree_char = []rune("#")[0] // No idea why I can't just do rune("#")
|
||||||
|
|
||||||
|
func findCollisions(forest [][]rune, xOffset, yOffset int) int {
|
||||||
|
var encounteredTrees int
|
||||||
|
var xPointer int
|
||||||
|
var yPointer int
|
||||||
|
|
||||||
|
for yPointer < len(forest) {
|
||||||
|
row := forest[yPointer]
|
||||||
|
targetIndex := xPointer % len(row)
|
||||||
|
if row[targetIndex] == tree_char {
|
||||||
|
encounteredTrees += 1
|
||||||
|
}
|
||||||
|
xPointer += xOffset
|
||||||
|
yPointer += yOffset
|
||||||
|
}
|
||||||
|
|
||||||
|
return encounteredTrees
|
||||||
|
}
|
||||||
|
|
||||||
|
type Challenge struct {
|
||||||
|
aocgo.BaseChallenge
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c Challenge) One(instr string) (interface{}, error) {
|
||||||
|
return findCollisions(parse(instr), 3, 1), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c Challenge) Two(instr string) (interface{}, error) {
|
||||||
|
forest := parse(instr)
|
||||||
|
|
||||||
|
offsetPairs := [][]int{
|
||||||
|
{3, 1},
|
||||||
|
{1, 1},
|
||||||
|
{5, 1},
|
||||||
|
{7, 1},
|
||||||
|
{1, 2},
|
||||||
|
}
|
||||||
|
|
||||||
|
treeProduct := 1
|
||||||
|
|
||||||
|
for _, pair := range offsetPairs {
|
||||||
|
encounteredTrees := findCollisions(forest, pair[0], pair[1])
|
||||||
|
treeProduct *= encounteredTrees
|
||||||
|
}
|
||||||
|
|
||||||
|
return treeProduct, nil
|
||||||
|
}
|
4
challenges/2020/03-tobogganTrajectory/info.json
Normal file
4
challenges/2020/03-tobogganTrajectory/info.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"inputFile": "input.txt",
|
||||||
|
"testCases": {}
|
||||||
|
}
|
41
challenges/2020/03-tobogganTrajectory/py/__init__.py
Normal file
41
challenges/2020/03-tobogganTrajectory/py/__init__.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
from typing import List
|
||||||
|
from aocpy import BaseChallenge
|
||||||
|
|
||||||
|
tree_char = "#"
|
||||||
|
|
||||||
|
|
||||||
|
def parse(instr: str) -> List:
|
||||||
|
return [[char for char in line] for line in instr.strip().split("\n")]
|
||||||
|
|
||||||
|
|
||||||
|
def find_collisions(forest: list, x_offset: int, y_offset: int) -> int:
|
||||||
|
encountered_trees = 0
|
||||||
|
x_pointer = 0
|
||||||
|
|
||||||
|
for row in forest[::y_offset]:
|
||||||
|
target_index = x_pointer % len(row)
|
||||||
|
if row[target_index] == tree_char:
|
||||||
|
encountered_trees += 1
|
||||||
|
x_pointer += x_offset
|
||||||
|
|
||||||
|
return encountered_trees
|
||||||
|
|
||||||
|
class Challenge(BaseChallenge):
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def one(instr: str) -> int:
|
||||||
|
return find_collisions(parse(instr), 3, 1)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def two(instr: str) -> int:
|
||||||
|
forest = parse(instr)
|
||||||
|
|
||||||
|
tree_product = 1
|
||||||
|
|
||||||
|
offset_pairs = [(3, 1), (1, 1), (5, 1), (7, 1), (1, 2)]
|
||||||
|
|
||||||
|
for i, pair in enumerate(offset_pairs):
|
||||||
|
encountered_trees = find_collisions(forest, *pair)
|
||||||
|
tree_product *= encountered_trees
|
||||||
|
|
||||||
|
return tree_product
|
Loading…
Add table
Add a link
Reference in a new issue