Seite 4 von 7

Verfasst: Samstag 21. Februar 2009, 19:29
von bords0
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.

Verfasst: Samstag 21. Februar 2009, 19:33
von bords0
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...)

Verfasst: Samstag 21. Februar 2009, 20:22
von BlackJack
Ein ganz banales ``for c in raw_input():``.

Verfasst: Sonntag 22. Februar 2009, 12:45
von Nocta
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 ;)

Verfasst: Sonntag 22. Februar 2009, 13:12
von 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())

Verfasst: Sonntag 22. Februar 2009, 14:00
von Nocta
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.

Verfasst: Sonntag 22. Februar 2009, 14:07
von HerrHagen
Geil... Codegolf im dt. Python-Forum und ich sehs erst jetzt... :cry:

Verfasst: Sonntag 22. Februar 2009, 14:23
von 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.

Verfasst: Sonntag 22. Februar 2009, 14:34
von HerrHagen
@nocta: Ich bin mit deinem Ansatz bei 56. Da geht noch was...

EDIT: Korrigiere: 55
EDIT2: 54, hmm ein Zeichen fählt noch... :?:

Verfasst: Sonntag 22. Februar 2009, 14:59
von hendrikS
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.

Verfasst: Sonntag 22. Februar 2009, 15:01
von Craven
Mal was andres:
Wie lang würdet ihr denn durchschnittlich an sowas sitzen, ohne Absprache im Forum?

Verfasst: Sonntag 22. Februar 2009, 15:08
von HerrHagen
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...

Verfasst: Sonntag 22. Februar 2009, 15:37
von Leonidas
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.

Verfasst: Sonntag 22. Februar 2009, 15:37
von BlackJack
Sooo, nun habe ich auch eine 54 Byte-Lösung.

Verfasst: Sonntag 22. Februar 2009, 15:48
von Nocta
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:

Verfasst: Sonntag 22. Februar 2009, 16:24
von HerrHagen
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

Verfasst: Sonntag 22. Februar 2009, 16:31
von numerix
HerrHagen hat geschrieben:So, die 53 steht da...
Du machst mir Angst ... :wink:

Verfasst: Sonntag 22. Februar 2009, 18:15
von Craven
Perl ist schon ein bisschen extrem, oder? Mit 24 Zeichen ...

Verfasst: Sonntag 22. Februar 2009, 18:26
von DasIch
Perl ist ja auch nur ein Synonym für line noise :twisted:

Verfasst: Montag 23. Februar 2009, 01:35
von hendrikS
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