From 5f25db28062db72f0c582b210bd57b762140a027 Mon Sep 17 00:00:00 2001 From: Branislav ZahradnĂ­k Date: Mon, 3 Oct 2022 18:53:39 +0200 Subject: Challenge 185 - guest contribution happy-barney --- .../happy-barney/perl/ch-1-test-scenario.pl | 20 ++++++++++++++++++++ challenge-185/happy-barney/perl/ch-1.pl | 16 ++++++++++++++++ challenge-185/happy-barney/perl/ch-1.t | 9 +++++++++ challenge-185/happy-barney/perl/ch-1.yaml | 17 +++++++++++++++++ .../happy-barney/perl/ch-2-test-scenario.pl | 20 ++++++++++++++++++++ challenge-185/happy-barney/perl/ch-2.pl | 19 +++++++++++++++++++ challenge-185/happy-barney/perl/ch-2.t | 7 +++++++ challenge-185/happy-barney/perl/ch-2.yaml | 15 +++++++++++++++ 8 files changed, 123 insertions(+) create mode 100644 challenge-185/happy-barney/perl/ch-1-test-scenario.pl create mode 100644 challenge-185/happy-barney/perl/ch-1.pl create mode 100644 challenge-185/happy-barney/perl/ch-1.t create mode 100644 challenge-185/happy-barney/perl/ch-1.yaml create mode 100644 challenge-185/happy-barney/perl/ch-2-test-scenario.pl create mode 100644 challenge-185/happy-barney/perl/ch-2.pl create mode 100644 challenge-185/happy-barney/perl/ch-2.t create mode 100644 challenge-185/happy-barney/perl/ch-2.yaml diff --git a/challenge-185/happy-barney/perl/ch-1-test-scenario.pl b/challenge-185/happy-barney/perl/ch-1-test-scenario.pl new file mode 100644 index 0000000000..a15e748021 --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-1-test-scenario.pl @@ -0,0 +1,20 @@ + +use strict; +use warnings; + +use Test::YAFT; +use YAML::Syck qw[ LoadFile ]; + +act { [ challenge_185_1 (@{ $_[0] }) ] } 'input'; + +my $plan = LoadFile "./ch-1.yaml"; +for my $message (sort keys %$plan) { + it $message + => with_input => $plan->{$message}{input}, + => expect => $plan->{$message}{expect}, + ; +} + +had_no_warnings; +done_testing; + diff --git a/challenge-185/happy-barney/perl/ch-1.pl b/challenge-185/happy-barney/perl/ch-1.pl new file mode 100644 index 0000000000..a40a9b2886 --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-1.pl @@ -0,0 +1,16 @@ +#!/usr/bin/env perl + +use Syntax::Construct 'non-destructive-substitution'; + +use strict; +use warnings; + +sub challenge_185_1 { + my ($mac) = @_; + + return $mac + =~ s/[^[:xdigit:]]+//gr + =~ s/( [[:xdigit:]]{2} ) (?! $)/$1:/grx + ; +} + diff --git a/challenge-185/happy-barney/perl/ch-1.t b/challenge-185/happy-barney/perl/ch-1.t new file mode 100644 index 0000000000..d9072dd26c --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-1.t @@ -0,0 +1,9 @@ + +use strict; +use warnings; + +do "./ch-1.pl"; +die $@ if $@; + +do "./ch-1-test-scenario.pl"; +die $@ if $@; diff --git a/challenge-185/happy-barney/perl/ch-1.yaml b/challenge-185/happy-barney/perl/ch-1.yaml new file mode 100644 index 0000000000..a67855561e --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-1.yaml @@ -0,0 +1,17 @@ +"should format dot-delimited mac-address": + input: + - '1ac2.34f0.b1c2' + expect: + - '1a:c2:34:f0:b1:c2' + +"should format already formatted mac address": + input: + - '1a:c2:34:f0:b1:c2' + expect: + - '1a:c2:34:f0:b1:c2' + +"should format mac address without separators": + input: + - '1ac234f0b1c2' + expect: + - '1a:c2:34:f0:b1:c2' diff --git a/challenge-185/happy-barney/perl/ch-2-test-scenario.pl b/challenge-185/happy-barney/perl/ch-2-test-scenario.pl new file mode 100644 index 0000000000..32493363ca --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-2-test-scenario.pl @@ -0,0 +1,20 @@ + +use strict; +use warnings; + +use Test::YAFT; +use YAML::Syck qw[ LoadFile ]; + +act { [ challenge_185_2 (@{ $_[0] }) ] } 'input'; + +my $plan = LoadFile "./ch-2.yaml"; +for my $message (sort keys %$plan) { + it $message + => with_input => $plan->{$message}{input}, + => expect => $plan->{$message}{expect}, + ; +} + +had_no_warnings; +done_testing; + diff --git a/challenge-185/happy-barney/perl/ch-2.pl b/challenge-185/happy-barney/perl/ch-2.pl new file mode 100644 index 0000000000..be12b10be0 --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-2.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +sub challenge_185_2 { + my (@codes) = @_; + + my $count = 4; + my $mask = 'x'; + + for my $code (@codes) { + $code =~ s/^ ((?: $mask \W*){$_}) [a-z0-9]/$1$mask/x + for 0 .. $count - 1; + } + + return @codes; +} + diff --git a/challenge-185/happy-barney/perl/ch-2.t b/challenge-185/happy-barney/perl/ch-2.t new file mode 100644 index 0000000000..aac2cc2a14 --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-2.t @@ -0,0 +1,7 @@ + +use strict; +use warnings; + +do "./ch-2.pl"; +do "./ch-2-test-scenario.pl"; + diff --git a/challenge-185/happy-barney/perl/ch-2.yaml b/challenge-185/happy-barney/perl/ch-2.yaml new file mode 100644 index 0000000000..9f0a299489 --- /dev/null +++ b/challenge-185/happy-barney/perl/ch-2.yaml @@ -0,0 +1,15 @@ +"should mask first 4 characters/letters": + input: + - 'ab-cde-123' + - '123.abc.420' + - '3abc-0010.xy' + - '1234567.a' + - 'a-1234-bc' + - 'a.b.c.d.e.f' + expect: + - 'xx-xxe-123' + - 'xxx.xbc.420' + - 'xxxx-0010.xy' + - 'xxxx567.a' + - 'x-xxx4-bc' + - 'x.x.x.x.e.f' -- cgit