diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-12-01 18:38:25 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-01 18:38:25 +0000 |
| commit | 3ccc387d54f2555a1128b4b6c1c04d0aa105e140 (patch) | |
| tree | 33ecbfb44967e99fb9ac54d678c908e63441db55 /challenge-036 | |
| parent | beea690859a2fb0c0451c4d5a8fb5d17c0b5d6e9 (diff) | |
| parent | f0578620b13b75c889e0b0683f9ef6259e3ea077 (diff) | |
| download | perlweeklychallenge-club-3ccc387d54f2555a1128b4b6c1c04d0aa105e140.tar.gz perlweeklychallenge-club-3ccc387d54f2555a1128b4b6c1c04d0aa105e140.tar.bz2 perlweeklychallenge-club-3ccc387d54f2555a1128b4b6c1c04d0aa105e140.zip | |
Merge pull request #986 from adamcrussell/challenge-036
solution for challenge 036
Diffstat (limited to 'challenge-036')
| -rw-r--r-- | challenge-036/adam-russell/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-036/adam-russell/perl5/ch-1.pl | 67 | ||||
| -rw-r--r-- | challenge-036/adam-russell/perl5/ch-2.pl | 23 |
3 files changed, 91 insertions, 0 deletions
diff --git a/challenge-036/adam-russell/blog.txt b/challenge-036/adam-russell/blog.txt new file mode 100644 index 0000000000..538953f06c --- /dev/null +++ b/challenge-036/adam-russell/blog.txt @@ -0,0 +1 @@ +https://adamcrussell.livejournal.com/12459.html diff --git a/challenge-036/adam-russell/perl5/ch-1.pl b/challenge-036/adam-russell/perl5/ch-1.pl new file mode 100644 index 0000000000..083f35885c --- /dev/null +++ b/challenge-036/adam-russell/perl5/ch-1.pl @@ -0,0 +1,67 @@ +use strict; +use warnings; +## +# Write a program to validate Vehicle Identification Numbers (VINs). +## +use boolean; +use Readonly; +Readonly::Hash my %CHAR_VALUES => ( + A => 1, + B => 2, + C => 3, + D => 4, + E => 5, + F => 6, + G => 7, + H => 8, + J => 1, + K => 2, + L => 3, + M => 4, + N => 5, + P => 7, + R => 9, + S => 2, + T => 3, + U => 4, + V => 5, + W => 6, + X => 7, + Z => 9, + 1 => 1, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + 6 => 6, + 7 => 7, + 8 => 8, + 9 => 9, + 0 => 0, +); +Readonly::Array my @WEIGHTS => (8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2); +Readonly::Array my @CHECK_DIGITS => (0 .. 9, "X"); + +sub is_valid{ + my ($vin) = @_; + $vin = uc($vin); + unless($vin =~ m/^[A-H J-N P R-Z 0-9]{9}[A-H J-N P R-T V-Y 1-9]{1}[A-H J-N P R-Z 0-9]{7}$/){ + return false; + } + else{ + my @vin = split(//, $vin); + my $checksum = 0; + my @values = map { $CHAR_VALUES{$_} } @vin; + for(my $i = 0; $i < @values; $i++){ + $checksum = ($checksum + ($values[$i] * $WEIGHTS[$i])); + } + my $check_digit = $checksum % 11; + return true if $vin[8] eq $CHECK_DIGITS[$check_digit]; + } + return false; +} + +MAIN:{ + print is_valid($ARGV[0]); + print "\n"; +} diff --git a/challenge-036/adam-russell/perl5/ch-2.pl b/challenge-036/adam-russell/perl5/ch-2.pl new file mode 100644 index 0000000000..628c1207d0 --- /dev/null +++ b/challenge-036/adam-russell/perl5/ch-2.pl @@ -0,0 +1,23 @@ +use strict; +use warnings; +## +# Write a program to solve the Knapsack Problem. +## +use Readonly; +Readonly::Array my @weights => (1, 1, 2, 12, 4); +Readonly::Array my @values => (1, 2, 2, 4, 10); + +sub knapsack{ + my($capacity, $n) = @_; + return 0 if($n == 0 || $capacity == 0); + return knapsack($capacity, $n - 1) if ($weights[$n - 1] > $capacity); + my $a = knapsack($capacity - $weights[$n - 1], $n - 1) + $values[$n - 1]; + my $b = knapsack($capacity, $n - 1); + return $a > $b ? $a : $b; +} + +MAIN:{ + my $max_capacity = 15; + print knapsack($max_capacity, scalar(@weights)); + print "\n"; +} |
