2016-04
parent
3d1d5fb7a4
commit
6cc0cec4a9
|
@ -0,0 +1,17 @@
|
|||
use 5.20.0;
|
||||
|
||||
use List::UtilsBy qw/ sort_by /;
|
||||
use List::AllUtils qw/ sum /;
|
||||
use experimental qw/ signatures /;
|
||||
|
||||
|
||||
say sum map { /(\d+)/ } grep { is_real($_) } <>;
|
||||
|
||||
sub is_real ( $line ) {
|
||||
$line =~ s/\[(.*?)\]//;
|
||||
my $checksum = $1;
|
||||
|
||||
$checksum eq join '', ( sort_by {
|
||||
sprintf "%03d%s", 999 - (eval "\$line =~ y/$_/$_/"), $_
|
||||
} 'a'..'z' )[0..4];
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
use 5.20.0;
|
||||
|
||||
use List::UtilsBy qw/ sort_by /;
|
||||
use List::AllUtils qw/ sum /;
|
||||
use experimental qw/ signatures /;
|
||||
|
||||
my @real = grep { is_real($_) } <>;
|
||||
|
||||
my @alphabet = ( 'a'..'z' );
|
||||
say $_, ": ", decrypt($_) for @real;
|
||||
|
||||
|
||||
sub decrypt($line) {
|
||||
|
||||
$line =~ s/(\d+).*$//;
|
||||
my $checksum = $1;
|
||||
|
||||
$line =~ s/-/ /g;
|
||||
$line =~ s/([a-z])/ $alphabet[ ( ord( $1 ) - ord( 'a' ) + $checksum ) % @alphabet ]/eg;
|
||||
|
||||
$line;
|
||||
|
||||
}
|
||||
|
||||
sub is_real ( $line ) {
|
||||
$line =~ s/\[(.*?)\]//;
|
||||
my $checksum = $1;
|
||||
|
||||
$checksum eq join '', ( sort_by {
|
||||
sprintf "%03d%s", 999 - (eval "\$line =~ y/$_/$_/"), $_
|
||||
} 'a'..'z' )[0..4];
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue