aboutsummaryrefslogtreecommitdiff
path: root/challenge-036
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2019-12-01 18:38:25 +0000
committerGitHub <noreply@github.com>2019-12-01 18:38:25 +0000
commit3ccc387d54f2555a1128b4b6c1c04d0aa105e140 (patch)
tree33ecbfb44967e99fb9ac54d678c908e63441db55 /challenge-036
parentbeea690859a2fb0c0451c4d5a8fb5d17c0b5d6e9 (diff)
parentf0578620b13b75c889e0b0683f9ef6259e3ea077 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-036/adam-russell/perl5/ch-1.pl67
-rw-r--r--challenge-036/adam-russell/perl5/ch-2.pl23
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";
+}