Code for day1, 2 in golang
This commit is contained in:
87
go/2/main.go
Normal file
87
go/2/main.go
Normal file
@ -0,0 +1,87 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
f = "../../2.input.txt"
|
||||
|
||||
RPS = map[string] int {
|
||||
"X":1,
|
||||
"Y":2,
|
||||
"Z":3,
|
||||
"A":1,
|
||||
"B":2,
|
||||
"C":3,
|
||||
}
|
||||
outcome = map[string] int {
|
||||
"A X":3,
|
||||
"A Y":6,
|
||||
"A Z":0,
|
||||
"B X":0,
|
||||
"B Y":3,
|
||||
"B Z":6,
|
||||
"C X":6,
|
||||
"C Y":0,
|
||||
"C Z":3,
|
||||
}
|
||||
// A:Rock B:Paper C:Scissor
|
||||
// X:lose Y:draw Z:win
|
||||
rRPS = map[string] string {
|
||||
"A X":"C",
|
||||
"A Y":"A",
|
||||
"A Z":"B",
|
||||
"B X":"A",
|
||||
"B Y":"B",
|
||||
"B Z":"C",
|
||||
"C X":"B",
|
||||
"C Y":"C",
|
||||
"C Z":"A",
|
||||
}
|
||||
rOutcome = map[string] int {
|
||||
"X":0,
|
||||
"Y":3,
|
||||
"Z":6,
|
||||
}
|
||||
)
|
||||
|
||||
func must(e error) {
|
||||
if e != nil {
|
||||
panic(e)
|
||||
}
|
||||
}
|
||||
|
||||
func Score(line string) int {
|
||||
sp := strings.Split(line, " ")
|
||||
return RPS[sp[1]] + outcome[line]
|
||||
}
|
||||
|
||||
func RealScore(line string) int {
|
||||
sp := strings.Split(line, " ")
|
||||
throw := rRPS[line]
|
||||
return RPS[throw] + rOutcome[sp[1]]
|
||||
}
|
||||
|
||||
func main() {
|
||||
fp, err:= filepath.Abs(f)
|
||||
must(err)
|
||||
rf, err := os.Open(fp)
|
||||
must(err)
|
||||
s := bufio.NewScanner(rf)
|
||||
s.Split(bufio.ScanLines)
|
||||
|
||||
totScore := 0
|
||||
totRealScore := 0
|
||||
for s.Scan() {
|
||||
l := s.Text()
|
||||
totScore = Score(l) + totScore
|
||||
totRealScore = RealScore(l) + totRealScore
|
||||
}
|
||||
|
||||
println("part 1 score:", totScore)
|
||||
println("part 2 score:", totRealScore)
|
||||
}
|
Reference in New Issue
Block a user