@@ -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