RDW #3 (Rätsel vom 23.07.2004)
Aufgabe
RDW #3 - Rätsel der Woche Nummer 3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Regeln: * Bitte nicht vor Ablauf der ersten 72 Stunden ( = drei Tage )
~~~~~~~ nach Veröffentlichung Hinweise (Spoiler) oder Lösungen ver-
öffentlichen!
* Wenn diese Zeit abgelaufen ist, werde ich einen Thread mit
passendem Titel erstellen, in dem die Lösungen gepostet werden
und diskutiert werden können.
* Die Lösungen sollten nicht nur gepostet, sondern auch an mich
gemailt werden, damit ich sie testen, "bewerten" und zu-
sammenfassen kann.
Die Adrese dafür lautet:
crian <---AT---> perl <---MINUS---> community <---DOT---> de
Im Betreff sollte 'RDW' und die Nummer des Rätsels stehen.
Hilfreich wäre neben dem Quellcode der Username im Forum
sowie Perl- und OS-Version, falls Du diese kennst.
* Verständnisfragen dürfen in diesem Thread gestellt werden, aber
Tipps und (Teil-) Lösungen sind hier unerwünscht.
* Ich werde die eingeschickten Programme im Netz zur Verfügung
stellen, so dass gerade lange Quellcodes nicht (komplett)
gepostet werden müssen.
* Zur Verwendung von Modulen: Ich möchte diese nicht generell
ausschließen, aber wenn quasi die komplette Aufgabe durch
die Verwendung eines Moduls ersetzt werden kann, ist dies
vielleicht nicht der Sinn der Aufgabe gewesen.
Aufgabe: Schreibe eine Funktion hexdump(), die Daten als Hexdump ausgibt.
~~~~~~~~
Beispiel:
hexdump("Ich bin Text");
Erzeugt folgende Ausgabe auf der Konsole:
0000: 49 63 68 20 62 69 6e 20 - 54 65 78 74 Ich bin Text
Der Aufruf
hexdump(qq~Lorem ipsum dolor sit amet, consectetuer adipiscing
elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis
nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat. Duis autem vel eum iriure
dolor in hendrerit in vulputate velit esse molestie consequat,
vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent luptatum
zzril delenit augue duis dolore te feugait nulla facilisi.\n~);
Erzeugt folgende Ausgabe auf der Konsole:
0000: 4c 6f 72 65 6d 20 69 70 - 73 75 6d 20 64 6f 6c 6f Lorem ipsum dolo
0010: 72 20 73 69 74 20 61 6d - 65 74 2c 20 63 6f 6e 73 r sit amet, cons
0020: 65 63 74 65 74 75 65 72 - 20 61 64 69 70 69 73 63 ectetuer adipisc
0030: 69 6e 67 20 65 6c 69 74 - 2c 20 73 65 64 20 64 69 ing elit, sed di
0040: 61 6d 20 6e 6f 6e 75 6d - 6d 79 20 6e 69 62 68 20 am nonummy nibh
0050: 65 75 69 73 6d 6f 64 20 - 74 69 6e 63 69 64 75 6e euismod tincidun
0060: 74 20 75 74 20 6c 61 6f - 72 65 65 74 20 64 6f 6c t ut laoreet dol
0070: 6f 72 65 20 6d 61 67 6e - 61 20 61 6c 69 71 75 61 ore magna aliqua
0080: 6d 20 65 72 61 74 20 76 - 6f 6c 75 74 70 61 74 2e m erat volutpat.
0090: 20 55 74 20 77 69 73 69 - 20 65 6e 69 6d 20 61 64 Ut wisi enim ad
00a0: 20 6d 69 6e 69 6d 20 76 - 65 6e 69 61 6d 2c 20 71 minim veniam, q
00b0: 75 69 73 20 6e 6f 73 74 - 72 75 64 20 65 78 65 72 uis nostrud exer
00c0: 63 69 20 74 61 74 69 6f - 6e 20 75 6c 6c 61 6d 63 ci tation ullamc
00d0: 6f 72 70 65 72 20 73 75 - 73 63 69 70 69 74 20 6c orper suscipit l
00e0: 6f 62 6f 72 74 69 73 20 - 6e 69 73 6c 20 75 74 20 obortis nisl ut
00f0: 61 6c 69 71 75 69 70 20 - 65 78 20 65 61 20 63 6f aliquip ex ea co
0100: 6d 6d 6f 64 6f 20 63 6f - 6e 73 65 71 75 61 74 2e mmodo consequat.
0110: 20 44 75 69 73 20 61 75 - 74 65 6d 20 76 65 6c 20 Duis autem vel
0120: 65 75 6d 20 69 72 69 75 - 72 65 20 64 6f 6c 6f 72 eum iriure dolor
0130: 20 69 6e 20 68 65 6e 64 - 72 65 72 69 74 20 69 6e in hendrerit in
0140: 20 76 75 6c 70 75 74 61 - 74 65 20 76 65 6c 69 74 vulputate velit
0150: 20 65 73 73 65 20 6d 6f - 6c 65 73 74 69 65 20 63 esse molestie c
0160: 6f 6e 73 65 71 75 61 74 - 2c 20 76 65 6c 20 69 6c onsequat, vel il
0170: 6c 75 6d 20 64 6f 6c 6f - 72 65 20 65 75 20 66 65 lum dolore eu fe
0180: 75 67 69 61 74 20 6e 75 - 6c 6c 61 20 66 61 63 69 ugiat nulla faci
0190: 6c 69 73 69 73 20 61 74 - 20 76 65 72 6f 20 65 72 lisis at vero er
01a0: 6f 73 20 65 74 20 61 63 - 63 75 6d 73 61 6e 20 65 os et accumsan e
01b0: 74 20 69 75 73 74 6f 20 - 6f 64 69 6f 20 64 69 67 t iusto odio dig
01c0: 6e 69 73 73 69 6d 20 71 - 75 69 20 62 6c 61 6e 64 nissim qui bland
01d0: 69 74 20 70 72 61 65 73 - 65 6e 74 20 6c 75 70 74 it praesent lupt
01e0: 61 74 75 6d 20 7a 7a 72 - 69 6c 20 64 65 6c 65 6e atum zzril delen
01f0: 69 74 20 61 75 67 75 65 - 20 64 75 69 73 20 64 6f it augue duis do
0200: 6c 6f 72 65 20 74 65 20 - 66 65 75 67 61 69 74 20 lore te feugait
0210: 6e 75 6c 6c 61 20 66 61 - 63 69 6c 69 73 69 2e 0a nulla facilisi..
(Diese Aufgabe stammt von Esskar.)
Ich bitte darum, dass die nicht-Golf-Lösungen folgende Regeln
beachten:
1) Falls das Programm mit Parameter gestartet wird, so wird dieser
als Dateiname interpretiert und das Ergebnis der Funktion
die den Hex-Dump erzeugt auf STDOUT ausgegeben.
2) Falls das Programm ohne Parameter gestartet wird, so wird der
zu hexdumpende Text von STDIN gelesen. Die Ausgabe erfolgt
wieder nach STDOUT.
3) Eventuell auszugebende Fehler werden nach STDERR ausgegeben.
4) Die Form der Ausgabe soll mit obigem Beispiel übereinstimmen
(falls es nicht irgendwo Tippfehler hat ;).
Um die Ergebnisse vergleichen zu können werde ich die Ausgaben
maschinell miteinander vergleichen. Dehalb bitte um die
Einhaltung dieser Regel.
5) Bitte nennt die Funktion hexdump und nicht irgendwie.
6) Es wäre schön, wenn die Golflösungen wenigstens die Verarbeitung
in der Pipe zulassen würden.
7) Es sollen keine Module verwendet werden (um use strict/warnings
wird gebeten).
(Das in 1 und 2 geforderte Verhalten ist durch einfaches Bearbeiten
des Arrays @inhalt nach
my @inhalt = <>;
gegeben.)
Ergänzungen
Die Lösung sollte auch mit Binärdateien klarkommen. (Augenmerk auf 0d!)
Zeichen < 32 sollen (auf der rechten Seite) durch Punkte ersetzt werden,
alle anderen werden direkt ausgegeben.
Auswertung RDW #3
Teilnehmer (alphabetisch nach Nickname)
- Coax
- Crian
- DS
- Esskar
- Ishka
- Kabel
- Ronnie
Teilnehmer Golf (alphabetisch nach Nickname)
- Crian
- DS
Übersicht über die normalen Lösungen
Unter Windows (getestet mit Active Perl 5.8.0):
| Name |
Beispieltext |
8 Zeichen |
Umbrüche |
binäre Datei |
| Coax |
|
|
|
|
| Crian |
ok |
ok |
ok |
ok |
| DS |
nicht ok |
nicht ok |
nicht ok |
nicht ok |
| Esskar |
ok |
(ok) |
ok |
ok |
| Ishka |
ok |
ok |
ok |
nicht ok |
| Kabel |
nicht ok |
nicht ok |
nicht ok |
nicht ok |
| Ronnie |
ok |
(ok) |
ok |
nicht ok |
(Bei Ronnie wird bei der binären Datei nicht nur das 0d nicht mit ausgegeben,
sondern auch nicht der hexadezimale Wert aller Zeichen ausgegeben. Genaueres
siehe
http://www.perl-community.de/rdw/rdw03/rdw03_auswertung_windows.txt )
Unter Linux (getestet mit Perl 5.8.1):
"(ok) bedeutet, dass die Datei zwar richtig ausgegeben wurde, aber bei einer
Zeile, wo am Ende genau acht Zeichen stehen, der Trenner ' - ' in der Mitte
trotzdem noch mit ausgegeben wird, obwohl er unnötig ist.
Coax
#!/usr/bin/perl
$|++; # Ausgabepufferung aus
use strict;
use warnings;
my($filename);
if(defined $ARGV[0]) { # wurden ein Argument uebergeben ...
if(-f $ARGV[0]) { # und ist Argument eine regulaere Datei ?
$filename = shift; # dann verwende Argument als Eingabe
}
else {
warn "No regular file specified, using standard input\n";
$filename = '-'; # verwende sonst Standardeingabe
}
} else {
$filename = '-'; # verwende Standardeingabe
}
open(FH, '<', $filename) or die $!;
binmode(FH); # behandle Datei binaer
{
local $/;
hexdump(<FH>);
}
close(FH);
sub hexdump {
my($str) = shift;
# fuer jede Ausgabezeile...
for (my($line, $offset) = (0,0); $offset < length $str; $line++, $offset += 16) {
# extrahiere 16 Zeichen langen String
my $rawdata = substr($str, $offset, 16);
# zerlege 16-Zeichen-String in 16 Hex-Werte
my @hexdata = unpack('H2' x length $rawdata, $rawdata);
# elemeniere nicht-druckbare Zeichen
$rawdata =~ s/[^[:print:]]/./g;
# unterdruecke Warnungen waehrend der Ausgabe
no warnings;
printf("%04x %-24s- %-24s %-16s\n", # formatierte Ausgabe
$offset, "@hexdata[0..7]", "@hexdata[8..15]", $rawdata);
use warnings;
}
}
Die Lösung wurde nachgereicht, deshalb steht die Auswertung noch aus.
Crian
#!/usr/bin/perl
use strict;
use warnings;
#
# Inhalt der Datei oder aus STDIN einlesen
# (unter Verwendung des Snippets von Esskar)
# und hexdump erzeugen und ausgeben:
#
if (defined $ARGV[0] and -f $ARGV[0])
{
if (open(my $fh, $ARGV[0]))
{
binmode $fh;
my $buffer;
my $len = 0;
while ($_ = read($fh, $buffer, 1024, $len)) { $len += $_ }
hexdump($buffer);
}
}
else
{
hexdump(<>);
}
sub hexdump {
my ($text) = @_;
my $count = 0;
my $hexstring;
my $textstring;
for my $char (split //, $text) {
++$count;
$hexstring .= sprintf("%02x", ord $char);
$hexstring .= ($count % 8 ? ' ' : ' - ') if $count % 16;
$textstring .= (ord $char > 31 and ord $char < 128) ? $char : '.';
#$textstring .= (ord $char > 31) ? $char : '.';
if ($count % 16 == 0) {
ausgabe($count, $hexstring, $textstring);
$hexstring = '';
$textstring = '';
}
}
$hexstring =~ s~ - $~~;
ausgabe($count, $hexstring, $textstring) unless $count % 16 == 0;
}
sub ausgabe {
my ($count, $hexstring, $textstring) = @_;
$hexstring .= ' ' x (49 - length $hexstring);
printf "%04x: %s %s\n",
int(($count-1)/16)*16,
$hexstring,
$textstring;
}
Wegen Problemen mit Sonderzeichen im XTerm gebe ich Zeichen über 127 nicht
aus. Die Zeile wo alles ab 32 ausgegeben wird ist aber noch auskommentiert im
Quellcode enthalten.
DS
#!perl
use strict;
use warnings;
local $/ = undef;
my $daten = @ARGV ? do {
open DATEI, $ARGV[0];
binmode DATEI;
<DATEI>;
} : do {
binmode STDIN;
<STDIN>;
};
&hexdump($daten);
sub hexdump {
my $string = shift;
my $pos = 0;
while ( $string =~ s/^(.{1,16})//s ) {
my $t = $1;
my $hex = sprintf '%*v02x', ' ', $t;
$hex =~ s/(?<=.{24})/- /;
$t =~ y/\0-\x1f/./;
printf "%03x0: %-52s %-16s\n", $pos++, $hex, $t;
}
}
DS schreibt im Forum zu seinem Code: Mit 5.6.1, 5.8.2, 5.8.3 und 5.8.4 geht's, nur mit 5.8.0 nicht... komisch...
Esskar
#!/usr/bin/perl
use strict;
use warnings;
if(defined $ARGV[0] and -f $ARGV[0])
{
if(open(my $fh, $ARGV[0]))
{
binmode $fh;
my $buffer;
my $len = 0;
while($_ = read($fh, $buffer, 1024, $len)){ $len += $_; }
hexdump($buffer);
}
}
else
{
hexdump(<>);
}
sub hexdump
{
my ($data) = @_;
my $len = length $data;
my $i = 0;
my $line = "";
my @asc = ();
while($i < $len or $i & 15)
{
if(($i & 15) == 0)
{
@asc = ();
$line = sprintf("%04x:", $i);
}
$line .= sprintf(" -") if ($i & 15) == 8;
if($i < $len)
{
my $c = substr($data, $i, 1);
my $o = ord($c);
$line .= sprintf(" %02x", $o);
$asc[$i & 15] = ord($c) > 31 ? $c : '.';
}
else
{
$line .= sprintf(" ");
$asc[$i & 15] = ' ';
}
if(($i & 15) == 15)
{
$line .= sprintf(" %s", join "", @asc);
print "$line\n";
}
$i++;
}
}
... und in C:
void hexdump(void *ptr, size_t len)
{
char line[100];
char asc[20];
char *lp;
size_t i = 0;
unsigned char *s = (unsigned char *)ptr;
while ((i < len) || (i & 15))
{
if((i & 15) == 0)
{
lp = line;
memset(asc, 0, sizeof(asc));
lp += sprintf(lp, "%04x:", i);
}
if ((i & 15) == 8) lp += sprintf(lp, " -");
if (i < len)
{
lp += sprintf(lp, " %02x", *s);
asc[i & 15] = *s > 31 ? *s : '.';
}
else
{
lp += sprintf(lp," ");
asc[i & 15] = 32;
}
if((i & 15) == 15)
{
lp += sprintf(lp, " %s", asc);
printf("%s\n", line);
}
i++; s++;
}
}
Ishka
Die unbekannten Zeichen werden hier als Fragezeichen und nicht als Punkte
dargestellt.
#!/usr/bin/perl
####
# Lösungsansatz:
##
# Ausgabe linear durchlaufen..
use strict;
use warnings;
### Programm
print hexdump(join '',<>);
### Ab hier nur noch Subroutinendefinition
## hexdump gibt den gewünschten Dump zurück
sub hexdump
{
my $ret='';# Rückgabewert
my $v=$_[0];# Parameter
my $links=1;# alternierende Variable für die Ausgabe - linker oder rechter Teil
my $pos=-16;# für den Positionszähler ganz links
my $zeile='';# für die direkte ausgabe ganz rechts
for($v=~m#(.{1,8})#gs){
my $i=$_;
if($links){$zeile='';
$ret.=sprintf "%04x: ",$pos+=16;
$ret.=smalldump($i);
$zeile.=$i}else{
$ret.='- ';
$ret.=smalldump($i);
$zeile.=$i;
$zeile=~s#[^a-zA-Z0-9_\.:,;/"'\#\*\+\-<>\|\[\]\(\)äöüÄÖÜß`§\$\%\&~\^° ]#?#g;# Damit keine Sonderzeichen den Dump verunstalten
$ret.=" $zeile\n"}
;$links=!$links}
$ret.=" $zeile\n" unless $links;# falls der Dump auf der Linken Seite zuende war
return $ret;
}
## smalldump macht die eigentliche Arbeit (zB. 'ci tatio' => '63 69 20 74 61 74 69 6f ')
sub smalldump
{
my $ret='';
my $p=shift;
warn "sub smalldump wird für längere dumps verwendet, als sie ausgelegt ist!\nkonstannte Länge für alle Zeilen kann nicht garantiert werden.\n" if length $p>8;
for(split //,$p){$ret.=sprintf "%02x ",ord($_)}
$ret.=' ' x (3*(8-length($p)));# Mit Leerzeichen auffüllen, falls der Eingangsstring weniger als 8 Zeichen hatte
return $ret;
}
Kabel
#!/usr/bin/perl
use strict;
# es ist nicht direkt verboten, nur geboten ;-)
use IO::Handle;
use locale; # thx@betterworld
# immer chunks mit 16 bytes einlesen
IO::Handle->input_record_separator (\16);
# kein argument => STDIN
# ein argument => einfacher hexdump
# mehr als ein argument => hexdump + angabe der datei
if (@ARGV == 0) {
my $string = "";
$string .= $_ while (<>);
hexdump ($string);
} elsif (@ARGV == 1) {
hexdump (slurpfile (@ARGV));
} else {
foreach my $file (@ARGV) {
my $filecontents = "";
open (my $data, "<$file") or die "open failed: [$file]\n";
{ local $/; $filecontents = <$data>; }
close $data;
print "$file:\n";
hexdump ($filecontents);
print "\n";
}
}
# parameter: datei zum einlesen
# liefert: skalar, in dem der dateiinhalt steht
sub slurpfile {
my $filecontents = "";
open (my $data, "<$$_[0]") or die "open failed: [$_[0]]\n";
{ local $/; $filecontents = <$data>; }
close $data;
return $filecontents;
}
# parameter: string zum hexdumpen
# liefert: nix
#
# schreibt direkt auf STDOUT
# benutzt [:print:], um nicht druckbare zeichen durch " "zu ersetzen
sub hexdump {
my $string = shift;
my $position = 0;
open (my $sstream, "<", \$string);
while (<$sstream>) {
length or next;
(length $_ < 16) and $_ .= " " x (16-length);
s/[^[:print:]]/./g;
print
sprintf ("%04x: ", $position),
join " ", (map {to_hex (ord)} split (//, substr ($_, 0, 8))),
" - ",
join " ", (map {to_hex (ord)} split (//, substr ($_, 8, 8))),
" ",
func_s($_),
"\n";
$position = $position + 16;
}
close $sstream;
}
# parameter: liste von zahlen zur basis 10
# liefert: liste von zahlen zur basis 16
sub to_hex { return sprintf ("%02x"x@_,@_) }
# parameter: string
# liefert: kopie mit newline ersetzt durch " "
sub func_s { my $s = $_[0]; $s =~ s/\n/ /g; $s }
Ronnie
#!/usr/bin/perl
use strict;
use warnings;
my $input;
{
local $/;
binmode(STDIN);
$input = <>;
}
hexdump($input);
exit;
sub as_val { return unpack('C*', shift) }
sub as_hex { return map { $_ ? sprintf("%02x", $_) : ' ' } @_ }
sub as_chr { return map { $_ ? $_>31 && $_<128 ? chr($_) : '.' : ' ' } @_ }
sub hexdump {
my @val = as_val($_[0]);
for (my $i = 0; $i < $#val; $i+=16) {
local $, = ' ';
printf "%04x: ", $i;
print as_hex(@val[$i..$i+7]),
'-',
as_hex(@val[$i+8..$i+15]),
' 'x4,
join '', as_chr(@val[$i..$i+15]),
"\n";
}
}
Übersicht über die Golf-Lösungen
Unter Windows (getestet mit Active Perl 5.8.0):
Genaueres siehe:
http://www.perl-community.de/rdw/rdw03/rdw03_auswertung_golf_windows.txt
Unter Linux (getestet mit Perl 5.8.1):
"(ok) bedeutet, dass die Datei zwar richtig ausgegeben wurde, aber bei einer
Zeile, wo am Ende genau acht Zeichen stehen, der Trenner ' - ' in der Mitte
trotzdem noch mit ausgegeben wird, obwohl er unnötig ist.
Crian (Golf)
Lösung 1:
Diese Lösung funktioniert nicht mit Binärdateien unter Windows:
$/=$\;$:=<>;$.=0;for(split//,$:){++$.;$/.=sprintf("%02x",ord$_);$/.=($.%8?' ':' - ')if$.%16;$I.=
(ord$_>31&&ord$_<128)?$_:'.';_($.,$/,$I),$/=$I=''unless$.%16;}$/=~s? - $??;_($.,$/,$I)if$.%16;sub
_{$/.=$"x(49-length$/);printf"%04x: %s %s\n",int(($.-1)/16)*16,$/,$I;}
Lösung 2:
Diese Lösung funktioniert auch mit Binärdateien unter Windows,
ist dafür aber nicht ganz so schön:
$/=$\;$.=0;@_=@ARGV;if(defined$_[0]&&-f$_[0]){if(open($f,$_[0])){binmode$f;
while($r=read($f,$:,1024,$l)){$l+=$r}}}else{$:=<>}for(split//,$:){++$.;$/.=
sprintf("%02x",ord$_);$/.=($.%8?' ':' - ')if$.%16;$I.=(ord$_>31&&ord$_<128)
?$_:'.';_($.,$/,$I),$/=$I=''unless$.%16;}$/=~s? - $??;_($.,$/,$I)if$.%16;sub
_{$/.=$"x(49-length$/);printf"%04x: %s %s\n",int(($.-1)/16)*16,$/,$I;}
Wegen Problemen mit Sonderzeichen im XTerm gebe ich Zeichen über 127 nicht
aus.
DS (Golf)
Diese Golf-Lösung ist sehr schön kurz, verarbeitet aber "nur" von STDIN,
nicht aus angegebenen Dateinamen:
binmode STDIN;($.=sprintf'%*v02x',$",$_)=~s/.{24}/$&- /,y/\0-\x1f/./,printf"%03x0: %-53s$_\n",$p++,$.while read STDIN,$_,16
Allerdings sieht die Ausgabe unter Windows mit Active Perl 5.8.0 leider so aus:
...\rdw\rdw03>type hexdump.png | perl rdw03_ds_golf.pl
0000: %*v02x ëPNG........IHDR
0010: %*v02x ...û...û.....+/l
0020: %*v02x Ð...$PLTE ...¶
0030: %*v02x -+¦I4Ûùï´¦¿¨ÕÔÓc
0040: %*v02x QÕ}n´ )...Í0.7.)
0050: %*v02x µ....tRNS.7ßÞ..
0060: %*v02x .ÒIDATx£ÝʦN+0.F
0070: %*v02x aïʦÆ.àÑÛ+àØÑ.K.
0080: %*v02x .&.È5[+u+- Êbñ Õ
0090: %*v02x ©7...ÎÛt¥-±td;7Ñ
00a0: %*v02x øYùùj¡VÅiZØÌ½Áñ-
00b0: %*v02x °mNù.¡Å1i+~+¦iJ.
00c0: %*v02x .lj¦-.-¡/[{iêÝ+Á
00d0: %*v02x ¦î+X+:}·rÖ×ý.j§
00e0: %*v02x û¦cÝm¦¦*íÍôåöþãØ
00f0: %*v02x .j=ÏÖ¦¯Ë.[o6°yܦ
0100: %*v02x ÈÏ.#.÷Óy£.ƒ¦´Pk-
0110: %*v02x ò¼ß+»¦_³/ƒ°¼_¹P
0120: %*v02x -¦]Y¯µÈ6ö¦..+iy=
0130: %*v02x R9.S............
0140: %*v02x ..³+..Úc:¯.Ç5...
0150: %*v02x .IEND«B`é
...\rdw\rdw03>type rdw03_beispiel.txt | perl rdw03_ds_golf.pl
0000: %*v02x Lorem ipsum dolo
0010: %*v02x r sit amet, cons
0020: %*v02x ectetuer adipisc
0030: %*v02x ing elit, sed di
0040: %*v02x am nonummy nibh
0050: %*v02x euismod tincidun
0060: %*v02x t ut laoreet dol
0070: %*v02x ore magna aliqua
0080: %*v02x m erat volutpat.
0090: %*v02x Ut wisi enim ad
00a0: %*v02x minim veniam, q
00b0: %*v02x uis nostrud exer
00c0: %*v02x ci tation ullamc
00d0: %*v02x orper suscipit l
00e0: %*v02x obortis nisl ut
00f0: %*v02x aliquip ex ea co
0100: %*v02x mmodo consequat.
0110: %*v02x Duis autem vel
0120: %*v02x eum iriure dolor
0130: %*v02x in hendrerit in
0140: %*v02x vulputate velit
0150: %*v02x esse molestie c
0160: %*v02x onsequat, vel il
0170: %*v02x lum dolore eu fe
0180: %*v02x ugiat nulla faci
0190: %*v02x lisis at vero er
01a0: %*v02x os et accumsan e
01b0: %*v02x t iusto odio dig
01c0: %*v02x nissim qui bland
01d0: %*v02x it praesent lupt
01e0: %*v02x atum zzril delen
01f0: %*v02x it augue duis do
0200: %*v02x lore te feugait
0210: %*v02x nulla facilisi..
0220: %*v02x .
Im Gegensatz zu
...\rdw\rdw03>rdw03_crian_golf2.pl hexdump.png
0000: 89 50 4e 47 0d 0a 1a 0a - 00 00 00 0d 49 48 44 52 .PNG........IHDR
0010: 00 00 00 96 00 00 00 96 - 04 03 00 00 00 ce 2f 6c ............../l
0020: d1 00 00 00 24 50 4c 54 - 45 ff ff ff 00 00 00 f4 ....$PLTE.......
0030: cb c5 db 49 34 ea 97 8b - ef b1 a8 f9 e5 e2 e0 63 ...I4..........c
0040: 51 e5 7d 6e ef ff 29 00 - 00 00 d6 30 18 37 12 29 Q.}n..)....0.7.)
0050: e6 00 00 00 01 74 52 4e - 53 01 37 e1 e8 f0 00 00 .....tRNS.7.....
0060: 00 e3 49 44 41 54 78 9c - ed d2 b1 4e c3 30 14 46 ..IDATx....N.0.F
0070: 61 8b d2 b4 92 1f 85 a5 - ea da 85 9d a5 13 4b 16 a.............K.
0080: 16 26 16 d4 35 5b 2b 75 - c9 cb 20 d2 62 a4 ff e5 .&..5[+u.. .b...
0090: b8 37 09 0f 00 d7 ea 74 - be c1 f1 74 64 3b 37 a5 .7.....t...td;7.
00a0: 9b 59 97 97 6a ad 56 8f - d5 5a 9d de ab b5 a4 cd .Y..j.V..Z......
00b0: f8 6d 4e 97 0a ad 8f 31 - d5 2b 7e d9 b9 d5 4a 0a .mN....1.+~...J.
00c0: 1f 6c 6a dd cb 1d c2 ad - 2f 5b 7b d5 88 ed bc b5 .lj...../[{.....
00d0: b2 8c bf 58 f0 c9 3a 7d - fa 72 99 9e ec 1a 6a f5 ...X..:}.r....j.
00e0: 96 b1 63 ed 6d db b4 2a - a1 d6 93 86 94 e7 c6 9d ..c.m..*........
00f0: 14 6a 3d d8 99 b2 df d3 - 05 5b 6f 36 f8 79 9a b1 .j=......[o6.y..
0100: d4 d8 19 23 16 f6 e0 79 - 9c 0b 9f b2 ef 50 6b 2d ...#...y.....Pk-
0110: 95 ac e1 d9 b6 af dd dc - fc 2f 9f f8 ac 5f fb 50 ........./..._.P
0120: cb fe 5d 59 ee e6 d4 36 - 94 b2 01 1b ce 69 79 f2 ..]Y...6.....iy.
0130: 52 39 06 53 00 00 00 00 - 00 00 00 00 00 00 00 00 R9.S............
0140: 00 00 fc c9 0f 15 e9 63 - 3a ee 06 80 35 00 00 00 .......c:...5...
0150: 00 49 45 4e 44 ae 42 60 - 82 .IEND.B`.
Dateien
normale Lösungen
Golf-Lösungen
Testdateien
Auswertungen
--
ChristianDuehl - 23 Jul 2004
--
ChristianDuehl - 26 Jul 2004
--
ChristianDuehl - 27 Jul 2004