diff options
| author | Ruben Westerberg <drclaw@mac.com> | 2019-07-13 12:39:13 +1000 |
|---|---|---|
| committer | Ruben Westerberg <drclaw@mac.com> | 2019-07-13 12:39:13 +1000 |
| commit | c6315cece2b073b08a3fffb3e14088ff4ec88040 (patch) | |
| tree | 70c0e8d70f784ccbbb0b9452fd1aaad276e784fe | |
| parent | c0865bbb87c1036394779a6e979cddba38ea0705 (diff) | |
| download | perlweeklychallenge-club-c6315cece2b073b08a3fffb3e14088ff4ec88040.tar.gz perlweeklychallenge-club-c6315cece2b073b08a3fffb3e14088ff4ec88040.tar.bz2 perlweeklychallenge-club-c6315cece2b073b08a3fffb3e14088ff4ec88040.zip | |
Improved validation of characters
| -rwxr-xr-x | challenge-016/ruben-westerberg/perl5/ch-2.pl | 8 | ||||
| -rwxr-xr-x | challenge-016/ruben-westerberg/perl6/ch-2.p6 | 10 |
2 files changed, 10 insertions, 8 deletions
diff --git a/challenge-016/ruben-westerberg/perl5/ch-2.pl b/challenge-016/ruben-westerberg/perl5/ch-2.pl index 8ea3fb954f..597b705f68 100755 --- a/challenge-016/ruben-westerberg/perl5/ch-2.pl +++ b/challenge-016/ruben-westerberg/perl5/ch-2.pl @@ -3,6 +3,7 @@ use strict; use warnings; use bigint; use Digest::SHA qw(sha256); +use List::Util qw(all any first); use v5.26; my @addresses=@ARGV; @@ -10,17 +11,18 @@ my @addresses=@ARGV; 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy> unless @addresses; my %b; -for ("1".."9","A".."H","J".."N","P".."Z","a".."k","m".."z") { +my @valid=("1".."9","A".."H","J".."N","P".."Z","a".."k","m".."z"); +for (@valid) { state $i=0; $b{$_}=$i++; } for (@addresses) { print "Testing Address: $_\n"; - if (/[IlO]/) { print "Invalid characters found: $_\n"; next}; - my $sum=0; my @a=reverse (split ("", $_)); + unless (all {my $t=$_; first {$t eq $_} @valid} @a) { print "Invalid characters found: $_\n"; next}; + while (my ($k,$v)=each @a) { $sum+=$b{$v} *(58**$k);; } diff --git a/challenge-016/ruben-westerberg/perl6/ch-2.p6 b/challenge-016/ruben-westerberg/perl6/ch-2.p6 index ba859c705d..0a3a64c82a 100755 --- a/challenge-016/ruben-westerberg/perl6/ch-2.p6 +++ b/challenge-016/ruben-westerberg/perl6/ch-2.p6 @@ -6,24 +6,24 @@ my @addresses=@*ARGS; 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy> unless @addresses; my %b; -%b{$_}=$++ for ("1".."9","A".."H","J".."N","P".."Z","a".."k","m".."z").flat; +my @valid=("1".."9","A".."H","J".."N","P".."Z","a".."k","m".."z").flat; +%b{$_}=$++ for @valid; for (@addresses) { print "Testing Address: $_\n"; - if (/<[IlO]>/) { print "Invalid characters found: $_\n"; next}; - + unless so all(comb("",$_)) eq any(@valid) { print "Invalid characters found: $_\n"; next} my Int $sum=0; #Int type grows as needed my @a=reverse (comb("", $_)); for @a.kv { $sum+=%b{$^v} *(58**$^k); } my $buff=Buf.new($sum.base(16).fmt("%050s").comb(2)>>.fmt("%02s")>>.parse-base(16)); - unless ($buff.elems <= 25) { print "Invalid length: $_\n";next } + unless ($buff.elems <= 25) { print "Invalid length: $_\n"; next } $buff.unshift(0) while ($buff.elems < 25); my $check= sha256(sha256($buff.subbuf(0,21))).subbuf(0,4); my $inCheck=$buff.subbuf(21,4); - unless ($check eq $inCheck) { print "Check sum mismatch: $_\n";next}; + unless ($check eq $inCheck) { print "Check sum mismatch: $_\n"; next}; print "Address OK: $_\n\n"; } |
