diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-07-09 13:06:29 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-07-09 13:06:29 +0100 |
| commit | cd0c73e3388d7d0855bdee36e68edf6c978f2a6e (patch) | |
| tree | 4c041e801641dc8c43e989967a3a01370d79e2f1 | |
| parent | ea3a62e5bb2fe9dbacd3cd0d990fcf1f070ed517 (diff) | |
| parent | 273acb420be06491652e97b8e5473e4e91b33284 (diff) | |
| download | perlweeklychallenge-club-cd0c73e3388d7d0855bdee36e68edf6c978f2a6e.tar.gz perlweeklychallenge-club-cd0c73e3388d7d0855bdee36e68edf6c978f2a6e.tar.bz2 perlweeklychallenge-club-cd0c73e3388d7d0855bdee36e68edf6c978f2a6e.zip | |
Merge pull request #355 from Firedrake/rogerbw-016
Roger's solution. I hate everything to do with Bitcoin.
| -rwxr-xr-x | challenge-016/roger-bell-west/perl5/ch-1.pl | 23 | ||||
| -rwxr-xr-x | challenge-016/roger-bell-west/perl5/ch-2.pl | 32 |
2 files changed, 55 insertions, 0 deletions
diff --git a/challenge-016/roger-bell-west/perl5/ch-1.pl b/challenge-016/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..685d34d982 --- /dev/null +++ b/challenge-016/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,23 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Math::BigFloat; + +my $n=$ARGV[0] || 100; + +my $remaining=Math::BigFloat->new(1); +my $max=0; +my $maxp=0; + +foreach my $participant (1..$n) { + my $portion=$remaining*$participant/$n; + if ($portion > $max) { + $max=$portion; + $maxp=$participant; + } + $remaining-=$portion; +} + +print "$maxp: $max\n"; diff --git a/challenge-016/roger-bell-west/perl5/ch-2.pl b/challenge-016/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..710c38c6fe --- /dev/null +++ b/challenge-016/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,32 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Encode::Base58::GMP; +use Math::GMPz qw(:mpz); +use Digest::SHA qw(sha256 sha256_hex); + +foreach my $address (@ARGV) { + unless ($address =~ /^[1-9A-HJ-NP-Za-km-z]*$/) { + warn "$address\ninvalid characters\n"; + next; + } + my $a=decode_base58($address,'bitcoin'); + my $ah=Rmpz_get_str($a,16); + if (length($ah)%2==1) { + $ah='0'.$ah; + } + my @e=($ah =~ /(..)/g); + while (scalar @e < 25) { + unshift @e,'00'; + } + my $cksum=join('',splice(@e,-4)); + my $raw=pack('C*',map {hex($_)} @e); + my $digest=substr(sha256_hex(sha256($raw)),0,8); + if ($digest eq $cksum) { + print join('',@e),"\n"; + } else { + warn "$address\nCalculated $digest does not match stored $cksum\n"; + } +} |
