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.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Freitag 20. Februar 2009, 18:52

numerix hat geschrieben:
name hat geschrieben:Weil es keine { und } hat sind so wenig Zeilen wie moeglich noch bloedsinniger...
Das verstehe ich nicht.

Code: Alles auswählen

if [foo]:
    do something
    do something else
geht schwer mit einer zeile.
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.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 20. Februar 2009, 18:55

Dann löst man das Problem eben anders. :roll:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 20. Februar 2009, 19:15

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.
Benutzeravatar
snafu
User
Beiträge: 5440
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 20. Februar 2009, 19:18

name hat geschrieben:

Code: Alles auswählen

if [foo]:
    do something
    do something else
geht schwer mit einer zeile.

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.
shcol (Repo | Doc | PyPi)
DasIch
User
Beiträge: 2435
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Freitag 20. Februar 2009, 19:23

BlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
In Python schon. Du könntest ja Haskell nehmen ;)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 20. Februar 2009, 19:27

b.esser-wisser hat geschrieben:
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?
Es wird nicht erwähnt - das ist ja das Problem. Deshalb habe ich in meinem eröffnenden Posting extra darauf hingewiesen.
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 ...
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 20. Februar 2009, 19:29

DasIch hat geschrieben:
BlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
In Python schon. Du könntest ja Haskell nehmen ;)
Für Haskell bin ich ja sogar für'ne Ausgabe zu plöd, also... >_<
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 20. Februar 2009, 19:30

BlackVivi hat geschrieben:Sind diese ganzen funktionalen Sachen so langsam? ._. Ich find die total toll.
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.

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 Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 20. Februar 2009, 19:31

BlackVivi hat geschrieben:Faszinierend auch, meine echte Einzeiler Lösung ist auch die langsamste auf der ersten Seite =D
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). :D
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Freitag 20. Februar 2009, 19:43

numerix hat geschrieben:
BlackVivi hat geschrieben:Faszinierend auch, meine echte Einzeiler Lösung ist auch die langsamste auf der ersten Seite =D
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). :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
    
Ungefähr so, vielleicht :P Das macht ja noch nichmal, was's soll ._.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 20. Februar 2009, 20:21

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 ...
bords0
User
Beiträge: 170
Registriert: Mittwoch 4. Juli 2007, 20:40

Freitag 20. Februar 2009, 20:23

numerix hat geschrieben:
wuf hat geschrieben:Hallo kbr

Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:

Code: 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
Sind total 69 Zeichen

Gruss wuf :wink:
Es sind 73 Bytes und mit der SPOJ-Original-Eingabe läuft es immer noch nicht ..
Ja. Aber man kann was draus machen (Score 66 bei SPOJ). :D
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Freitag 20. Februar 2009, 20:28

bords0 hat geschrieben:
numerix hat geschrieben:
wuf hat geschrieben:Hallo kbr

Da wir PEP-8 vernachlässigen könnten wir doch auch noch beim einrücken einige Zeichen einsparen:

Code: 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
Sind total 69 Zeichen

Gruss wuf :wink:
Es sind 73 Bytes und mit der SPOJ-Original-Eingabe läuft es immer noch nicht ..
Ja. Aber man kann was draus machen (Score 66 bei SPOJ). :D
Gratuliere!
bords0
User
Beiträge: 170
Registriert: Mittwoch 4. Juli 2007, 20:40

Freitag 20. Februar 2009, 20:29

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 ...
Ein nicht ganz offensichtlicher Trick ist vielleicht:
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).
Benutzeravatar
snafu
User
Beiträge: 5440
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 20. Februar 2009, 20:31

numerix hat geschrieben:@snafu: So lange ich mit meinem Code in der SPOJ-Rangliste für Python auf Platz 1 stehe, werde ich ihn noch nicht rausrücken ... :)
Tust du's jetzt? :)
shcol (Repo | Doc | PyPi)
Antworten