about summary refs log tree commit diff stats
path: root/lib/Octans/Puzzle.rakumod
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Octans/Puzzle.rakumod')
-rw-r--r--lib/Octans/Puzzle.rakumod69
1 files changed, 15 insertions, 54 deletions
diff --git a/lib/Octans/Puzzle.rakumod b/lib/Octans/Puzzle.rakumod
index a9563cb..731cc8e 100644
--- a/lib/Octans/Puzzle.rakumod
+++ b/lib/Octans/Puzzle.rakumod
@@ -1,59 +1,20 @@
-unit module Octans::Puzzle;
-
-use WWW;
-
-# get-puzzle returns the @puzzle given input path.
-sub get-puzzle (
-    Str $path
-) is export {
-    my @puzzle;
-
-    # $url will hold the url that we'll call to get the toot data.
-    my Str $url;
-
-    # User can pass 2 types of links, either it will be the one
-    # when they view it from their local instance or the one they
-    # get from Algot's profile. We set $url from it.
-    if $path.match("web/statuses") -> $match {
-        $url = $match.replace-with("api/v1/statuses");
-    } else {
-        $url = "https://mastodon.art/api/v1/statuses/" ~ $path.split("/")[*-1];
-    }
-
-    # grids capture grids of a row.
-    my token grids { \S \*? }
-    # rows capture rows of the puzzle.
-    my token rows { <grids> ** 2..* % \h }
-
-    # jget just get's the url & decodes the json. We access the
-    # description field of 1st media attachment.
-    if (jget($url)<media_attachments>[0]<description> ~~
-        / \n\n <rows>+ % \n /
-       ) -> $match {
-        for 0 .. $match<rows>.end -> $y {
-            for 0 .. $match<rows>[$y]<grids>.end -> $x {
-                @puzzle[$y][$x] = $match<rows>[$y]<grids>[$x].lc;
+class Puzzle is export {
+    has @.grids;
+    has @!gray-squares;
+
+    submethod TWEAK() {
+        for 0 .. @!grids.end -> $y {
+            for 0 .. @!grids[$y].end -> $x {
+                # Remove the markers from the puzzle & push the
+                # positions to @!gray-squares.
+                if @!grids[$y][$x].match("*") -> $match {
+                    @!grids[$y][$x] = $match.replace-with("");
+                    push @!gray-squares, ($y, $x);
+                }
             }
         }
     }
-    return @puzzle;
-}
-
-# set-gray squares will set the @gray-squares array while removing the
-# "*" in @puzzle. Algot marks them with an asterisk ("*") after the
-# character.
-sub set-gray-squares (
-    @puzzle --> List
-) is export {
-    my List @gray-squares;
 
-    for 0 .. @puzzle.end -> $y {
-        for 0 .. @puzzle[$y].end -> $x {
-            if @puzzle[$y][$x].ends-with("*") {
-                @puzzle[$y][$x] .= chop;
-                push @gray-squares, ($y, $x);
-            }
-        }
-    }
-    return @gray-squares;
+    # Accessor for @!gray-squares.
+    method gray-squares() { @!gray-squares; }
 }