aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-03-22 19:46:39 +0000
committerGitHub <noreply@github.com>2020-03-22 19:46:39 +0000
commited547f751a9b112dc9602a39f119422be0ad9e0b (patch)
tree5c013f487f884d5e24016bbac6020a309f9f8588
parent49a1837d10982379d1c25c4025d704c1a6c77781 (diff)
parent7ed4e10a7e8e6f724ee0b2e2c4d6f0a15a58c1fa (diff)
downloadperlweeklychallenge-club-ed547f751a9b112dc9602a39f119422be0ad9e0b.tar.gz
perlweeklychallenge-club-ed547f751a9b112dc9602a39f119422be0ad9e0b.tar.bz2
perlweeklychallenge-club-ed547f751a9b112dc9602a39f119422be0ad9e0b.zip
Merge pull request #1443 from Doomtrain14/master
Added solution for ch#52-2
-rw-r--r--challenge-052/yet-ebreo/perl/ch-1.pl58
-rw-r--r--challenge-052/yet-ebreo/perl/ch-2.pl56
2 files changed, 112 insertions, 2 deletions
diff --git a/challenge-052/yet-ebreo/perl/ch-1.pl b/challenge-052/yet-ebreo/perl/ch-1.pl
index 1f3064e74a..e1d7f6b792 100644
--- a/challenge-052/yet-ebreo/perl/ch-1.pl
+++ b/challenge-052/yet-ebreo/perl/ch-1.pl
@@ -9,25 +9,79 @@ my ($start,$end) = @ARGV;
die ("Usage:\n\tch1.pl <start> <end>\n\n") if @ARGV<2;
my @range = ($start..$end);
-my $step = "123456789";
+my $step = "0123456789";
+my $num = "@range ";
+my %hash;
say "List of stepping number(s) from $start to $end";
-"@range " =~ "$& " && say $& while $step =~ s/.(..)/$1/;
+while ($step =~ s/(.)(.)(.)/$2$3/) {
+ my ($l,$m,$r) = ($1,$2,$3);
+ $num =~ "$l$m$r " && $hash{$&}++;
+ $num =~ "$r$m$l " && $hash{$&}++;
+ $num =~ "$l$m$l " && $hash{$&}++;
+ $num =~ "$m$l$m " && $hash{$&}++;
+ $num =~ "$r$m$r " && $hash{$&}++;
+ $num =~ "$m$r$m " && $hash{$&}++;
+};
+
+say for sort {$a-$b} keys %hash;
=begin
perl .\ch-1.pl 124 780
List of stepping number(s) from 124 to 780
+210
+212
+232
234
+321
+323
+343
345
+432
+434
+454
456
+543
+545
+565
567
+654
+656
+676
678
+765
+767
perl .\ch-1.pl 100 999
List of stepping number(s) from 100 to 999
+101
+121
123
+210
+212
+232
234
+321
+323
+343
345
+432
+434
+454
456
+543
+545
+565
567
+654
+656
+676
678
+765
+767
+787
789
+876
+878
+898
+987
+989
=cut \ No newline at end of file
diff --git a/challenge-052/yet-ebreo/perl/ch-2.pl b/challenge-052/yet-ebreo/perl/ch-2.pl
new file mode 100644
index 0000000000..8b8c7d3ac8
--- /dev/null
+++ b/challenge-052/yet-ebreo/perl/ch-2.pl
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+# http://projectbritain.com/money.html
+
+my @money = qw(£1 50p 1p 10p 5p 20p £2 2p);
+
+#Converts £ to p
+@money = "@money"=~s/£(\S+)/$1*100/gre =~ /\d+/g;
+
+#This means the algo optimized for player2 (vs player1)
+my $optimized = 1;
+
+my $min = 1e99;
+my $comb;
+
+#This is a brute force algo, it outputs the final set of money
+#for both players (if they both played optimally) but not in correct sequence
+for my $pick (0.. 2 ** (2*@money)-1) {
+ my @accu = (0,0);
+ my @monay = @money;
+ for my $pos (0..@monay-1) {
+ my $val;
+ if ($pick & 1 << $pos) {
+ $val = shift @monay;
+
+ } else {
+ $val = pop @monay
+ }
+
+ $accu[$pos % 2] += $val;
+ }
+ if (($accu[$optimized] - $accu[!$optimized]) > 0 && ($min >$accu[$optimized] - $accu[!$optimized])) {
+ $min = $accu[$optimized] - $accu[!$optimized];
+ $comb = $pick;
+ }
+}
+my @path;
+say "@money";
+for my $pos (0..@money-1) {
+ my $val;
+ if ($comb & 1 << $pos) {
+ $val = shift @money;
+
+ } else {
+ $val = pop @money
+ }
+ $path[$pos % 2] .= ">> $val ";
+}
+
+say "Player".($optimized+1).": " . $path[$optimized];
+say "Player".($optimized). ": " . $path[!$optimized];
+