|
@@ -42,6 +42,7 @@ func readFile(file *os.File) ([]sequence, error) {
|
|
|
|
|
|
var directions []string
|
|
var directions []string
|
|
var directionsMap map[string]int
|
|
var directionsMap map[string]int
|
|
|
|
+var opposites map[string]string
|
|
|
|
|
|
func getDirections() {
|
|
func getDirections() {
|
|
directions = []string{"E", "S", "W", "N"}
|
|
directions = []string{"E", "S", "W", "N"}
|
|
@@ -50,6 +51,12 @@ func getDirections() {
|
|
for index, value := range directions {
|
|
for index, value := range directions {
|
|
directionsMap[value] = index
|
|
directionsMap[value] = index
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ opposites = make(map[string]string)
|
|
|
|
+ opposites["E"] = "W"
|
|
|
|
+ opposites["W"] = "E"
|
|
|
|
+ opposites["N"] = "S"
|
|
|
|
+ opposites["S"] = "N"
|
|
}
|
|
}
|
|
|
|
|
|
func rotate(currentDirection string, item sequence) string {
|
|
func rotate(currentDirection string, item sequence) string {
|
|
@@ -81,47 +88,15 @@ func rotate(currentDirection string, item sequence) string {
|
|
type cooridinates map[string]int
|
|
type cooridinates map[string]int
|
|
|
|
|
|
func makeMove(item sequence, position cooridinates) cooridinates {
|
|
func makeMove(item sequence, position cooridinates) cooridinates {
|
|
- switch item.action {
|
|
|
|
- case "E":
|
|
|
|
- if position["W"] > 0 {
|
|
|
|
- position["W"] = position["W"] - item.value
|
|
|
|
- if position["W"] < 0 {
|
|
|
|
- position["E"] -= position["W"]
|
|
|
|
- position["W"] = 0
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- position["E"] += item.value
|
|
|
|
- }
|
|
|
|
- case "W":
|
|
|
|
- if position["E"] > 0 {
|
|
|
|
- position["E"] = position["E"] - item.value
|
|
|
|
- if position["E"] < 0 {
|
|
|
|
- position["W"] -= position["E"]
|
|
|
|
- position["E"] = 0
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- position["W"] += item.value
|
|
|
|
- }
|
|
|
|
- case "N":
|
|
|
|
- if position["S"] > 0 {
|
|
|
|
- position["S"] = position["S"] - item.value
|
|
|
|
- if position["S"] < 0 {
|
|
|
|
- position["N"] -= position["S"]
|
|
|
|
- position["S"] = 0
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- position["N"] += item.value
|
|
|
|
- }
|
|
|
|
- case "S":
|
|
|
|
- if position["N"] > 0 {
|
|
|
|
- position["N"] = position["N"] - item.value
|
|
|
|
- if position["N"] < 0 {
|
|
|
|
- position["S"] -= position["N"]
|
|
|
|
- position["N"] = 0
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- position["S"] += item.value
|
|
|
|
|
|
+ opposite := opposites[item.action]
|
|
|
|
+ if position[opposite] > 0 {
|
|
|
|
+ position[opposite] = position[opposite] - item.value
|
|
|
|
+ if position[opposite] < 0 {
|
|
|
|
+ position[item.action] -= position[opposite]
|
|
|
|
+ position[opposite] = 0
|
|
}
|
|
}
|
|
|
|
+ } else {
|
|
|
|
+ position[item.action] += item.value
|
|
}
|
|
}
|
|
|
|
|
|
return position
|
|
return position
|