da is mit ein paar ifs, fors, oder was weiss ich die eine zeile schon weg.numerix hat geschrieben:Das verstehe ich nicht.name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Edit: Außerdem gibt es doch { und } in Python ...
Kurzer Prozess: Size Contest bei SPOJ
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
Ja, das stimmt. Aber bei SPOJ wird Python 2.5 eingesetzt ...helduel hat geschrieben:Moin,
nimmt man Python 3, dann sind es 71 Zeichen:Gruß,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)
Manuel
(Meine kürzeste Fassung käme mit Python 3.0 auf 69 Bytes.)
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.name hat geschrieben:da is mit ein paar ifs, fors, oder was weiss ich die eine zeile schon weg.numerix hat geschrieben:Das verstehe ich nicht.name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Edit: Außerdem gibt es doch { und } in Python ...
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.
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.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.
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.
- b.esser-wisser
- User
- Beiträge: 272
- Registriert: Freitag 20. Februar 2009, 14:21
- Wohnort: Bundeshauptstadt B.
Wo wird sowas bei der Aufgabenstellung erwähnt?Die berücksichtigt noch nicht die garstigen Zeilenenden, die weg müssen.
(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.
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
numerix hat geschrieben:Das verstehe ich nicht.name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Code: Alles auswählen
if [foo]:
do something
do something else
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
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.
Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
name hat geschrieben:geht schwer mit einer zeile.Code: Alles auswählen
if [foo]: do something do something else
Code: Alles auswählen
if foo: do_something()
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.
Es wird nicht erwähnt - das ist ja das Problem. Deshalb habe ich in meinem eröffnenden Posting extra darauf hingewiesen.b.esser-wisser hat geschrieben:Wo wird sowas bei der Aufgabenstellung erwähnt?Die berücksichtigt noch nicht die garstigen Zeilenenden, die weg müssen.
(Und welchen Einfluß hat es überhaupt?
Es hat mich bei meinen ersten Versuchen bei SPOJ fast an den Rand der Verzweiflung gebracht, weil alle mir vorstellbaren testcases bei mir einwandfrei gelaufen sind, aber mir SPOJ jedesmal eine "wrong answer" lieferte. Dann habe ich aus schierer Verzweiflung die Eingabe mal mit einem strip() behandelt - und siehe da, jetzt lief es ...
Mittlerweile gibt es auch andere, die es gemerkt haben, es gibt z.B. inzwischen einen entsprechenden Kommentar unter der Aufgabenstellung.
Der Einfluss ist, dass die Ergebnisse dann falsch sind ...
Für Haskell bin ich ja sogar für'ne Ausgabe zu plöd, also... >_<DasIch hat geschrieben:In Python schon. Du könntest ja Haskell nehmenBlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Generell nein, in Python sind aber Funktionsaufrufe recht teuer und Endrekursion wird nicht optimiert, daher sind funktionale Lösungen oft nicht die schnellsten. Ich nutze sie aber trotzdem gerne wo man die Laufzeit verkraften kann.BlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
Ansonsten kannst du dir ja auch funktionale Sprachen ansehen (wie Scheme oder OCaml). Die haben dann entsprechende Optimierungen (und echte lambdas!).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Mich begeistert ja immernoch die 356 Bytes Lösung, die ungefähr 5x so langsam ist wie die anderen und auch noch mehr Speicher braucht (weil irgendwelche Module eingebunden wurden).BlackVivi hat geschrieben:Faszinierend auch, meine echte Einzeiler Lösung ist auch die langsamste auf der ersten Seite =D
numerix hat geschrieben:Mich begeistert ja immernoch die 356 Bytes Lösung, die ungefähr 5x so langsam ist wie die anderen und auch noch mehr Speicher braucht (weil irgendwelche Module eingebunden wurden).BlackVivi hat geschrieben:Faszinierend auch, meine echte Einzeiler Lösung ist auch die langsamste auf der ersten Seite =D
Code: Alles auswählen
class Function(object):
def __init__(self, function, *args):
self.function = function
self.args = list(args)
def get_number_of_args(self):
return len(self.args)
def add_arg(self, arg):
self.args.append(arg)
class Argument(object):
def __init__(self, arg):
self.arg = arg
class Parser(object):
def __init__(self, src):
t = Tokenizer(src)
self.lister = t.yield_token()
def get_next_function(self):
func = Function(self.lister.next())
class Tokenizer(object):
def __init__(self, text):
self.text = text
def yield_token(self):
for i in text:
yield i
Ja. Aber man kann was draus machen (Score 66 bei SPOJ).numerix hat geschrieben:Es sind 73 Bytes und mit der SPOJ-Original-Eingabe läuft es immer noch nicht ..wuf hat geschrieben:Hallo kbr
Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:Sind total 69 ZeichenCode: Alles auswählen
N=p=0 for c in raw_input(): if c<'a' and p:N+=4-p;p=0 p=(p+1)%4 print N
Gruss wuf
Gratuliere!bords0 hat geschrieben:Ja. Aber man kann was draus machen (Score 66 bei SPOJ).numerix hat geschrieben:Es sind 73 Bytes und mit der SPOJ-Original-Eingabe läuft es immer noch nicht ..wuf hat geschrieben:Hallo kbr
Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:Sind total 69 ZeichenCode: Alles auswählen
N=p=0 for c in raw_input(): if c<'a' and p:N+=4-p;p=0 p=(p+1)%4 print N
Gruss wuf
Ein nicht ganz offensichtlicher Trick ist vielleicht:numerix hat geschrieben:Seit eben gibt es bei SPOJ eine 66 Bytes Python Lösung ...
Edit: Ich vermute es war jemand hier aus dem Forum. Wäre nett, wenn er seine Lösung zur gegebenen Zeit mal zeigen würde ...
Ersetze p=0, p+=1 und (4-p)%4 durch p=8, p-=1 und p%4 (zum Glück haben die keinen Opcode mit mehr als 7 Operanden, sonst müsste man p=96 oder gar p=200 nehmen).