Miki Tebeka avatar Miki Tebeka committed 412137d

Running

Comments (0)

Files changed (1)

go/src/euler/euler.go

 import (
 	"flag"
 	"fmt"
+	"os"
+	"sort"
+	"strconv"
 )
 
 type Solution struct {
 	fn   func()
 }
 
-var solutions = []Solution{}
+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})
+	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)
 }
 
 
 		}
 	}
 
+	for _, name := range flag.Args() {
+		err := run(name)
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "error: %s\n", err)
+			os.Exit(1)
+		}
+	}
 }
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.