Seite 5 von 7
Verfasst: Sonntag 17. Februar 2008, 14:24
von numerix
Mit Haskell bin ich auf 104 Zeichen gekommen.
Mein neues Gebot:
Python-Programm mit 98 Zeichen!
Verfasst: Sonntag 17. Februar 2008, 14:32
von DarXun
Ihr seid doch Freaks >.<
@Topic:
Mich würde mal interessieren was jetzt aus Applegreen und dem Rest des Kurses, sowie natürlich auch der Aufgabe geworden ist...
Also ich bin z.Z. auch noch in der 10. Klasse... Aber sooo schwer war's dann doch wirklich nicht, darauf zu kommen mal den Satz des Pythagoras anzuwenden o.o
Verfasst: Sonntag 17. Februar 2008, 15:42
von BlackJack
@pütone: Kürzer als 101 Zeichen bekomme ich meinen Ansatz nicht.
Hey, aber das ist ja sowieso alles "Betrug" weil da so ein riesen fetter Python-Interpreter dranhängt. Es geht auch mit 19 Bytes statischen Daten und 98 Bytes x86-Assembler:
http://paste.pocoo.org/show/28359/ (Assembler: NASM, BS: Linux)
@DarXun: Wieso Freaks!? Ist das nicht normal. Hihi

Verfasst: Sonntag 17. Februar 2008, 15:50
von DarXun
Hmm... okay... Ich nehm' das Freaks zurück ;D
Wir sollten im Informatik-Unterricht Funktionen zum Entschlüsseln und Verschlüsseln ( Morsecode) schreiben...
Bin immernoch dabei die Funktion weiter zukürzen...
Die letzte Info-Stunde war am Donnerstag
Naja... hab eh' den kürzesten Quellcode.
Meine Mitschüler könnens nämlich überhaupt nich x'D,
dass sieht man schon wenn man sich die Funktionen von denen anschaut...
Für jeden Buchstaben im Alphabet eine Abfrage... x_X
Als hätten die von Schleifen und Arrays nie was gehört...
PS: Das Schlimmste an der Aufgabe war wohl immernoch das eintippen der ganzen Morsezeichen -.-
Verfasst: Sonntag 17. Februar 2008, 15:55
von meneliel
BlackJack hat geschrieben:
Hey, aber das ist ja sowieso alles "Betrug" weil da so ein riesen fetter Python-Interpreter dranhängt. Es geht auch mit 19 Bytes statischen Daten und 98 Bytes x86-Assembler:
http://paste.pocoo.org/show/28359/ (Assembler: NASM, BS: Linux)
:S ... da versteh ich ja mal gaaaaaaar nix
irgendwann würden mich eure Lösungsideen dann ja auch mal interessieren

ich vermute, die gibt es aber erst, wenn apple ne Lösung gepostet hat, oder?

Verfasst: Sonntag 17. Februar 2008, 16:43
von Leonidas
DarXun hat geschrieben:Meine Mitschüler könnens nämlich überhaupt nich x'D,
dass sieht man schon wenn man sich die Funktionen von denen anschaut...
Für jeden Buchstaben im Alphabet eine Abfrage... x_X
Dann sind sie ja
enterprise-ready.

Verfasst: Sonntag 17. Februar 2008, 19:00
von HWK
BlackJack hat geschrieben:Hey, aber das ist ja sowieso alles "Betrug" weil da so ein riesen fetter Python-Interpreter dranhängt. Es geht auch mit 19 Bytes statischen Daten und 98 Bytes x86-Assembler:
http://paste.pocoo.org/show/28359/ (Assembler: NASM, BS: Linux)
könnte man durch
ersetzen. Das würde noch 1 Byte sparen.
MfG
HWK
Verfasst: Sonntag 17. Februar 2008, 19:25
von BlackJack
@meneliel: Assembler ist gar nicht so schwer. Das schwierigste ist eigentlich, dass es so einfach ist, sprich man hat nur so ganz primitive Werkzeuge/Bausteine aus denen man die Lösung zusammen setzen kann.
Programming from the Ground Up soll angeblich ein ganz gutes (freies) Buch sein. Eine Einführung ins Programmieren. Mit Assembler unter Linux.
@HWK: Das spart kein Byte weils ein 16-Bit-MOV im 32-Bit-Modus ist und deshalb ein 0x66-Byte vor den Befehl geklatscht wird. Unter DOS hätte das was gebracht, bei modernen Betriebssystemen nicht mehr. Früher war halt alles besser.

Verfasst: Sonntag 17. Februar 2008, 21:24
von HWK
BlackJack hat geschrieben:@HWK: Das spart kein Byte weils ein 16-Bit-MOV im 32-Bit-Modus ist und deshalb ein 0x66-Byte vor den Befehl geklatscht wird. Unter DOS hätte das was gebracht, bei modernen Betriebssystemen nicht mehr. Früher war halt alles besser.

Stimmt!
Da wird einmal mehr das unglückliche Design der x86-Prozessoren deutlich.
Edit @BlackJack: Wäre aus demselben Grund dann z.B. in Zeile 42
nicht 1 Byte kürzer?
Verfasst: Sonntag 17. Februar 2008, 23:44
von BlackJack
@HWK: Stimmt, Danke! Das ``lea`` war auch unnötig komplex und beim "exit" habe ich ein ``mov eax, 1`` vergessen "kürzer" zu schreiben. Nun ist der Code-Teil auf 94 Bytes runter.
http://paste.pocoo.org/show/28484/
Verfasst: Montag 18. Februar 2008, 12:33
von Y0Gi
BlackJack hat geschrieben:Code: Alles auswählen
import sys;w=sys.stdout.writelines;w('P3 90 60 1 ');N=[45-int((324-y*y)**.5)
for y in range(18)]+[45]*12;w('1 %d %d '%(x,x) for x in
sum(([1]*n+[0]*(45-n)*2+[1]*n for n in N[::-1]+N),[]))
Ist sogar etwas kürzer (in Zeichen) als die letzte Version mit der "statischen" Liste.

