s,$/,,g,
eval
####
$|--;
print join $",
map {
$_[$_{$_}] = sub {
join $,, map {
$_ = (ord) - ( $_[0] ? ($_[0]+4+$=)*$= : $= );
$_ += (2+$=)*2 while $_ < (1<<$.)-2-3*$=;
chr
} split $,, pop
} -> ($_{$_}, $_)
}
map {
$_{$_} = $a++;
$.++;
$_
}
map {
y; ;;d;
$= /= 1.5;
$.++;
$_
}
sub {
split $/, join q,,, ;
unshift @_, map {
$. = y---c - $|--;
$_
} shift;
{
undef @;;
map @{[ push @{ $;[ ord((/.{$.}(.)/)[$|]) ] }, $_ ]},@_;
@_ = map @$_, @;;
$.-- && redo
}
@_[$|--..$^F+$|]
} -> ()
##
##
$|--;
##
##
split "\n", join '', ;
##
##
unshift @_, map { $. = (length) - $|--; $_ } shift;
##
##
{
undef @bins;
map @{[ push @{ $bins[ ord( (/.{$.}(.)/)[$|] ) ] }, $_ ]}, @_;
@_ = map @$_, @bins;
$.-- && redo
}
##
##
$bins[ ord('l') ] = [ 'uhinbyl' ];
$bins[ ord('v') ] = [ 'zobxiiv' ];
$bins[ 0 ] = [ 'xqsauh', 'zozmib', 'xtbemz', 'ujwq', 'xzaf', 'ufde' ];
##
##
map {
y/ //d; # delete spaces. None of the words have any, so no-op.
$= /= 1.5; # $=, initially 60, can only contain integer values.
# Since map runs this 4 times for the 4 elements of @_
# $= becomes 60 -> 40 -> 26 -> 17 -> 11
$.++; # The test ($.-- && redo) ended at 0, which means that
# $. ended up with the value -1. Here it becomes 3
$_
}
##
##
map {
$_{$_} = $a++; # %_ hash becomes
# ( ufde=>0, uhinbyl=>1, ujwq=>2, xqsauh=>3 )
$.++; # 4 more increments leaves $. set to 7
$_
}
##
##
map {
$_[$_{$_}] = # $_{$_} is the hash value that was
# just set to the array index
sub {
...
} -> ($_{$_}, $_) # hash {$_}, $_ = (value, key) pair
}
##
##
$_[0] = sub { ... } -> (0, 'ufde')
$_[1] = sub { ... } -> (1, 'uhinbyl')
$_[2] = sub { ... } -> (2, 'ujwq')
$_[3] = sub { ... } -> (3, 'xqsauh')
##
##
join '',
map {
$_ = (ord) - 11 * ( $_[0] ? ($_[0]+15) : 1 );
$_ += 26 while $_ < 93;
chr
}