about summary refs log tree commit diff stats
path: root/lib/Octans
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Octans')
-rw-r--r--lib/Octans/CLI.rakumod55
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; }