package main
import (
"bufio"
"fmt"
"os"
"github.com/perlw/advent_of_code/toolkit/grid"
)
func testSlope(input *grid.Grid, sx, sy int) int {
var count int
var x int
for y := 0; y < input.Height; y += sy {
if input.Get(x, y).R == '#' {
count++
}
x = (x + sx) % input.Width
}
return count
}
// Task1 ...
func Task1(input *grid.Grid) int {
return testSlope(input, 3, 1)
}
// Task2 ...
func Task2(input *grid.Grid) int {
slopes := [][]int{
{1, 1},
{3, 1},
{5, 1},
{7, 1},
{1, 2},
}
result := 1
for _, slope := range slopes {
result *= testSlope(input, slope[0], slope[1])
}
return result
}
func main() {
var input []rune
var width, height int
file, _ := os.Open("input.txt")
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
input = append(input, []rune(line)...)
if width == 0 {
width = len(line)
}
height++
}
file.Close()
var g grid.Grid
g.FromRunes(input)
g.Width = width
g.Height = height
g.Label = "Map"
result := Task1(g.Clone())
fmt.Printf("Task 1: %d\n", result)
result = Task2(g.Clone())
fmt.Printf("Task 1: %d\n", result)
}