From 4c77f3376020ea13754b2f635ce07094cdc4a226 Mon Sep 17 00:00:00 2001 From: Andinus Date: Wed, 3 Mar 2021 23:13:35 +0530 Subject: 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. --- lib/Octans/Puzzle.rakumod | 69 +++++++++++------------------------------------ 1 file changed, 15 insertions(+), 54 deletions(-) (limited to 'lib/Octans/Puzzle.rakumod') 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 { ** 2..* % \h } - - # jget just get's the url & decodes the json. We access the - # description field of 1st media attachment. - if (jget($url)[0] ~~ - / \n\n + % \n / - ) -> $match { - for 0 .. $match.end -> $y { - for 0 .. $match[$y].end -> $x { - @puzzle[$y][$x] = $match[$y][$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; } } -- cgit 1.4.1-2-gfad0