@@ -4,75 +4,61 @@ import (
44 "fmt"
55 "os"
66 "text/tabwriter"
7- "time"
87
98 internal "github.com/igorwulff/aoc/internal"
109)
1110
12- type BenchmarkResult struct {
13- TotalTimeInMs int64
14- }
15-
16- func Run () ([]BenchmarkResult , error ) {
11+ func Run () {
1712 args := internal .ProcessArgs ()
18- var plugins []internal.PluginProcessor
19- // Benchmarking mode
20- if args .Day == "0" {
21- allPlugins , err := internal .GetAllPluginProcessors (args )
22- if err != nil {
23- fmt .Println (err )
24- return nil , err
25- }
26- plugins = append (plugins , allPlugins ... )
27- } else {
28- plugins = append (plugins , internal.PluginProcessor {Args : args })
13+ plugins , err := internal .GetProcessors (args )
14+ if err != nil {
15+ fmt .Println (err )
16+ return
2917 }
3018
31- results := make ([]BenchmarkResult , len (plugins ))
32- for i , plugin := range plugins {
33- input , err := plugin .GetInput ()
19+ for _ , p := range plugins {
20+ input , err := p .GetInput ()
3421 if err != nil {
35- fmt .Printf ("Could not find input.txt for Day %s Part %s\n " , plugin .Args .Day , plugin .Args .Part )
36- return nil , err
22+ fmt .Printf ("Could not find input.txt for Day %s Part %s\n " , p .Args .Day , p .Args .Part )
23+ return
3724 }
3825
39- fmt .Printf ("Building day %s part %s... " , plugin .Args .Day , plugin .Args .Part )
40- if err := plugin . Build (); err != nil {
41- fmt . Print ( "ERROR! \n " )
42- fmt .Println ( err )
43- return nil , err
26+ fmt .Printf ("Running day %s, part %s" , p .Args .Day , p .Args .Part )
27+
28+ if err := p . Build (); err != nil {
29+ fmt .Print ( "ERROR! \n " , err )
30+ return
4431 }
45- fmt .Print ("OK!\n " )
4632
47- fmt .Print ("Executing tests... " )
48- if err := plugin .RunTests (); err != nil {
49- fmt .Print ("ERROR!\n " )
50- fmt .Println (err )
51- return nil , err
33+ if err := p .RunTests (); err != nil {
34+ fmt .Print ("ERROR!\n " , err )
35+ return
5236 }
5337
54- fmt .Print ("Executing main function... " )
55- timeBeforeExec := time .Now ().UnixMilli ()
56- output , err := plugin .CallFunc (input )
38+ fmt .Println ("Trying to solve puzzle..." )
39+
40+ p .Benchmark .StartTimer ()
41+ output , err := p .CallFunc (input )
5742 if err != nil {
58- fmt .Print ("ERROR!\n " )
59- fmt .Println (err )
60- return nil , err
43+ fmt .Print ("ERROR!\n " , err )
44+ return
6145 }
62- timeAfterExec := time .Now ().UnixMilli ()
63- results [i ] = BenchmarkResult {TotalTimeInMs : timeAfterExec - timeBeforeExec }
46+ p .Benchmark .StopTimer ()
6447
65- fmt .Printf ("Solution: %s\n " , output )
48+ fmt .Printf ("Solution: %s\n \n " , output )
6649 }
6750
68- fmt .Println ("Execution finished! Total time: " )
51+ fmt .Println ("Execution finished!" )
6952 w := tabwriter .NewWriter (os .Stdout , 0 , 4 , 4 , ' ' , 0 )
70- fmt .Fprintln (w , "Day\t Part\t Time (ms)" )
71- for i , plugin := range plugins {
53+ fmt .Fprintln (w , "\n Day\t Part\t Time (ms)" )
54+
55+ var sum int64 = 0
56+ for _ , p := range plugins {
57+ sum += p .Benchmark .GetTotalTimeInMs ()
7258 // @TODO: would be nice to join day & parts in a single row, but for now it's already nice they're alphabetically sorted
73- fmt .Fprintf (w , "%s\t %s\t %d\n " , plugin .Args .Day , plugin .Args .Part , results [ i ]. TotalTimeInMs )
59+ fmt .Fprintf (w , "%s\t %s\t %d\n " , p .Args .Day , p .Args .Part , p . Benchmark . GetTotalTimeInMs () )
7460 }
7561 w .Flush ()
7662
77- return results , nil
63+ fmt . Printf ( " \n Total time: %d ms \n " , sum )
7864}
0 commit comments