1package main23import "log"45// Assorted utility functions.67func StringToLine(line string) int {8 switch line {9 case "Red":10 return Red11 case "Orange":12 return Orange13 case "Green-B":14 return GreenB15 case "Green-C":16 return GreenC17 case "Green-D":18 return GreenD19 case "Green-E":20 return GreenE21 default:22 return LineUnknown23 }24}2526func LineToString(line int) string {27 switch line {28 case Red:29 return "Red"30 case Orange:31 return "Orange"32 case GreenB:33 return "Green-B"34 case GreenC:35 return "Green-C"36 case GreenD:37 return "Green-D"38 case GreenE:39 return "Green-E"40 default:41 return "UNKNOWN"42 }43}4445func IntToDirection(dir, line int) int {46 switch line {47 case GreenB, GreenC, GreenD, GreenE:48 switch dir {49 case 0:50 return East51 case 1:52 return West53 default:54 log.Printf("Unknown direction %d for %s line", dir, LineToString(line))55 return DirectionUnknown56 }57 case Red, Orange:58 switch dir {59 case 0:60 return North61 case 1:62 return South63 default:64 log.Printf("Unknown direction %d for %s line", dir, LineToString(line))65 return DirectionUnknown66 }67 default:68 log.Printf("Unknown direction %d for unknown line", dir)69 return DirectionUnknown70 }71}7273func DirectionToString(dir int) string {74 switch dir {75 case North:76 return "north"77 case South:78 return "south"79 case East:80 return "east"81 case West:82 return "west"83 case DirectionUnknown:84 return "unknown"85 default:86 panic("unknown direction in DirectionToString")87 }88}8990func FilterNewTrains(trains []Train) []Train {91 newTrains := make([]Train, 0)92 for _, train := range trains {93 if train.IsNew() {94 newTrains = append(newTrains, train)95 }96 }9798 return newTrains99}