Seite 2 von 7
Verfasst: Freitag 20. Februar 2009, 17:22
von kbr
numerix hat geschrieben:@kbr: Dein Programm berücksichtigt nicht die speziellen Zeilenenden (siehe das erste Posting im Thread).
Hallo numerix,
ich sehe keine speziellen Zeilenenden, weder in der Beschreibung bei SPOJ bezüglich des Inputs noch in den Daten die raw_input() selber liefert. Bei
kommt ganz unspektakulär
heraus. Also nichts, was am Ende irgendwo stört.
@wuf: das ist exakt meine raw_input() Variante (bei mir mit Tabulatoren

).
Klaus
Verfasst: Freitag 20. Februar 2009, 17:27
von numerix
kbr hat geschrieben:ich sehe keine speziellen Zeilenenden, weder in der Beschreibung bei SPOJ bezüglich des Inputs noch in den Daten die raw_input() selber liefert.
Dann sende es doch bei SPOJ mal ein ...
Verfasst: Freitag 20. Februar 2009, 17:29
von snafu
Für Python könnte ich mir höchstens Wettbewerbe vorstellen, wo man möglichst wenig Zeilen benutzen soll. Ich glaube, da kann die Sprache eher ihre Stärken ausspielen.
(Ich bitte, von möglichen Semikolon-Witzen abzusehen...)
Verfasst: Freitag 20. Februar 2009, 17:44
von kbr
numerix hat geschrieben:kbr hat geschrieben:ich sehe keine speziellen Zeilenenden, weder in der Beschreibung bei SPOJ bezüglich des Inputs noch in den Daten die raw_input() selber liefert.
Dann sende es doch bei SPOJ mal ein ...
Eigentlich ist es mir auch egal. Von mir aus dann eben
oder irgendsowas.
Interessanter finde ich zu sehen, welche Lösungsvorschläge andere posten.
Verfasst: Freitag 20. Februar 2009, 17:57
von numerix
kbr hat geschrieben:Eigentlich ist es mir auch egal. Von mir aus dann eben
oder irgendsowas.
Als finaler Code ergäbe sich dann, wenn man noch das Leerzeichen hinter "a" entfernt:
Code: Alles auswählen
n=p=0
for c in raw_input()[:-1]:
if c<'a'and p:n+=4-p;p=0
p=(p+1)%4
print n
Das läuft jetzt korrekt mit 77 Bytes.
kbr hat geschrieben:Interessanter finde ich zu sehen, welche Lösungsvorschläge andere posten.
Ich warte mal noch ein wenig ab und dann stelle ich alle funktionsfähigen geposteten Lösungen nochmal zusammen.
Verfasst: Freitag 20. Februar 2009, 18:01
von numerix
snafu hat geschrieben:Für Python könnte ich mir höchstens Wettbewerbe vorstellen, wo man möglichst wenig Zeilen benutzen soll. Ich glaube, da kann die Sprache eher ihre Stärken ausspielen.
(Ich bitte, von möglichen Semikolon-Witzen abzusehen...)
Dann wäre der "echte Einzeiler" von BlackVivi der Matchwinner ...

Verfasst: Freitag 20. Februar 2009, 18:16
von numerix
b.esser-wisser hat geschrieben:Code: Alles auswählen
n=p=0
for c in raw_input()[1:-1]:
if c.islower():p+=1
else:n+=3-p%4;p=0
print n
... meine kürzeste "konventionelle" Version.
Die berücksichtigt noch nicht die garstigen Zeilenenden, die weg müssen. Macht man aus dem [1:] ein [1:-1] ergeben sich 81 Bytes für eine SPOJ-lauffähige Fassung.
Allerdings lässt sich auf dieser Grundlage durch einen kleinen Eingriff eine 74-Byte-Fassung erzeugen:
Code: Alles auswählen
n=p=0
for c in raw_input()[1:-1]:
if"Z"<c:p+=1
else:n+=3-p%4;p=0
print n
Verfasst: Freitag 20. Februar 2009, 18:23
von name
snafu hat geschrieben:Für Python könnte ich mir höchstens Wettbewerbe vorstellen, wo man möglichst wenig Zeilen benutzen soll. Ich glaube, da kann die Sprache eher ihre Stärken ausspielen.
(Ich bitte, von möglichen Semikolon-Witzen abzusehen...)
Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Verfasst: Freitag 20. Februar 2009, 18:33
von numerix
name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Das verstehe ich nicht.
Edit: Außerdem gibt es doch { und } in Python ...

