Playing with test framework
This commit is contained in:
parent
302e593f0f
commit
d5909ca148
2 changed files with 67 additions and 32 deletions
69
11/11.go
69
11/11.go
|
@ -13,46 +13,51 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
scanner := bufio.NewScanner(os.Stdin)
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
|
||||||
for scanner.Scan() {
|
for scanner.Scan() {
|
||||||
s := strings.Split(scanner.Text(), ",")
|
s := strings.Split(scanner.Text(), ",")
|
||||||
|
fmt.Println(CalcDistance(s))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
x := 0
|
func CalcDistance(s []string) []int {
|
||||||
ne := 0
|
|
||||||
max := 0
|
x := 0
|
||||||
|
ne := 0
|
||||||
// I had a crack at this with an approximation of a cube based coordinate system
|
max := 0
|
||||||
// but the maths is hard and I suck. In the end I sought inspiration from
|
|
||||||
// https://www.redblobgames.com/grids/hexagons/ - and am now using axial coordinates
|
|
||||||
for dir := range s {
|
|
||||||
switch s[dir] {
|
|
||||||
case "n":
|
|
||||||
ne++
|
|
||||||
case "s":
|
|
||||||
ne--
|
|
||||||
case "se":
|
|
||||||
x++
|
|
||||||
case "sw":
|
|
||||||
x--
|
|
||||||
ne--
|
|
||||||
case "ne":
|
|
||||||
x++
|
|
||||||
ne++
|
|
||||||
case "nw":
|
|
||||||
x--
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inefficient, but I'm running out of lunchtime.
|
|
||||||
cd := getDistance(x, ne)
|
|
||||||
if cd > max {
|
|
||||||
max = cd
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// I had a crack at this with an approximation of a cube based coordinate system
|
||||||
|
// but the maths is hard and I suck. In the end I sought inspiration from
|
||||||
|
// https://www.redblobgames.com/grids/hexagons/ - and am now using axial coordinates
|
||||||
|
for dir := range s {
|
||||||
|
switch s[dir] {
|
||||||
|
case "n":
|
||||||
|
ne++
|
||||||
|
case "s":
|
||||||
|
ne--
|
||||||
|
case "se":
|
||||||
|
x++
|
||||||
|
case "sw":
|
||||||
|
x--
|
||||||
|
ne--
|
||||||
|
case "ne":
|
||||||
|
x++
|
||||||
|
ne++
|
||||||
|
case "nw":
|
||||||
|
x--
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(getDistance(x, ne), max)
|
// Inefficient, but I'm running out of lunchtime.
|
||||||
|
cd := getDistance(x, ne)
|
||||||
|
if cd > max {
|
||||||
|
max = cd
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cd := getDistance(x, ne)
|
||||||
|
|
||||||
|
return []int{cd, max}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getDistance(x int, ne int) int {
|
func getDistance(x int, ne int) int {
|
||||||
|
|
30
11/11_test.go
Normal file
30
11/11_test.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type testpair struct {
|
||||||
|
values []string
|
||||||
|
result int
|
||||||
|
}
|
||||||
|
|
||||||
|
var tests = []testpair{
|
||||||
|
{[]string{"ne","ne","ne"}, 3},
|
||||||
|
{[]string{"ne","ne","sw","sw"}, 0},
|
||||||
|
{[]string{"ne","ne","s","s"}, 2},
|
||||||
|
{[]string{"se","sw","se","sw","sw"}, 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCalcDistance(t *testing.T) {
|
||||||
|
for _, pair := range tests {
|
||||||
|
v := CalcDistance(pair.values)
|
||||||
|
if v[0] != pair.result {
|
||||||
|
t.Error(
|
||||||
|
"For", pair.values,
|
||||||
|
"expected", pair.result,
|
||||||
|
"got", v[0],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue