aboutsummaryrefslogtreecommitdiff
path: root/challenge-016
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2019-07-09 13:12:34 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2019-07-09 13:12:34 +0100
commit1198b40dd8277c6ae5011073e6d2efeb73d3617e (patch)
tree8b29c77aa2d353b31026d115a81b9095284b41bc /challenge-016
parent22291fe314d32a384ab10a3f7cec22963a8bed9b (diff)
parentcd0c73e3388d7d0855bdee36e68edf6c978f2a6e (diff)
downloadperlweeklychallenge-club-1198b40dd8277c6ae5011073e6d2efeb73d3617e.tar.gz
perlweeklychallenge-club-1198b40dd8277c6ae5011073e6d2efeb73d3617e.tar.bz2
perlweeklychallenge-club-1198b40dd8277c6ae5011073e6d2efeb73d3617e.zip
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-016')
-rwxr-xr-xchallenge-016/roger-bell-west/perl5/ch-1.pl23
-rwxr-xr-xchallenge-016/roger-bell-west/perl5/ch-2.pl32
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";
+ }
+}