Code Golf

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

Code Golf

Beitragvon Craven » Mittwoch 23. Januar 2008, 13:03

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: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Re: Code Golf

Beitragvon mkesper » Mittwoch 23. Januar 2008, 13:14

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

Re: Code Golf

Beitragvon Craven » Mittwoch 23. Januar 2008, 13:19

mkallas hat geschrieben:Sorry, ich verstehe den Witz nicht ganz...

Da ist kein Witz dabei.

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
BlackJack

Beitragvon BlackJack » Mittwoch 23. Januar 2008, 13:58

@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

Beitragvon Craven » Mittwoch 23. Januar 2008, 14:14

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: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
BlackJack

Beitragvon BlackJack » Mittwoch 23. Januar 2008, 14:33

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

Beitragvon Craven » Mittwoch 23. Januar 2008, 14:43

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: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
BlackJack

Beitragvon BlackJack » Mittwoch 23. Januar 2008, 15:06

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

Beitragvon Craven » Mittwoch 23. Januar 2008, 15:13

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: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
BlackJack

Beitragvon BlackJack » Mittwoch 23. Januar 2008, 16:14

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

Beitragvon n4p » Dienstag 10. Juni 2008, 11:11

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder