Der 21. C7 (Chaos Communication Congress Compact C Coding Contest) ist angelaufen und mal wieder geht es darum einen Quellcode in C möglichst kompakt zu gestalten ohne die Funktionalität zu ändern. Leserlich muss das Ergebnis nicht mehr sein, es kommt nur darauf an möglichst wenige Bytes zu verwenden, das Ding muss aber trotzdem noch mit GCC 3.3.x im C99-Mode kompilieren sowie natürlich korrekt funktionieren.
Diesmal geht es um UUEncode im base64-Modus, der von stdin liest und nach stdout schreibt. Eine sehr kleine Beispielimplementierung ist bereits vorgegeben und sollte als Grundlage für's weitere Arbyten dienen.
Allgemeine Beispiele zum typischen Vorgehen bei solchen Aufgaben wurde in der Datenschleuder #82 vorgestellt, sollten aber soweit klar sein. Inlinen, Modifizieren von for-Schleifenparametern, Pre- und Post-Inkrements, Vereinfachen von Formeln, Verändern von Variablenbelegungen, ?: statt if-else, Verändern von Bedingungen, andere Kodierungen, Generieren von Sequenzen, Kürzungen oft verwendeter Konstrukte mit #define, Kürzungen von Variablennamen, Entfernen unnötigen Deklarationen und Zuweisungen und Kommentare sowie natürlich Löschen von Leerzeichen und Zeilenumbrüchen. Nicht notwendigerweise in dieser Reihenfolge.
Also ich hab den 1797 Byte großen Originalcode schon auf 417 Byte runtergestutzt (nein, ich poste es nicht, sonst macht mir noch jemand Konkurrenz). Und lesen kann man das so nicht mehr. Also dann, man sieht sich beim 21C3 (hoffentlich). Und immer schön den Schimmel im Auge behalten... äh, ich meine natürlich den Himmel.
Dieser Beitrag wurde von Rika bearbeitet: 25. Dezember 2004 - 15:29