Servus,
Für alle die Spaß am Vergleichen von Implementierungen haben: Fefe macht gerade einen Test. Ich habe da schon die wohl mit Abstand langsamste Implementation des Problemes eingeschickt, mal sehen ob die überhaupt die 350 MB schafft
Fefes WP contest
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist das Dein Code?
Wäre ja schön, wenn der Fefe da den Autoren mit angegeben hätte
Code: Alles auswählen
#!/usr/local/bin/python -S
import sys
from operator import itemgetter
from collections import defaultdict
def main():
count = defaultdict(int)
for line in sys.stdin:
for word in line.split():
count[word] += 1
for e, v in sorted(count.items(), key=itemgetter(1), reverse=True):
print e, " ", v
main()
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, ich habe keine Python-Lösung eingeschickt. Die war schon da, dann hatte ich keine Lust und um ehrlich zu sein war das mit Python auch etwas zu trivial Ich warte ja noch, dass eine x86-Assembler-Lösung den C-Code überholt.Hyperion hat geschrieben:Ist das Dein Code?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Könntest uns ja auch nicht so im dunklen tappen lassen und sagen, welche denn nun von dir ist. Ich persönlich tippe ja darauf, dass die Implementierung in Scheme von dir ist.Leonidas hat geschrieben:Nein, ich habe keine Python-Lösung eingeschickt. Die war schon da, dann hatte ich keine Lust und um ehrlich zu sein war das mit Python auch etwas zu trivial Ich warte ja noch, dass eine x86-Assembler-Lösung den C-Code überholt.Hyperion hat geschrieben:Ist das Dein Code?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Von denen die online sind leider keine, zumindest bisher. Fefe hat die wohl nicht hinzugefügt. Meine Vermutung ist dass meine Implementation zu viel Speicher verbraucht hat. Bastle momentan an einer Lösung die die Datei inkrementell einliest und vielleicht auch auf Unicode verzichtet, was den Speicher schonen würde.OverNord hat geschrieben:Könntest uns ja auch nicht so im dunklen tappen lassen und sagen, welche denn nun von dir ist.
Ja, ich habe eine Scheme-Implementation eingeschickt Aber die die online ist, von Karsten Patzwaldt (ich habe mit ihm im IRC gesprochen) gefällt mir nicht so sehr, da sie eher imperativ ist. Meine Lösung ähnelt übrigens der Haskell-Version, wie ich später festgestellt habe - nehme ich mal für ein gutes Zeichen.OverNord hat geschrieben:Ich persönlich tippe ja darauf, dass die Implementierung in Scheme von dir ist.
Meine Implementation, siehe dort die jeweils aktuellste Annotation. Da wird wohl in nächster Zeit etwas optimiert werden, vielleicht unterbiete ich karsten_ ja noch. Allerdings wundert mich ja doch warum Scheme generell so schlecht abschneidet.
P.S: Brainfuck und Io fehlen noch. Ebenso Self
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hier meine Implementierung in D:
Bin damit aber leider zu spät gekommen.
MfG
HWK
Code: Alles auswählen
import std.stdio, std.string;
int main()
{
char[] buf;
char[][] temp;
int[char[]] result;
while (readln(stdin, buf))
foreach (word; split(buf))
result[word.dup]++;
foreach (word, cnt; result)
temp ~= format("%6d: %s", cnt, word);
foreach (line; temp.sort)
writefln(line);
return 0;
}
MfG
HWK
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Kannst du trotzdem noch einsenden. Wenn die Performance besser ist, dann sollte das angenommen werden.HWK hat geschrieben:Bin damit aber leider zu spät gekommen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Also eine Io-Lösung hat er auf jeden Fall zugeschickt bekommen.
Ist aber wahrscheinlich zu exotisch und zu langsam.
Ist aber wahrscheinlich zu exotisch und zu langsam.
Code: Alles auswählen
#!/usr/bin/env io
histogram := Map clone
File standardInput foreachLine(line,
line splitNoEmpties foreach(word,
histogram atPut(word, histogram atIfAbsentPut(word, 0) + 1)
)
)
words := histogram asList sortKey(pair, List with(-pair at(1), pair at(0))) sort
words foreach(pair, (pair at(0) .. " " .. pair at(1)) println)
Aber immerhin habe ich die richtige Sprache genannt, woher ich die nur wusste ...Leonidas hat geschrieben:Ja, ich habe eine Scheme-Implementation eingeschickt Aber die die online ist, von Karsten Patzwaldt (ich habe mit ihm im IRC gesprochen) gefällt mir nicht so sehr, da sie eher imperativ ist. Meine Lösung ähnelt übrigens der Haskell-Version, wie ich später festgestellt habe - nehme ich mal für ein gutes Zeichen.OverNord hat geschrieben:Ich persönlich tippe ja darauf, dass die Implementierung in Scheme von dir ist.
Meine Implementation, siehe dort die jeweils aktuellste Annotation. Da wird wohl in nächster Zeit etwas optimiert werden, vielleicht unterbiete ich karsten_ ja noch. Allerdings wundert mich ja doch warum Scheme generell so schlecht abschneidet.
P.S: Brainfuck und Io fehlen noch. Ebenso Self
PS: Brainfuck wäre auf jedenfall interessant, und Assembler fehlt auch noch.
PPS: "P.S" ist falsch, das wird ohne den Punkt geschrieben.
Ich habe jetzt D 2.0 installiert. Das kompiliert meine erste Version, die unter D 1.0 lief, nicht. Hier eine neue Variante, die unter beiden Compilern läuft und ohne .dup auskommt:Die ist aber außer beim Sortieren schon sehr ähnlich zu der veröffentlichten.
MfG
HWK
Code: Alles auswählen
import std.stdio, std.string;
int main()
{
string buf;
string[] temp;
int[string] result;
while ((buf = readln()) != null)
foreach (word; split(buf))
result[word]++;
foreach (word, cnt; result)
temp ~= format("%6d: %s", cnt, word);
foreach (line; temp.sort)
writefln(line);
return 0;
}
MfG
HWK
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ich habe da soger einen Punkt zu wenig. Persönlich ist mir DIN 5008 ziemlich egal. Wenn man ultra-korrekt sein will müsste es auch W.S.D.L. heißen oder X.M.L.-R.P.C. was aber wohl niemand macht, daher nehme ich mir auch die Freiheit P.S. mit Punkten zu schreiben.OverNord hat geschrieben:PPS: "P.S" ist falsch, das wird ohne den Punkt geschrieben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Es ist nicht definiert wie gesplittet werden soll. Daher ist es auch schwer zu vergleichen, weil einige mehr Wörter splitten als andere.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ach ja, in `Factor` habe ich es auch noch einmal geschrieben:
Code: Alles auswählen
#! /usr/bin/env factor
USING: assocs hashtables io kernel math namespaces
present sequences sorting splitting ;
IN: word-count
42 <hashtable>
[ " \t\n\r" split harvest [ over inc-at ] each ] each-line
>alist sort-values reverse [ [ present ] map " " join print ] each