Thread RDW #3 - Rätsel der Woche Nr. 3 (73 answers)
Opened by Crian at 2004-07-23 13:33

Crian
 2004-07-23 13:33
#84809 #84809
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
 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.)  


Ich werde heute Abend eine Textdatei mit dem Inhalt des obigen Beispiels auf den Server laden und dann hier Bescheid geben.

Fieser Weise ist meine Lösung schon fertig, und esskars wohl auch ;-)

Aber am Golf werd ich noch basteln 8)

Wenn ich meine C-Lösung wiederfinde, poste ich die Montag auch noch, ich hab sowas früher schonmal programmiert :-)

Den letzten Teil in Klammern bitte ich jetzt hier nicht zu diskutieren, ich weiß dazu könnte man dies oder das sagen, aber vielleicht ist es ja Absicht, dass es dort so steht und nicht anders.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread RDW #3 - Rätsel der Woche Nr. 3