0. Name und E-Mail

Rolf Jentsch
rolf.jentsch at online.de


1. Systemumgebung
Linux. (Kernel 2.4.x)
Das eingereichte Programm ist statisch gelinkt, es sollte also keinerlei
Probleme mit Bibliotheksversionen geben.

2. Aufruf des Programms

puzzle 
- Ermittelt die Anzahl aller Lsungen fr das ct-puzzle, und gibt diese aus.

puzzle --nur1
- Schrnkt die Ausgangsdaten so ein, das das erste Teil genau an einer
Position und in einer Orientierung vorkommen kann. Alle anderen Teile
drfen an dieser Stelle nicht plaziert werden. Dadurch wird die Anzahl
der Lsungen auf 3637 eingeschrnkt. Interessant fr Laufzeitabschtzungen.

puzzle --dump
- Sucht alle Lsungen und gibt sie nach stdout aus.

puzzle --logo
- Schrnkt die Ausgangsdaten so ein, das nur Lsungen gefunden werden, die
das c't Logo korrekt darstellen (knnen). Die Lsung wird ausgegeben (--dump).

3. Ausgabe der Lsungen:
Wenn angefordert wird jede Lsung als eine Textzeile ausgegeben:

fffgg hcccc hjidk bdddd  hfegg hceek jjiik bbbik  hfelg aaell ajjlk aabll

Die Daten werden von links nach rechts, von hinten nach vorne und von unten
nach oben ausgegeben. Die Buchstaben a bis l sind den Teilen wie im
c't Artikel von links nach rechts zugeordnet.

fffgg  Unterste Ebene, von oben gesehen
hcccc
hjidk
bdddd

hfegg  Mittlere Ebene
hceek
jjiik
bbbik

hfelg  Oberste Ebene, a, e und l bilden das c't Logo
aaell
ajjlk
aabll

4. Algorithmus
Brute force.

Der Quader wird von oben vorne rechts nach unten hinten links aufgefllt.
Die Bitpositinen werden dabei von 59 auf 0 gezhlt - also rckwrts. 

Dabei wird immer die Lcke mit der hchsten freien Bitposition geschlossen.

5. Alles nur geklaut (?)
Die Art, wie die Teilepositionen verwaltet werden, und damit die Art, wie
die Abarbeitung erfolgt, entstammen der Musterlsung von EPSILON.

Mein ursprnglicher Ansatz war ein Array mit 60 x 12 x 24 Elementen, aber
das war deutlich langsamer.

Ansonsten sind die Sourcen ein bischen kommentiert.

6. Programm und Sourcen
Ein make im Sourceverzeichnis erzeugt eine Datei puzzle-neu. Diese Datei
weicht dahingehend von der eingereichten Datei puzzle ab, das sie ohne
profiling-Optionen erzeugt wird.

7. Compiler
Als Compiler habe ich den gcc verwendet:
gcc (GCC) 3.3 20030226 (prerelease) (SuSE Linux)

