// In this example, traversing the map using this slope would cause you to encounter 7 trees.
// Starting at the top-left corner of your map and following a slope of right 3 and down 1, how many trees would you encounter?
funcpartOne(){
f,_:=os.Open("input")
reader:=bufio.NewReader(f)
scanner:=bufio.NewScanner(reader)
depth:=0
s:=slope{
rise:1,
run:3,
trees:0,
position:0,
}
forscanner.Scan(){
e:=terrain{
row:strings.Split(scanner.Text(),""),
}
ifdepth%s.rise==0&&e.isTree(s.position){
s.trees=s.trees+1
}
s.position=s.position+s.run
depth=depth+s.rise
}
fmt.Println(s.trees)
}
// Determine the number of trees you would encounter if, for each of the following slopes, you start at the top-left corner and traverse the map all the way to the bottom:
// Right 1, down 1.
// Right 3, down 1. (This is the slope you already checked.)
// Right 5, down 1.
// Right 7, down 1.
// Right 1, down 2.
// In the above example, these slopes would find 2, 7, 3, 4, and 2 tree(s) respectively; multiplied together, these produce the answer 336.
funcpartTwo(){
f,_:=os.Open("input")
reader:=bufio.NewReader(f)
scanner:=bufio.NewScanner(reader)
slopes:=[]*slope{
{
rise:1,
run:1,
trees:0,
position:0,
},
{
rise:1,
run:3,
trees:0,
position:0,
},
{
rise:1,
run:5,
trees:0,
position:0,
},
{
rise:1,
run:7,
trees:0,
position:0,
},
{
rise:2,
run:1,
trees:0,
position:0,
},
}
depth:=0
forscanner.Scan(){
e:=terrain{
row:strings.Split(scanner.Text(),""),
}
for_,s:=rangeslopes{
ifdepth%s.rise==0{
// check tree
ife.isTree(s.position){
s.trees=s.trees+1
}
// only increment position if we're "on" for this row; handles the rise > run case