diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Octans/CLI.rakumod | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/lib/Octans/CLI.rakumod b/lib/Octans/CLI.rakumod index 4522571..1c1f0cc 100644 --- a/lib/Octans/CLI.rakumod +++ b/lib/Octans/CLI.rakumod @@ -1,28 +1,15 @@ use Octans::Puzzle; use Octans::WordSearch; -# If no arguments are passed then run USAGE & exit. proto MAIN (|) is export {unless so @*ARGS {USAGE(); exit;}; {*}} -multi sub MAIN (Bool :$version) is hidden-from-USAGE { - say "Octans v" ~ $?DISTRIBUTION.meta<version>; -} - multi sub MAIN ( - Str $path?, #= path to the crossword (file or url) + Str $path, #= path to the crossword (file or url) Str :$dict = (%?RESOURCES<mwords/354984si.ngl> // "/usr/share/dict/words").Str, #= dictionary file Int :$length = 7, #= minimum word length (default: 7) - Bool :s($sample), #= run the sample puzzle Bool :v($verbose), #= increase verbosity - Bool :$version, #= print version ) { - # Print usage & exit if both sample & path are not passed. - unless ($sample or $path) { - USAGE(); - exit; - } - # @dict holds the sorted dictionary. Only consider words >= 7 # chars by default. my Str @dict = $dict.IO.lines.grep(*.chars >= $length); @@ -33,23 +20,11 @@ multi sub MAIN ( # positions in the puzzle. my (@puzzle, @gray-squares); - # Set the sample puzzle if requested. - if $sample { - @puzzle = [ - [<n a t k>], - [<i m e c>], - [<a* r d e>], - [<t* e c h>], - ]; - } - - # Get the puzzle from $path if it's passed. - with $path { - if $path.IO.f { - @puzzle = $path.IO.lines.map(*.words.cache.Array); - } else { - @puzzle = get-puzzle($path); - } + # 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. @@ -69,8 +44,8 @@ multi sub MAIN ( # 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̶>; + 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 { @@ -87,9 +62,9 @@ multi sub MAIN ( $word, @visited ) { # Print the word, along with the time taken (if $verbose). - say ($verbose ?? - "\n" ~ $word ~ " [" ~ DateTime.now - $initial ~ "𝑠]" !! - $word); + say ($verbose + ?? "\n" ~ $word ~ " [" ~ DateTime.now - $initial ~ "𝑠]" + !! $word); # Print the puzzle, highlighting the path. if $verbose { @@ -119,3 +94,11 @@ sub USAGE { a* r d e t* e c h"; } + +multi sub MAIN ( + Bool :$version #= print version +) { say "Octans v" ~ $?DISTRIBUTION.meta<version>; } + +multi sub MAIN ( + Bool :$help #= print help +) { USAGE(); exit; } |