From 3b4a95bb128361481df130fe3d5ed4ef20ef8eb4 Mon Sep 17 00:00:00 2001 From: Niels van Dijke Date: Sun, 22 Aug 2021 12:25:52 +0000 Subject: Task 1 & 2 --- challenge-126/perlboy1967/perl/ch-1.pl | 12 ++++++ challenge-126/perlboy1967/perl/ch-2.pl | 71 ++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100755 challenge-126/perlboy1967/perl/ch-1.pl create mode 100755 challenge-126/perlboy1967/perl/ch-2.pl 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); + } + } +} + -- cgit