aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-275/jeanluc2020/blog-1.txt1
-rw-r--r--challenge-275/jeanluc2020/blog-2.txt1
-rwxr-xr-xchallenge-275/jeanluc2020/perl/ch-1.pl72
-rwxr-xr-xchallenge-275/jeanluc2020/perl/ch-2.pl76
4 files changed, 150 insertions, 0 deletions
diff --git a/challenge-275/jeanluc2020/blog-1.txt b/challenge-275/jeanluc2020/blog-1.txt
new file mode 100644
index 0000000000..d3164fc98c
--- /dev/null
+++ b/challenge-275/jeanluc2020/blog-1.txt
@@ -0,0 +1 @@
+http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/perl/theweeklychallenge-275-1.html
diff --git a/challenge-275/jeanluc2020/blog-2.txt b/challenge-275/jeanluc2020/blog-2.txt
new file mode 100644
index 0000000000..77a6c93758
--- /dev/null
+++ b/challenge-275/jeanluc2020/blog-2.txt
@@ -0,0 +1 @@
+http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/perl/theweeklychallenge-275-2.html
diff --git a/challenge-275/jeanluc2020/perl/ch-1.pl b/challenge-275/jeanluc2020/perl/ch-1.pl
new file mode 100755
index 0000000000..1e78eea602
--- /dev/null
+++ b/challenge-275/jeanluc2020/perl/ch-1.pl
@@ -0,0 +1,72 @@
+#!/usr/bin/env perl
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-275/#TASK1
+#
+# Task 1: Broken Keys
+# ===================
+#
+# You are given a sentence, $sentence and list of broken keys @keys.
+#
+# Write a script to find out how many words can be typed fully.
+#
+## Example 1
+##
+## Input: $sentence = "Perl Weekly Challenge", @keys = ('l', 'a')
+## Output: 0
+#
+## Example 2
+##
+## Input: $sentence = "Perl and Raku", @keys = ('a')
+## Output: 1
+##
+## Only Perl since the other word two words contain 'a' and can't be typed fully.
+#
+## Example 3
+##
+## Input: $sentence = "Well done Team PWC", @keys = ('l', 'o')
+## Output: 2
+#
+## Example 4
+##
+## Input: $sentence = "The joys of polyglottism", @keys = ('T')
+## Output: 2
+#
+############################################################
+##
+## discussion
+##
+############################################################
+#
+# We split the sentence into its words. Then we create an empty
+# temporary list, and walk through the list of broken keys. If a
+# word doesn't match the broken key, it will go into the temporary
+# list, and at the end of each loop over the broken keys, the new
+# list will be the list of words from the sentence that didn't
+# match any broken keys so far, while the temporary list will be
+# emptied again. This way, at the end of the loop over the broken
+# keys, we only have the words that don't match any of the broken
+# keys in the final list, of which we return the number of elements.
+
+use strict;
+use warnings;
+
+broken_keys( "Perl Weekly Challenge", "l", "a" );
+broken_keys( "Perl and Raku", "a" );
+broken_keys( "Well done Team PWC", "l", "o" );
+broken_keys( "The joys of polyglottism", "T" );
+
+sub broken_keys {
+ my ($sentence, @bk ) = @_;
+ print "Input: \$sentence = '$sentence', ('", join("', '", @bk), "')\n";
+ my @words = split /\s+/, lc($sentence);
+ my @tmp = ();
+ foreach my $broken (@bk) {
+ $broken = lc($broken);
+ foreach my $word (@words) {
+ push @tmp, $word unless $word =~ m/$broken/;
+ }
+ @words = @tmp;
+ @tmp = ();
+ }
+ print "Output: ", scalar(@words), "\n";
+}
+
diff --git a/challenge-275/jeanluc2020/perl/ch-2.pl b/challenge-275/jeanluc2020/perl/ch-2.pl
new file mode 100755
index 0000000000..9b9d384d05
--- /dev/null
+++ b/challenge-275/jeanluc2020/perl/ch-2.pl
@@ -0,0 +1,76 @@
+#!/usr/bin/env perl
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-275/#TASK2
+#
+# Task 2: Replace Digits
+# ======================
+#
+# You are given an alphanumeric string, $str, where each character is either a
+# letter or a digit.
+#
+# Write a script to replace each digit in the given string with the value of
+# the previous letter plus (digit) places.
+#
+## Example 1
+##
+## Input: $str = 'a1c1e1'
+## Ouput: 'abcdef'
+##
+## shift('a', 1) => 'b'
+## shift('c', 1) => 'd'
+## shift('e', 1) => 'f'
+#
+## Example 2
+##
+## Input: $str = 'a1b2c3d4'
+## Output: 'abbdcfdh'
+##
+## shift('a', 1) => 'b'
+## shift('b', 2) => 'd'
+## shift('c', 3) => 'f'
+## shift('d', 4) => 'h'
+#
+## Example 3
+##
+## Input: $str = 'b2b'
+## Output: 'bdb'
+#
+## Example 4
+##
+## Input: $str = 'a16z'
+## Output: 'abgz'
+#
+############################################################
+##
+## discussion
+##
+############################################################
+#
+# Walk the $str character by character. If it is a digits,
+# calculate the corresponding new character for the result by
+# using the previous character and the digit, otherwise just
+# append the current character and take note of the character
+# for the next round.
+
+use strict;
+use warnings;
+
+replace_digits('a1c1e1');
+replace_digits('a1b2c3d4');
+replace_digits('b2b');
+replace_digits('a16z');
+
+sub replace_digits {
+ my $str = shift;
+ print "Input: '$str'\n";
+ my $previous_char = "a";
+ my $result = "";
+ foreach my $char (split //, $str) {
+ if($char =~ m/\d/) {
+ $result .= chr(ord($previous_char) + $char);
+ } else {
+ $result .= $char;
+ $previous_char = $char;
+ }
+ }
+ print "Output: '$result'\n";
+}