diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-10-24 22:15:59 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-24 22:15:59 +0100 |
| commit | 685f0f6081b426fd009db29b98d29eea6df6b1da (patch) | |
| tree | 1b78e18c34f7ba4c42be2f6a72d498f1571d8866 | |
| parent | 484c41107a3c73d28fb2df5c23d2ba8d8a16a5fc (diff) | |
| parent | 071e4f006bfe96928ab5896fbf27a825e8c6cf27 (diff) | |
| download | perlweeklychallenge-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.pl | 36 | ||||
| -rw-r--r-- | challenge-135/wanderdoc/perl/ch-2.pl | 57 |
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 |
