fork download
  1. #!/usr/bin/perl
  2. @t = ('A'..'Z','a'..'z','0'..'9','+','-');
  3. sub encode {
  4. $f = 'B8' x length $_[0];
  5. $b = join '', unpack $f, $_[0];
  6. @c = map{$t[eval"0b$_"]} ($b.'0'x($W-1)) =~ /(.{$W})/g;
  7. $" = '';
  8. "@c"
  9. }
  10.  
  11. %t = map{$_ => $i++} @t;
  12. sub decode {
  13. $f = "%0${W}b";
  14. $b = join '', map{sprintf $f,$t{$_}} split '', $_[0];
  15. @b = $b =~ /(.{8})/g;
  16. pack 'B8' x @b, @b;
  17. }
  18.  
  19. use feature 'say';
  20. @data = <STDIN>;
  21. for $w (6,5,3) {
  22. $W = $w;
  23. say "Width: $W";
  24. for (@data) {
  25. say;
  26. $e = encode $_;
  27. say $e;
  28. say decode $e;
  29. }
  30. }
Success #stdin #stdout 0.01s 4548KB
stdin
ABCDEFG
Hello, World!
0123456789"#$%&'()`=@
stdout
Width: 6
ABCDEFG
QUJDREVGRw
ABCDEFG
Hello, World!
SGVsbG8sIFdvcmxkIQ
Hello, World!
0123456789"#$%&'()`=@
MDEyMzQ1Njc4OSIjJCUmJygpYD1A
0123456789"#$%&'()`=@
Width: 5
ABCDEFG
IFBEGRCFIZDQ
ABCDEFG
Hello, World!
JBSWYbDPFQQFObbSNRSCC
Hello, World!
0123456789"#$%&'()`=@
GAYTEMZUGUbDOOBZEIRSIJJGEcUCSYBdIA
0123456789"#$%&'()`=@
Width: 3
ABCDEFG
CACEBBADCBAECFAGCBG
ABCDEFG
Hello, World!
CCAGCFFEDDAGHEFEBAAFDFFHDEEGGBEEBAC
Hello, World!
0123456789"#$%&'()`=@
BEADAEGCBEGDCAGFBFEDDEHABGCCBAEDBBACCEEGBBGCEAFBDAADGFAA
0123456789"#$%&'()`=@