aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-10-24 22:15:59 +0100
committerGitHub <noreply@github.com>2021-10-24 22:15:59 +0100
commit685f0f6081b426fd009db29b98d29eea6df6b1da (patch)
tree1b78e18c34f7ba4c42be2f6a72d498f1571d8866
parent484c41107a3c73d28fb2df5c23d2ba8d8a16a5fc (diff)
parent071e4f006bfe96928ab5896fbf27a825e8c6cf27 (diff)
downloadperlweeklychallenge-club-685f0f6081b426fd009db29b98d29eea6df6b1da.tar.gz
perlweeklychallenge-club-685f0f6081b426fd009db29b98d29eea6df6b1da.tar.bz2
perlweeklychallenge-club-685f0f6081b426fd009db29b98d29eea6df6b1da.zip
Merge pull request #5087 from wanderdoc/master
Solutions to challenge-135
-rw-r--r--challenge-135/wanderdoc/perl/ch-1.pl36
-rw-r--r--challenge-135/wanderdoc/perl/ch-2.pl57
2 files changed, 93 insertions, 0 deletions
diff --git a/challenge-135/wanderdoc/perl/ch-1.pl b/challenge-135/wanderdoc/perl/ch-1.pl
new file mode 100644
index 0000000000..94857c1204
--- /dev/null
+++ b/challenge-135/wanderdoc/perl/ch-1.pl
@@ -0,0 +1,36 @@
+#!perl
+use strict;
+use warnings FATAL => qw(all);
+
+=prompt
+You are given an integer. Write a script find out the middle 3-digits of the given integer, if possible otherwise throw sensible error.
+=cut
+
+
+
+
+
+
+
+
+
+
+
+sub middle_three
+{
+ my $num = $_[0];
+ $num =~ tr/-//ds;
+ return "Even number of digits!" if length($num) % 2 == 0;
+ return "Too short!" if length($num) < 3;
+ return $num if length($num) == 3;
+
+ my $middle = length($num) / 2;
+ return substr($num, int($middle) - 1, 3);
+}
+
+
+print middle_three(1234567), $/;
+print middle_three(-123), $/;
+print middle_three(1), $/;
+print middle_three(10), $/;
+print middle_three(1415926535897), $/; \ No newline at end of file
diff --git a/challenge-135/wanderdoc/perl/ch-2.pl b/challenge-135/wanderdoc/perl/ch-2.pl
new file mode 100644
index 0000000000..8831c08411
--- /dev/null
+++ b/challenge-135/wanderdoc/perl/ch-2.pl
@@ -0,0 +1,57 @@
+#!perl
+use strict;
+use warnings FATAL => qw(all);
+
+=prompt
+You are given 7-characters alphanumeric SEDOL. Write a script to validate the given SEDOL. Print 1 if it is a valid SEDOL otherwise 0. For more information about SEDOL, please checkout the wikipedia page. https://en.wikipedia.org/wiki/SEDOL
+=cut
+
+
+
+
+
+
+
+
+
+
+
+sub validate_SEDOL
+{
+ my $string = uc $_[0];
+ return "Wrong code $string: Vowels are not allowed!$/" if $string =~ /[AEIOU]/;
+ my ($code, $check_digit) = unpack "A6A1", $string;
+
+ my $calc_digit = _calculate_cd($code);
+
+ return $calc_digit == $check_digit ? 1 : 0;
+}
+
+sub _calculate_cd
+{
+ my $string = $_[0];
+ my @letters = 'A' .. 'Z';
+ my %values;
+ @values{@letters} = map $_ + 1 + 9, 0 .. $#letters;
+ @values{0 .. 9} = 0 .. 9;
+
+ my @weights = (1, 3, 1, 7, 3, 9, 1);
+
+
+ my @arr = split(//, $string);
+ my $sum;
+
+
+ for my $i ( 0 .. $#arr )
+ {
+ die "Wrong code!$/" if not exists $values{$arr[$i]};
+ $sum += $values{$arr[$i]} * $weights[$i];
+
+ }
+ return (10 - $sum % 10) % 10;
+}
+
+
+print validate_SEDOL('2936921'), $/; # 1
+print validate_SEDOL('1234567'), $/; # 0
+print validate_SEDOL('B0YBKL9'), $/; # 1 \ No newline at end of file