aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Octans/CLI.rakumod
diff options
context:
space:
mode:
authorAndinus <andinus@nand.sh>2021-03-03 23:13:35 +0530
committerAndinus <andinus@nand.sh>2021-03-03 23:13:35 +0530
commit4c77f3376020ea13754b2f635ce07094cdc4a226 (patch)
treeb9ddc29123b47aa515ac26defea624f88f2a5c06 /lib/Octans/CLI.rakumod
parentedf8a7290888977ff0bc625f02a81abbc37fb984 (diff)
downloadoctans-4c77f3376020ea13754b2f635ce07094cdc4a226.tar.gz
Make class Puzzle, remove fancy chars, make module for get-puzzle
- Puzzle is a class that provides the grids & gray-squares. - Fancy chars were removed for ASCII characters. - get-puzzle is now in its own module.
Diffstat (limited to 'lib/Octans/CLI.rakumod')
-rw-r--r--lib/Octans/CLI.rakumod50
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>; }