Code Golf

Gute Links und Tutorials könnt ihr hier posten.
Antworten
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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
Zuletzt geändert von Craven am Freitag 16. Januar 2009, 13:41, insgesamt 1-mal geändert.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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...
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

mkallas hat geschrieben:Sorry, ich verstehe den Witz nicht ganz...
Da ist kein Witz dabei.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
BlackJack

@mkallas: Der Witz dabei ist, das es sich um ein Quine handelt. Ein Quelltext, der als Programm ausgeführt sich selbst ausgibt.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
BlackJack

Naja, dann änder halt die " im Quelltext in ' um.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
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)
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

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?
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
BlackJack

Naja, das ist ja der Sinn von Code Golf, dass ganze so unleserlich kurz wie möglich zu machen. ;-)
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

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
Antworten