Als kleine Fingerübung habe ich ff. Perl-Script geschrieben, welches zur "Komprimierung" von AsciiArt verwendet werden kann.

Sei die Vorlage:

            /| |\
, ( `-´ )
/( _\ /____ []
| >(__|9|_____) ||
)( | | ___ ___ ||
-==- | | / _ \/ _ \||
|8|| (_) |(_) ||
/ \\___/\___(%%)
( ,-. ) |''|
\| |/ ||||
`--'


So erzeugt das Script folgenden Perl-Code:

#!/usr/bin/perl
use v5.10;
say ;
say " "x12,"/| |\\";
say " "x8,", ( `-´ )";
say " "x7,"/( _\\ /","_"x4," "x6,"[]";
say " "x6,"| >(__|9|","_"x5,")"," "x5,"||";
say " "x7,")("," "x4,"| | ___ ___ ||";
say " "x6,"-==- | | / _ \\/ _ \\||";
say " "x13,"|8|| (_) |(_) ||";
say " "x12,"/ \\\\___/\\___(%%)";
say " "x11,"( ,-. )"," "x8,"|''|";
say " "x12,"\\| |/"," "x9,"|"x4;
say " "x26,"`--'";
say ;
say ;
say ;1;


Alternativ kann der Fuzzy-Mode eingeschaltet werden, der ff. Code erzeugt:

#!/usr/bin/perl
use v5.10;
used in fuzzy mode
say "\n"," "x12,"/| |\\\n"," "x8,","," "x2,"( `-´ )\n"," "x7,"/("," "x2,"_\\"," "x3,"/","_"x4," "x6,"[]\n"," "x6,"|"," "x2,">(","_"x2,"|9|","_"x5,")"," "x5,"|"x2,"\n"," "x7,")("," "x4,"| |"," "x2,"_"x3," "x2,"_"x3," ","|"x2,"\n"," "x6,"-","="x2,"-"," "x3,"| | / _ \\/ _ \\","|"x2,"\n"," "x13,"|8","|"x2," (_) |(_) ","|"x2,"\n"," "x12,"/"," "x3,"\\"x2,"_"x3,"/\\","_"x3,"(","%"x2,")\n"," "x11,"( ,-. )"," "x8,"|","'"x2,"|\n"," "x12,"\\| |/"," "x9,"|"x4,"\n"," "x26,"`","-"x2,"'\n","\n","\n",;1;


Hier das Script:

#!/usr/bin/env perl
#===============================================================================
#
# FILE: compress_asciiart.pl
#
# USAGE: ./compress_asciiart.pl
#
# DESCRIPTION: compresses asciiart (or any text) to small perlcode using RLE
#
# OPTIONS: -f (enables fuzzing)
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Andreas Romeyke
# ORGANIZATION:
# VERSION: 1.0
# CREATED: 08.04.2019
# REVISION: ---
#===============================================================================

use strict;
use warnings;
use utf8;

print "#!/usr/bin/perl\n";
print "use v5.10;\n";
my $fuzzy=0;
my $runlength=3;
if (defined $ARGV[0] && $ARGV[0] eq "-f") {
print STDERR "used in fuzzy mode\n";
$runlength=1;
$fuzzy=1;
}

sub subs {
my $s1 = shift;
my $s2 = shift;
my $l = length($s2)+1;
$s1=~s/\\/\\\\/g;
$s1=~s/"/\\"/g;
$s2=~s/\\/\\\\/g;
$s2=~s/"/\\"/g;
my $v;
if ($l > $runlength) {
return
qq(").
qq($s1).
"\"x$l,";
} else {
return
qq(").
qq($s1$s2).
qq(",)
;
}
}
print "say ";
foreach my $line () {
chomp $line;
$line=~s/(.)(\1*)/my $l=length($2);subs($1, $2);/eg;
if ($fuzzy) {
$line =~ s/$/\"\\n\",/;
} else {
$line =~ s/$/;\nsay /;
}

while ($line=~s/"([^"]+)","([^"]+)",/"$1$2",/g) {};
$line=~s/,;\n/;\n/g;
print $line;
}
print ";1;";
1;




Wer noch weitere Vorschläge hat, wie man noch eleganteren Code erzeugen kann, immer her damit :)