let input = loadData(day: 3).lines() /// - returns true if a tree is at that position, false if it is empty func get(x: Int, y: Int) -> Bool { let line = input[y] let index = line.index(line.startIndex, offsetBy: x % line.count) return line[index] == "#" } func calculate(dx: Int, dy: Int) -> Int { var x = 0 var y = 0 var trees = 0 while y < input.count { if get(x: x, y: y) { trees += 1 } x += dx y += dy } return trees } let trees = calculate(dx: 3, dy: 1) print("trees", trees) print("combined", calculate(dx: 1, dy: 1) * calculate(dx: 3, dy: 1) * calculate(dx: 5, dy: 1) * calculate(dx: 7, dy: 1) * calculate(dx: 1, dy: 2))