Sprachwahl im Linux-Magazin

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.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Sprachwahl im Linux-Magazin

Beitragvon audax » Dienstag 2. September 2008, 23:51

Das Linux-Magazin hat in der Ausgabe 10/2008 renommierten Vertretern von Programmiersprachen zwei Aufgaben gestellt. Der resultierende Code macht anschaulich, wie Könner in Perl, Java oder Python Probleme lösen, und was die Stärken exotischer Sprachen wie Lisp und Smalltalk sind.

Das Linux-Magazin hatte die Aufgabenstellung bewusst offen formuliert, damit die Sprach-Experten frei für kreative Lösungen waren.

Nun sind Sie, die Leser an der Reihe: Wer kennt noch weitere Python-Kniffe? Wer kann die Java-Lösung kürzen oder die Perl-Variante effizienter gestalten? Welche anderen Programmiersprachen lösen das Problem vielleicht noch eleganter?

Schreiben Sie uns! Die Redaktion begutachtet alle bis zum 30 September unter redaktion@linux-magazin.de eingereichten Programme und prämiert die drei kreativsten Lösungen mit je einem Fachbuch. Die Einsendungen verlinken wir auf Linux-Magazin Online.

http://www.linux-magazin.de/online_artikel/sprachwahl

Nun ist die Python Lösung absolut unter aller Kanone.

Hier mal die von mir halbwegs geflickte Version:
http://paste.pocoo.org/show/84230

Lasst uns mal was ordentliches bauen und einschicken!

€dit:
Wow. die zweite Java Lösung braucht dafür 290 Zeilen Oo
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Beitragvon mkesper » Mittwoch 3. September 2008, 07:50

Ich finde das mit der Python-Version der Fußnotensortierung eine Sauerei.
Den Autoren hätte doch eine Testdatei in der richtigen Größe zur Verfügung stehen müssen.
Jetzt sieht es so aus, als ob entweder Python oder Leute, die mit Python entwickeln, nichts können.
Hier hat der Autor vermutlich auch nur mit so einem Schnipsel wie in deinem Paste getestet, die Datei mit 55 MB konnte dann nicht mehr verarbeitet werden (wobei mich das ehrlich gesagt wundert).
Benutzeravatar
Käptn Haddock
User
Beiträge: 167
Registriert: Freitag 24. März 2006, 14:27

Beitragvon Käptn Haddock » Mittwoch 3. September 2008, 09:18

Jo, mich würd auch interessieren woran das liegt, Hab leider keine Testdatei in entsprechender Grösse.
Muß man da im Download-Code wirklich die Einrückung rekonstruieren oder bin ich nur zu blöd den richtigen Editor (vim) zu benutzen?

Gruß Uwe
---------------------------------
have a lot of fun!
BlackJack

Beitragvon BlackJack » Mittwoch 3. September 2008, 09:33

@audax: Deine Lösung ist keine weil `set()` ungeordnet ist, wenn das funktioniert, ist das reiner Zufall.

Meine Python-Lösung ist auch deutlich länger als deren, aber ich setze auch auf Klassen und habe keine Angst die Funktionalität auf mehr Funktionen/Methoden zu verteilen.

@mkallas: Woher weisst Du das mit dem 55 MB Text? Steht das nur im Heft, oder kann man das auch im Netz nachlesen? Steht da auch woran es genau scheitert? Ich könnte mir zum Beispiel vorstellen, dass `nodups()` 'ne fiese Laufzeit (quadratisch) hat bei wirklich vielen Referenzen. Insbesondere sollte es bei den Fussnoten eigentlich keine Duplikate geben.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Sprachwahl im Linux-Magazin

Beitragvon Leonidas » Mittwoch 3. September 2008, 11:28

Irgendwie werde ich aus dem Artikel nicht schlau, denn dort stehen keine Ergebnisse oder Auswertungen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
n4p
User
Beiträge: 55
Registriert: Dienstag 10. Juni 2008, 11:05

Beitragvon n4p » Mittwoch 3. September 2008, 11:31

