Commits

Miki Tebeka committed 962df22

simpler

Comments (0)

Files changed (1)

go/src/euler/euler.go

 	"strconv"
 )
 
-type Solution struct {
-	name string
-	fn   func()
+var solutions = map[string]func(){}
+
+func register(name string, fn func()) {
+	solutions[name] = fn
 }
 
-type Solutions []*Solution
-func (s Solutions) Len() int { return len(s) }
-func (s Solutions) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s Solutions) Less(i, j int) bool {
-	ielem, _ := strconv.Atoi(s[i].name)
-	jelem, _ := strconv.Atoi(s[j].name)
-	return ielem < jelem
-}
-
-
-var solutions = Solutions{}
-
-func register(name string, fn func()) {
-	solutions = append(solutions, &Solution{name, fn})
-	sort.Sort(&solutions)
-}
-
-func run(name string) error {
-	for _, sol := range solutions {
-		if sol.name == name {
-			sol.fn()
-			return nil
-		}
-	}
-
-	return fmt.Errorf("%s not found", name)
+type Strings []string
+func (s Strings) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
+func (s Strings) Len() int { return len(s) }
+func (s Strings) Less(i, j int) bool {
+	ival, _ := strconv.Atoi(s[i])
+	jval, _ := strconv.Atoi(s[j])
+	return ival < jval
 }
 
 
 	flag.Parse()
 
 	if *list {
-		for _, sol := range solutions {
-			fmt.Println(sol.name)
+		var keys = Strings{}
+		for key := range solutions {
+			keys = append(keys, key)
+		}
+		sort.Sort(keys)
+		for _, name := range keys {
+			fmt.Println(name)
 		}
 	}
 
 	for _, name := range flag.Args() {
-		err := run(name)
-		if err != nil {
-			fmt.Fprintf(os.Stderr, "error: %s\n", err)
+		if fn, ok := solutions[name]; !ok {
+			fmt.Fprintf(os.Stderr, "error: %s not found\n", name)
 			os.Exit(1)
+		} else {
+			fn()
 		}
 	}
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.