diff options
Diffstat (limited to 'lib/Octans/CLI.rakumod')
-rw-r--r-- | lib/Octans/CLI.rakumod | 50 |
1 files changed, 15 insertions, 35 deletions
diff --git a/lib/Octans/CLI.rakumod b/lib/Octans/CLI.rakumod index 744fba8..48477ef 100644 --- a/lib/Octans/CLI.rakumod +++ b/lib/Octans/CLI.rakumod @@ -1,5 +1,6 @@ use Octans::Puzzle; use Octans::WordSearch; +use Octans::Puzzle::Get; proto MAIN (|) is export { unless so @*ARGS { say $*USAGE; exit }; {*} } @@ -14,21 +15,9 @@ multi sub MAIN ( # chars by default. my Str @dict = $dict.IO.lines.grep(*.chars >= $length); - # @puzzle holds the puzzle. - # - # @gray-squares holds the list of indexes of valid starting - # positions in the puzzle. - my (@puzzle, @gray-squares); - - # Get the puzzle from $path. - if $path.IO.f { - @puzzle = $path.IO.lines.map(*.words.cache.Array); - } else { - @puzzle = get-puzzle($path); - } - - # set-gray-squares also removes asterisks from @puzzle. - @gray-squares = set-gray-squares(@puzzle); # ($y, $x) + my $puzzle = $path.IO.f + ?? Puzzle.new(grids => $path.IO.lines.map(*.words.Array)) + !! get-puzzle($path); if so $verbose { # Don't print path if using the dictionary included with the @@ -37,50 +26,40 @@ multi sub MAIN ( say "Dictionary: " ~ $dict.Str; } - say "Gray squares: ", @gray-squares; + say "Gray squares: ", $puzzle.gray-squares; say "Puzzle"; - " $_".say for @puzzle; + " $_".say for $puzzle.grids; } - # After the solution is found, the path is printed with these - # fancy chars. - my %𝒻𝒶𝓃𝒸𝓎-𝒸𝒽𝒶𝓇𝓈 = - :a<a̶>, :b<b̶>, :c<c̶>, :d<d̶>, :e<e̶>, :f<f̶>, :g<g̶>, :h<h̶>, :i<i̶>, - :j<j̶>, :k<k̶>, :l<l̶>, :m<m̶>, :n<n̶>, :o<o̶>, :p<p̶>, :q<q̶>, :r<r̶>, - :s<s̶>, :t<t̶>, :u<u̶>, :v<v̶>, :w<w̶>, :x<x̶>, :y<y̶>, :z<z̶>; - # start-pos block loops over each starting position. - start-pos: for @gray-squares -> $pos { + start-pos: for $puzzle.gray-squares -> $pos { my DateTime $initial = DateTime.now; # gather all the words that word-search finds starting from # $pos. word: for gather word-search( - @dict, @puzzle, $pos[0], $pos[1], + @dict, $puzzle.grids, $pos[0], $pos[1], ) -> ( # word-search returns the word along with @visited which # holds the list of all grids that were visited when the # word was found. $word, @visited ) { - # If not $verbose then print the word. + # If not $verbose then just print the word. unless so $verbose { say $word; next word; } # Print the word, along with the time taken. - say "\n" ~ $word ~ " [" ~ DateTime.now - $initial ~ "𝑠]"; + printf "\n%s \[%.8f𝑠\]\n", $word, DateTime.now - $initial; # Print the puzzle, highlighting the path. - for ^@puzzle.elems -> $y { + for ^$puzzle.grids.elems -> $y { print " " x 3; - for ^@puzzle[$y].elems -> $x { - print " " ~ ( - @visited[$y][$x] - ?? (%𝒻𝒶𝓃𝒸𝓎-𝒸𝒽𝒶𝓇𝓈{@puzzle[$y][$x]} // @puzzle[$y][$x]) - !! @puzzle[$y][$x] - ); + for ^$puzzle.grids[$y].elems -> $x { + printf " {$puzzle.grids[$y][$x]}%s", + @visited[$y][$x] ?? "/" !! " "; } print "\n"; } @@ -88,6 +67,7 @@ multi sub MAIN ( } } + multi sub MAIN ( Bool :$version #= print version ) { say "Octans v" ~ $?DISTRIBUTION.meta<version>; } |