Kurzer Prozess: Size Contest bei SPOJ

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

numerix hat geschrieben:@bords0: Deinen Trick verstehe ich nicht ...
Inzwischen habe ich festgestellt, dass Python ja auch negative Zahlen mit %4 in den Bereich von 0-3 abbildet - prima, dann ist es schnuppe, wie viele Operanden es gibt, und man kann bei 0 anfangen.

Der "Trick" war ja nur, N+=(4-p)%4 durch N+=p%4 zu ersetzen, indem man p runterzählt statt hoch.
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

BlackJack hat geschrieben:@numerix: Hab' Dich eingeholt. :-)
Eine kleine Frage: iterierst du über die Zeichen von raw_input(), oder machst du es anders? (Meine Experimente mit re.split waren entmutigend...)
BlackJack

Ein ganz banales ``for c in raw_input():``.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Mal Offtopic:
https://www.spoj.pl/problems/KAMIL/
Da gibt's Pythonlösungen mit der Länge 53, ich hab aber keine Ahnung, wie man das schaffen könnte.
Meine 75 lange Version:

Code: Alles auswählen

for i in range(10):
  print 2**sum([1 for x in raw_input() if x in 'TDLF'])
Wo könnte man hier noch Zeichen einsparen? Irgendeinen Trick muss es ja geben :) Oder muss man die Sache ganz anders angehn? Regex wäre zB kürzer aber das `import re` ist dann auch wieder 9 Zeichen lang.
Wenn mir jetzt jemand eine Lösung präsentiert oder mir einen entscheidenden Tipp gibt, werd ich das auch nicht als meine eigene Lösung dort absenden, mich interessiert's nach einer halben Stunde ausprobieren alternativer Lösungen einfach mal. Naja bzw. wie Numerix schon sagte, kann man ja abwägen wie hoch der Anteil desjenigen ist, der die Vorlage/Idee geliefert hat und wie hoch der Eigenanteil ist ;)
BlackJack

Also die ganz offensichtlichen überflüssigen Zeichen wären erst einmal ein Leerzeichen am Anfang von Zeile 2 und die eckigen Klammern in der Summe. In Python 2.5 gibt's schon Generator-Ausdrücke.

Das nächste Einsparungspotential ist die literale 1 und das ``if``. Man kann nämlich mit Wahrheitswerten rechnen. Die erben von `int` und `True` hat den Wert 1 und `False` den Wert 0.

Damit wären wir bei:

Code: Alles auswählen

for i in range(10):
 print 2**sum(x in 'TDLF' for x in raw_input())
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Hm, stimmt, das Leerzeichen und die Klammern sind eigentlich schon fast zu offensichtlich :)
Das mit den Wahrheitswerten war mir zwar bewusst, aber auf die Idee, mir das hier zunutze zu machen, bin ich nicht gekommen.
Aber auf 53 kommt man damit immer noch nicht oder? :o Da würde mir jetzt echt nichts mehr einfallen aber vielleicht ist das ja auch von Grund auf der falsche Ansatz.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Geil... Codegolf im dt. Python-Forum und ich sehs erst jetzt... :cry:
BlackJack

@Nocta: Also ich bin jetzt mit diesem Ansatz runter auf 59 Bytes. Wo ich da noch 6 Bytes rausquetschen soll, sehe ich nicht. :-(

Also muss es wohl noch einen anderen Ansatz geben.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

@nocta: Ich bin mit deinem Ansatz bei 56. Da geht noch was...

EDIT: Korrigiere: 55
EDIT2: 54, hmm ein Zeichen fählt noch... :?:
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

HerrHagen hat geschrieben:Geil... Codegolf im dt. Python-Forum und ich sehs erst jetzt... :cry:
Ich wollt mal fragen, was daran eigentlich so traurig ist. Ich meine, man lernt in jedem Fall was dazu.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Mal was andres:
Wie lang würdet ihr denn durchschnittlich an sowas sitzen, ohne Absprache im Forum?
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Ich wollt mal fragen, was daran eigentlich so traurig ist. Ich meine, man lernt in jedem Fall was dazu.
Traurig ist, dass ich es erst jetzt gesehen hab! Ich mag Code-Golf. Wenn ich es nicht mögen würde, hätte ich mich wohl kaum mit 54 Zeichen beteiligt...
Zuletzt geändert von HerrHagen am Sonntag 22. Februar 2009, 21:54, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Craven hat geschrieben:Wie lang würdet ihr denn durchschnittlich an sowas sitzen, ohne Absprache im Forum?
Die Absprache macht es doch erst spaßig. Hacker-Community-Denken eben :)

Andererseits, ich beteilige mich gar nicht am Codegolf.. da spiele ich lieber mit anderen, ebenso unnützen Sachen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Sooo, nun habe ich auch eine 54 Byte-Lösung.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Ich hab vielleicht noch nicht lang genug mit Python rumgespielt um intuitiv irgendwelche 10byte kürzere Lösungen zu finden.
Wie kommt ihr mit meinem Ansatz noch weiter runter? Ihr könnt mir ja mal einen Tipp geben wenn ihr nicht bereit seid, eure Lösungen zu veröffentlichen :)
Irgendwie steh ich auf Wettbewerbe in denen ich schlecht bin :lol:
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

So, die 53 steht da...
Ab jetzt wirds schwer...
Mich würde mal der Ansatz von fxr interessieren. Sein Programm läuft viel länger. Er muss einen anderen Weg gegangen sein.

MFG HerrHagen
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

HerrHagen hat geschrieben:So, die 53 steht da...
Du machst mir Angst ... :wink:
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Perl ist schon ein bisschen extrem, oder? Mit 24 Zeichen ...
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Perl ist ja auch nur ein Synonym für line noise :twisted:
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

BlackJack hat geschrieben:Sooo, nun habe ich auch eine 54 Byte-Lösung.
Ich hab jetzt auch eine. 53.

Code: Alles auswählen

# Code auf Wunsch von numerix und HerrHagen entfernt
Zuletzt geändert von hendrikS am Montag 23. Februar 2009, 12:00, insgesamt 1-mal geändert.
Antworten