aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScimon <simon.proctor@gmail.com>2021-08-17 14:22:28 +0100
committerScimon <simon.proctor@gmail.com>2021-08-17 14:22:28 +0100
commitc7b3b6dc639b05fec2c84f6959bd69928f9fa909 (patch)
treeb504fbe71c203556b4cd7e270d2c0ea4c8da59c9
parent7efb6ca2da6f4dd4ace888d064b0080429af154d (diff)
downloadperlweeklychallenge-club-c7b3b6dc639b05fec2c84f6959bd69928f9fa909.tar.gz
perlweeklychallenge-club-c7b3b6dc639b05fec2c84f6959bd69928f9fa909.tar.bz2
perlweeklychallenge-club-c7b3b6dc639b05fec2c84f6959bd69928f9fa909.zip
Does the basics of the challenge... more soon
-rw-r--r--challenge-126/simon-proctor/raku/ch-2.raku60
1 files changed, 60 insertions, 0 deletions
diff --git a/challenge-126/simon-proctor/raku/ch-2.raku b/challenge-126/simon-proctor/raku/ch-2.raku
new file mode 100644
index 0000000000..025f530b0d
--- /dev/null
+++ b/challenge-126/simon-proctor/raku/ch-2.raku
@@ -0,0 +1,60 @@
+#!/usr/bin/env raku
+
+my $example = q:to/END/.chomp;
+x * * * x * x x x x
+* * * * * * * * * x
+* * * * x * x * x *
+* * * x x * * * * *
+x * * * x * * * * x
+END
+
+multi sub MAIN("test") is hidden-from-USAGE {
+ my $expected = q:to/END/.chomp;
+ x 1 0 1 x 2 x x x x
+ 1 1 0 2 2 4 3 5 5 x
+ 0 0 1 3 x 3 x 2 x 2
+ 1 1 1 x x 4 1 2 2 2
+ x 1 1 3 x 2 0 0 1 x
+ END
+
+ use Test;
+
+ is parse-mines( "x*x" ), [["x","*","x"]];
+ is parse-mines( "x * x" ), [["x","*","x"]];
+ is find-numbers( "x*x" ), "x 2 x";
+
+ is find-numbers( $example ), $expected;
+
+ done-testing;
+}
+
+#| Displays the exmaple grid
+multi sub MAIN("example") {
+ $example.say;
+ ("-" x 19).say;
+ find-numbers( $example ).say;
+}
+
+sub parse-mines( Str $input ) {
+ return $input.lines.map( { $_.comb(/\S/).Array } ).Array;
+}
+
+sub find-numbers(Str $s) {
+ my @grid = parse-mines( $s );
+
+ my @surround = (1,0,-1) X, (1,0,-1);
+
+ for 0..^@grid.elems -> $y {
+ for 0..^@grid[$y].elems -> $x {
+ next if @grid[$y][$x] ~~ 'x';
+ my $count = 0;
+ for @surround -> ($dy,$dx) {
+ next if 0 ~~ $dy ~~ $dx;
+ try { $count++ if @grid[$y+$dy][$x+$dx] ~~ 'x'; }
+ }
+ @grid[$y][$x] = $count;
+ }
+ }
+
+ return @grid.map( { $_.join(" ") } ).join("\n");
+}