Ging ja auch soweit ich das verstanden habe eher um die ideelen Stärken der einzelnen Sprachen bzw. wie diese an Problemstellungen ran gehen. Zumindest im Online-Artikel steht ja, dass es weder um Codelänge noch um Laufzeit ging.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 3. September 2008, 11:32

Mal gucken, mit Pyparsing könnte das Parsen vermutlich ziemlich gut aussehen :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 3. September 2008, 12:38

BlackJack hat geschrieben:@audax: Deine Lösung ist keine weil `set()` ungeordnet ist, wenn das funktioniert, ist das reiner Zufall.


Auch wieder wahr...war gestern ein wenig spät :D
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 3. September 2008, 16:38

n4p hat geschrieben:Ging ja auch soweit ich das verstanden habe eher um die ideelen Stärken der einzelnen Sprachen bzw. wie diese an Problemstellungen ran gehen. Zumindest im Online-Artikel steht ja, dass es weder um Codelänge noch um Laufzeit ging.

Für'n bisschen Textmangling sind diverse agile Sprachen in der Ecke Perl, PHP, Python, Ruby usw. gut geeignet, ist es doch einer der Schwerpunkte.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 3. September 2008, 16:42

so, mal die "offizielle"-Python Lösung in ordneltich, diesmal funktionierst aber :D
http://paste.pocoo.org/show/84275
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 3. September 2008, 17:13

@audax: Das Hinzufügen von Elementen in "m" innerhalb des Generators (in der unique-Funktion) halte ich für etwas ungelungen. Das mag zwar schön kurz sein, aber ich fände das hier viel eindeutiger:

Code: Alles auswählen

def unique(iterable):
    m = set()
    for x in iterable:
        if x in m:
            yield x
        else:
            m.add(x)


Sonst sieht es aber wirklich hübsch aus.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 3. September 2008, 18:30

Und hier mal meine Art, das zu machen:
http://paste.pocoo.org/show/84287

Läuft bei der Testdatei bei mir in ordentlichen 17s.

Die Orginallösung läuft gar nicht damit :D

€dit:
hatte Schöheitsfehler drinne
http://paste.pocoo.org/show/84290
Zuletzt geändert von audax am Mittwoch 3. September 2008, 19:13, insgesamt 2-mal geändert.
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 3. September 2008, 18:42

EyDu hat geschrieben:@audax: Das Hinzufügen von Elementen in "m" innerhalb des Generators (in der unique-Funktion) halte ich für etwas ungelungen. Das mag zwar schön kurz sein, aber ich fände das hier viel eindeutiger:
[...]


Code: Alles auswählen

def unique(iterable):
    m = set()
    for x in iterable:
        if x not in m:
            m.add(x)
            yield x
           

sorum isses ;)

Btw:
Was findet ihr besser: foo(iterable) oder foo(itr) ?
lunar

Beitragvon lunar » Mittwoch 3. September 2008, 18:54

BlackJack hat geschrieben:@mkallas: Woher weisst Du das mit dem 55 MB Text? Steht das nur im Heft, oder kann man das auch im Netz nachlesen? Steht da auch woran es genau scheitert?

Im Artikel heißt es, dass es knallt, weil Python die Daten en block liest, anstatt wie alle anderen Implementierungen zeilenweise.
BlackJack

Beitragvon BlackJack » Mittwoch 3. September 2008, 19:35

@audax: `iterable`. :-)

@lunar: Es "kracht" ja gar nicht, das Original läuft halt einfach nur *ewig* ohne dabei nennenswert Speicherzuwachs zu zeigen. Ich denke es ist die `nodups()` mit der Quadratischen Laufzeit. Die Schleife innerhalb von `new.__contains__()` in Zeile 20 schaut sich bei 'sample4.txt' insgesamt schlappe ~199 *Milliarden* Elemente an. Das dauert halt ein *wenig*. ;-)

Meine Lösung liefert nach 10 Sekunden dass hier:

Code: Alles auswählen

bj@s8n:~$ python forum2.py < sample4.txt
Error: undefined footnote 958378


Im Text kommt '[958378]' vor, aber es gibt keine Fussnote mit der Nummer. Hat jetzt mein Programm versagt, weil es darauf prüft, oder ist das ein Fehler in den Eingabedaten?

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]