Seite 1 von 1

Code Golf

Verfasst: Mittwoch 23. Januar 2008, 13:03
von Craven
Bei Code Golf geht es darum, vorgegebene Aufgaben zu lösen, aber im Gegensatz zu Seiten wie SPOJ muss man dies mit möglichst kleinen Programmen erreichen. D.h. Faktoren wie Arbeitsspeicherverbrauch, Ausführungszeit, etc. spielen keine Rolle.
Zugelassen sind 4 Sprachen: Perl, Php, Ruby und Python.

Ich werde mich mal dran versuchen, aber meine Code-Obfuscating-Fähigkeiten sind eher mager. ;)

Gruß, Craven

Re: Code Golf

Verfasst: Mittwoch 23. Januar 2008, 13:14
von mkesper
Cravens Signatur hat geschrieben:

Code: Alles auswählen

q = "q = %s; print q %% `q`"; print q % `q`

Code: Alles auswählen

>>> q = "q = %s; print q %% `q`"; print q % `q`
q = 'q = %s; print q %% `q`'; print q % `q`
>>> q
'q = %s; print q %% `q`'
>>> print q
q = %s; print q %% `q`
Sorry, ich verstehe den Witz nicht ganz...

Re: Code Golf

Verfasst: Mittwoch 23. Januar 2008, 13:19
von Craven
mkallas hat geschrieben:Sorry, ich verstehe den Witz nicht ganz...
Da ist kein Witz dabei.

Verfasst: Mittwoch 23. Januar 2008, 13:58
von BlackJack
@mkallas: Der Witz dabei ist, das es sich um ein Quine handelt. Ein Quelltext, der als Programm ausgeführt sich selbst ausgibt.

Verfasst: Mittwoch 23. Januar 2008, 14:14
von Craven
Ah, jetz verstehe ich was er gemeint hat. ;)

Naja, es ist mehr ein Pseudoquine, da die " als ' ausgegeben werden.

Code: Alles auswählen

>>> q = "q = %s; print q %% `q`"; print q % `q`
q = 'q = %s; print q %% `q`'; print q % `q`
Das schweift aber etwas vom Thema ab.

Gruß, Craven

Verfasst: Mittwoch 23. Januar 2008, 14:33
von BlackJack
Naja, dann änder halt die " im Quelltext in ' um.

Verfasst: Mittwoch 23. Januar 2008, 14:43
von Craven
BlackJack hat geschrieben:Naja, dann änder halt die " im Quelltext in ' um.
Das geht natürlich.
Mir gefallen da nur die ` nicht; wenn ich stattdessen ' schreibe, muss ich die " am Anfang stehen lassen oder es gibt einen Fehler aus, da der String dann als zu Ende betrachtet wird.

Verfasst: Mittwoch 23. Januar 2008, 15:06
von BlackJack
Häh? Wenn man einfach die beiden " durch ' ersetzt, ändert sich doch sonst an dem Programm nichts:

Code: Alles auswählen

In [95]: q = 'q = %s; print q %% `q`'; print q % `q`
q = 'q = %s; print q %% `q`'; print q % `q`
Wenn Du die Backticks nicht magst, kannst Du sie durch `repr()` ersetzen. Dann ist das Quine zwar nicht mehr so kurz, aber zukunfstsicherer, da die Backticks in Python 3.0 wegfallen werden.

Code: Alles auswählen

In [96]: q = 'q = %s; print q %% repr(q)'; print q % repr(q)
q = 'q = %s; print q %% repr(q)'; print q % repr(q)

Verfasst: Mittwoch 23. Januar 2008, 15:13
von Craven
BlackJack hat geschrieben:Wenn Du die Backticks nicht magst, kannst Du sie durch `repr()` ersetzen. Dann ist das Quine zwar nicht mehr so kurz, aber zukunfstsicherer, da die Backticks in Python 3.0 wegfallen werden.

Code: Alles auswählen

In [96]: q = 'q = %s; print q %% repr(q)'; print q % repr(q)
q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Das habe ich gemeint, auf repr() bin ich nicht gekommen. Danke.

Zu Code Golf:
Im Prinzip ist Python doch eher ungeeignet dafür, ausser man benutzt lambda, List Comprehensions, etc. um die 'normale' Syntax zu umgehen.
Zumindest schaffe ich es nicht, meinen Code auf andre Weise nennenswert kürzer zu machen.
Was meint ihr?

Verfasst: Mittwoch 23. Januar 2008, 16:14
von BlackJack
Naja, das ist ja der Sinn von Code Golf, dass ganze so unleserlich kurz wie möglich zu machen. ;-)

Verfasst: Dienstag 10. Juni 2008, 11:11
von n4p
Schön, dass es hier nen Thread dazu gibt.
Ich hab auch mal ein bisschen probiert.

Hier, aber bin nicht mal annähernd in die Gegend gekommen.
Hat jemand Lust mal seinen Ansatz zu posten?

Grüße