Verfasst: Freitag 20. Februar 2009, 18:33
von helduel
Moin,
nimmt man Python 3, dann sind es 71 Zeichen:
Code: Alles auswählen
n=p=0
for c in input()[1:-1]:
if"Z"<c:p+=1
else:n+=3-p%4;p=0
print(n)
Gruß,
Manuel
Verfasst: Freitag 20. Februar 2009, 18:35
von name
numerix hat geschrieben:name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Das verstehe ich nicht.
Edit: Außerdem gibt es doch { und } in Python ...

da is mit ein paar ifs, fors, oder was weiss ich die eine zeile schon weg.
Verfasst: Freitag 20. Februar 2009, 18:37
von numerix
helduel hat geschrieben:Moin,
nimmt man Python 3, dann sind es 71 Zeichen:
Code: Alles auswählen
n=p=0
for c in input()[1:-1]:
if"Z"<c:p+=1
else:n+=3-p%4;p=0
print(n)
Gruß,
Manuel
Ja, das stimmt. Aber bei SPOJ wird Python 2.5 eingesetzt ...
(Meine kürzeste Fassung käme mit Python 3.0 auf 69 Bytes.)
Verfasst: Freitag 20. Februar 2009, 18:40
von numerix
name hat geschrieben:numerix hat geschrieben:name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Das verstehe ich nicht.
Edit: Außerdem gibt es doch { und } in Python ...

da is mit ein paar ifs, fors, oder was weiss ich die eine zeile schon weg.
Tut mir leid, vielleicht bin ich gerade etwas begriffsstutzig, aber ich verstehe immer noch nicht, ob du meinst, dass Python im Falle des Zeilenzählens nicht gut weggekäme (so meine Vermutung) oder etwas anderes.
Falls du das meinst: Es gibt doch elegante Konstrukte wie z.B. LCs oder mächtige Funktionen, mit denen man auf einen Rutsch in einer Zeile ohne Semikolon eine Menge machen kann.
Verfasst: Freitag 20. Februar 2009, 18:45
von snafu
numerix hat geschrieben:Es gibt doch elegante Konstrukte wie z.B. LCs oder mächtige Funktionen, mit denen man auf einen Rutsch in einer Zeile ohne Semikolon eine Menge machen kann.
Genau das meinte zumindest ich. Vielleicht kann Python seine Stärken nicht in der konkreten Aufgabe ausspielen aber doch wohl in so einigen anderen Fällen.
Die Kritik, dass möglichst kurzer Code != optimaler Code ist, ist natürlich berechtigt, hier aber - so finde ich - irrelevant. Man kann den Leuten doch auch mal ihren Spass mit solchen Wettbewerben lassen.
Verfasst: Freitag 20. Februar 2009, 18:49
von b.esser-wisser
Die berücksichtigt noch nicht die garstigen Zeilenenden, die weg müssen.
Wo wird sowas bei der Aufgabenstellung erwähnt?
(Und welchen Einfluß hat es überhaupt? Hinten muss doch nicht aufgefüllt werden und
Ausgegeben werden sollen die doch auch nicht).
Außerdem teste ich gerade nur unter Windows "\r\n"-Zeilenenden sind da die Regel.
Verfasst: Freitag 20. Februar 2009, 18:52
von name
numerix hat geschrieben:name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Das verstehe ich nicht.
geht schwer mit einer zeile.
Verfasst: Freitag 20. Februar 2009, 18:55
von Leonidas
Dann löst man das Problem eben anders.

Verfasst: Freitag 20. Februar 2009, 19:15
von BlackVivi
Faszinierend auch, meine echte Einzeiler Lösung ist auch die langsamste auf der ersten Seite =D
Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
Verfasst: Freitag 20. Februar 2009, 19:18
von snafu
name hat geschrieben:geht schwer mit einer zeile.
Mal im Ernst: Worauf willst du mit solchen Argumenten hinaus? Es bestreitet niemand, dass gewisse Konstrukte sich auch bei Python über mehrere Zeilen erstrecken, trotzdem kann man IMHO zurecht behaupten, dass in sehr vielen Fällen weniger Zeilen in Python nötig sind als in anderen Sprachen, um bestimmte Probleme zu lösen.
Verfasst: Freitag 20. Februar 2009, 19:23
von DasIch
BlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
In Python schon. Du könntest ja Haskell nehmen