Warum werden eigentlich die Semikolonse (;)) verwendet und keine Zeilenumbrüche? Wenn man von Newlines ausgeht, sind die auch nur ein Byte groß, aber der Code ist wesentlich lesbarer (wenngleich er sich natürlich in der Vertikalen über mehr Zeilen erstreckt).
Verfasst: Montag 18. Februar 2008, 12:52
von BlackJack
Es ging hier nicht um lesbar, sondern ob Japaner das Ding als E-Mail-Signatur verwenden können.
("Newlines" zähle ich übrigens bei den Längenangaben immer mit)
Verfasst: Montag 18. Februar 2008, 13:04
von Y0Gi
OK, für diesen konkreten Fall lasse ich das natürlich gelten

Verfasst: Montag 18. Februar 2008, 13:34
von HWK
BlackJack hat geschrieben:@HWK: Stimmt, Danke! Das ``lea`` war auch unnötig komplex und beim "exit" habe ich ein ``mov eax, 1`` vergessen "kürzer" zu schreiben. Nun ist der Code-Teil auf 94 Bytes runter.
http://paste.pocoo.org/show/28484/
Und weil es soviel Spaß macht:
Zeile 32, 55 und 69 zu
bzw.
und Zeile 56 zu
Und in Zeile 45 müsste auch
funktionieren. Das alles spart wieder 5 Bytes, d.h. Code-Länge unter 90.
Verfasst: Montag 18. Februar 2008, 14:12
von BlackJack
Mit push/pop auf das 32-Bitregister sind's nochmal zwei Byte weniger = 87 Bytes Code.
http://paste.pocoo.org/show/28606/
Verfasst: Montag 18. Februar 2008, 14:21
von HWK
@BlackJack: Hier Dein Programm für 16-Bit-Windows angepasst:
http://paste.pocoo.org/show/28610/. Es liefert mit Turbo-Assembler ein COM-File von insgesamt (!) 86 Byte. Ach, die gute alte Zeit.
Verfasst: Montag 18. Februar 2008, 15:50
von numerix
meneliel hat geschrieben:
irgendwann würden mich eure Lösungsideen dann ja auch mal interessieren
ich vermute, die gibt es aber erst, wenn apple ne Lösung gepostet hat, oder?
Ich glaube nicht, dass der Apfel von dieser Art der Lösung profitieren könnte;
verstehen wird er sie nicht, und dem Lehrer kann er sie so auch nicht anbieten,
weil der ebenfalls sofort sieht, dass sie nicht vom Apfel sind.
Ich hatte aber darauf gehofft, dass der ein oder andere noch einsteigt in das Rennen um den kürzesten PYTHON(!)-Quelltext zum Ausgangsproblem.
Nach der vorübergehenden Faszination am Assembler-Quelltext, könnte man ja nochmal zu Python zurückkehren. Wenn ich nichts übersehen habe, dann steht man letztes Gebot noch (98 Bytes).
Interessanterweise musste ich am Ende auf List Comprehension verzichten, um die 100 Byte-Marke knacken zu können. Das 98-Byte-Programm kommt sogar ganz ohne Liste aus und verwendet nur einfache Datentypen und grundlegende Kontrollstrukturen - alles Dinge, die man in einem Tutorial auf den ersten Seiten findet.
Verfasst: Montag 18. Februar 2008, 16:03
von BlackJack
Interessanter Tip das mit den LCs. Ich bin jetzt bei 97 Zeichen.
Und ich glaube schon, das applegreen mittlerweile von dieser Lösung profitieren könnte. Die ist jetzt so einfach, dass man sie durchaus etwas ausführlicher hinschreiben könnte und eine auch für Lehrer akzeptable Lösung hat.
Verfasst: Montag 18. Februar 2008, 16:54
von meneliel
pütone hat geschrieben:
....
Ich glaube nicht, dass der Apfel von dieser Art der Lösung profitieren könnte;
verstehen wird er sie nicht, und dem Lehrer kann er sie so auch nicht anbieten,
weil der ebenfalls sofort sieht, dass sie nicht vom Apfel sind.
Ich hatte aber darauf gehofft, dass der ein oder andere noch einsteigt in das Rennen um den kürzesten PYTHON(!)-Quelltext zum Ausgangsproblem.
der Apfel vielleicht nicht ... ^^^ .. aber ...
Ich hatte auch schon überlegt, mir das jezt auch mal anzugucken, mir fehlt nur leider im Moment die Zeit dazu

Verfasst: Montag 18. Februar 2008, 20:23
von numerix
BlackJack hat geschrieben:Ich bin jetzt bei 97 Zeichen.
Es ist schon erstaunlich, was möglich ist, wenn man über ein (in diesem Fall doch sehr überschaubares) Problem länger nachdenkt ...
Jedesmal war ich mir sicher, dass weniger einfach nicht geht.
Und wieder lag ich damit falsch:
Mein neues Gebot: 95 Zeichen.