diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-03-22 19:46:39 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-22 19:46:39 +0000 |
| commit | ed547f751a9b112dc9602a39f119422be0ad9e0b (patch) | |
| tree | 5c013f487f884d5e24016bbac6020a309f9f8588 | |
| parent | 49a1837d10982379d1c25c4025d704c1a6c77781 (diff) | |
| parent | 7ed4e10a7e8e6f724ee0b2e2c4d6f0a15a58c1fa (diff) | |
| download | perlweeklychallenge-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.pl | 58 | ||||
| -rw-r--r-- | challenge-052/yet-ebreo/perl/ch-2.pl | 56 |
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]; + |
