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

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()
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 trivialHyperion hat geschrieben:Ist das Dein Code?
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 trivialHyperion hat geschrieben:Ist das Dein Code?Ich warte ja noch, dass eine x86-Assembler-Lösung den C-Code überholt.
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 eingeschicktOverNord hat geschrieben:Ich persönlich tippe ja darauf, dass die Implementierung in Scheme von dir ist.
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;
}
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.
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 eingeschicktOverNord hat geschrieben:Ich persönlich tippe ja darauf, dass die Implementierung in Scheme von dir ist.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.
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
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;
}
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.
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