27 lines
802 B
Raku
27 lines
802 B
Raku
my $e64 = '
|
|
VG8gZXJyIGlzIGh1bWFuLCBidXQgdG8gcmVhbGx5IGZvdWwgdGhpbmdzIHVwIHlvdSBuZWVkIGEgY2
|
|
9tcHV0ZXIuCiAgICAtLSBQYXVsIFIuIEVocmxpY2g=
|
|
';
|
|
|
|
my @base64map = flat 'A' .. 'Z', 'a' .. 'z', ^10, '+', '/';
|
|
my %base64 is default(0) = @base64map.pairs.invert;
|
|
|
|
sub base64-decode-slow ($enc) {
|
|
my $buf = Buf.new;
|
|
for $enc.subst(/\s/, '', :g).comb(4) -> $chunck {
|
|
$buf.append: |(sprintf "%06d%06d%06d%06d", |$chunck.comb.map:
|
|
{%base64{$_}.base(2)}).comb(8).map: {:2($_)};
|
|
}
|
|
$buf
|
|
}
|
|
|
|
say 'Slow:';
|
|
say base64-decode-slow($e64).decode('utf8');
|
|
|
|
|
|
# Of course, the above routine is slow and is only for demonstration purposes.
|
|
# For real code you should use a module, which is MUCH faster and heavily tested.
|
|
say "\nFast:";
|
|
use Base64::Native;
|
|
say base64-decode($e64).decode('utf8');
|