-
Notifications
You must be signed in to change notification settings - Fork 0
/
race.go
56 lines (45 loc) · 930 Bytes
/
race.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package main
type runner interface {
name() string
run(distance int) (seconds int)
}
type tortoise struct {
pace int
}
type hare struct {
nap int
}
func (t tortoise) name() string {
return "trevor"
}
func (t tortoise) run(distance int) (seconds int) {
return distance * t.pace
}
func (h hare) name() string {
return "harry"
}
func (h hare) run(distance int) (seconds int) {
if distance <= 3 {
return distance * 1
}
return distance*1 + h.nap
}
func race(distance int, runners ...runner) string {
var fastestName string
fastestTime := 100000
for _, runner := range runners {
time := runner.run(distance)
// println(runner.name(), "ran", time)
if time < fastestTime {
fastestTime = time
fastestName = runner.name()
}
}
return fastestName
}
// func main() {
// distance := 50
// t := tortoise{pace: 2}
// h := hare{nap: 15}
// println("winner is", race(distance, []runner{t, h}...))
// }