aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels van Dijke <perlboy@cpan.org>2021-08-22 12:25:52 +0000
committerNiels van Dijke <perlboy@cpan.org>2021-08-22 12:25:52 +0000
commit3b4a95bb128361481df130fe3d5ed4ef20ef8eb4 (patch)
tree0edc566ef4545981f762c277e016924d1c29038c
parent759922f92bfa88a1d407e4e820777d771989eb95 (diff)
downloadperlweeklychallenge-club-3b4a95bb128361481df130fe3d5ed4ef20ef8eb4.tar.gz
perlweeklychallenge-club-3b4a95bb128361481df130fe3d5ed4ef20ef8eb4.tar.bz2
perlweeklychallenge-club-3b4a95bb128361481df130fe3d5ed4ef20ef8eb4.zip
Task 1 & 2
-rwxr-xr-xchallenge-126/perlboy1967/perl/ch-1.pl12
-rwxr-xr-xchallenge-126/perlboy1967/perl/ch-2.pl71
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-126/perlboy1967/perl/ch-1.pl b/challenge-126/perlboy1967/perl/ch-1.pl
new file mode 100755
index 0000000000..c5aacfa370
--- /dev/null
+++ b/challenge-126/perlboy1967/perl/ch-1.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 126
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-126/#TASK1
+#
+# Task 1 - Count Numbers
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use 5.16.0;
+
+say scalar grep !/1/,1..shift;
diff --git a/challenge-126/perlboy1967/perl/ch-2.pl b/challenge-126/perlboy1967/perl/ch-2.pl
new file mode 100755
index 0000000000..23c2a52037
--- /dev/null
+++ b/challenge-126/perlboy1967/perl/ch-2.pl
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+
+# Perl Weekly Challenge - 126
+# - https://perlweeklychallenge.org/blog/perl-weekly-challenge-126/#TASK2
+#
+# Task 2 - Minesweeper Game
+#
+# Author: Niels 'PerlBoy' van Dijke
+
+use v5.16;
+use strict;
+use warnings;
+
+# Prototype(s)
+sub generateBoard($$\@);
+sub printBoard(\@);
+sub solveBoard(\@);
+
+my @B;
+
+@ARGV = (8,8) unless scalar @ARGV;
+
+generateBoard(shift,shift,@B);
+printBoard(@B);
+solveBoard(@B);
+printBoard(@B);
+
+
+sub generateBoard($$\@) {
+ my ($w,$h,$arB) = @_;
+
+ my @c = qw(X . . . .); # 1 in 5 chance of placing a bomb
+
+ foreach my $y (1 .. $h) {
+ foreach my $x (1 .. $w) {
+ $arB->[$y][$x] = $c[int rand(scalar @c)];
+ }
+ $arB->[$y+1] = [];
+ }
+}
+
+sub printBoard(\@) {
+ my ($arB) = @_;
+
+ print " ----[Board]----\n";
+ foreach my $y (1 .. scalar(@$arB)-2) {
+ printf "%s\n", join(' ',map{$_//''} @{$arB->[$y]});
+ }
+ print " ---------------\n";
+}
+
+sub solveBoard(\@) {
+ my ($arB) = @_;
+
+ foreach my $y (1 .. scalar(@$arB)-2) {
+ foreach my $x (1 .. scalar(@{$arB->[1]})-1) {
+ next if $arB->[$y][$x] eq 'X';
+ my $n = scalar grep /X/,
+ $arB->[$y-1][$x-1] // '', # NW
+ $arB->[$y-1][$x] // '', # N
+ $arB->[$y-1][$x+1] // '', # NE
+ $arB->[$y][$x-1] // '', # W
+ $arB->[$y][$x+1] // '', # E
+ $arB->[$y+1][$x-1] // '', # SW
+ $arB->[$y+1][$x] // '', # S
+ $arB->[$y+1][$x+1] // ''; # SE
+ $arB->[$y][$x] = ($n == 0 ? '.' : $n);
+ }
+ }
+}
+