% Content-encoding: UTF-8
\documentclass[ngerman]{article}
\usepackage[utf8]{inputenc}
\usepackage{multicol,babel}
\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{0}

\renewcommand{\reftextbefore}{auf der vorherigen Seite}
\renewcommand{\reftextfacebefore}{auf der gegenüberliegenden Seite}
\renewcommand{\reftextafter}{auf der nächsten Seite}
\renewcommand{\reftextfaceafter}{auf der gegenüberliegenden Seite}


\begin{document}
% \renewcommand{\figurename}{Tabelle}

\title{Programmieraufgabe: Texte in Wörter zerlegen?}
\author{Ulrich Hoffmann}
\maketitle

\begin{multicols}{2}
Auf Alexander von Leitners (Fefe) Blog \texttt{\href{http://blog.fefe.de}{blog.fefe.de}} habe ich neulich Folgendes gefunden [1]:

\section{Sun Dec 7 2008}
\begin{quote}
Ich mache gerade einen kleinen Test, bei dem ihr mir helfen könnt, wenn ihr Lust habt. Es geht darum, eine vergleichsweise triviale Aufgabenstellung in Skriptsprachen zu implementieren. Die Aufgabenstellung ist: stdin lesen, in Wörter splitten, für die Wörter dann jeweils die Häufigkeit zählen, am Ende die Wörter mit Häufigkeiten nach letzteren sortiert ausgeben. Einfach genug, in perl ist das in unter 10 Zeilen ordentlich zu machen.

Die Idee ist, dass man das in diversen Sprachen mal implementiert. Und zwar schon so, dass das nicht unnötig langsam abläuft, aber auch nicht groß performance-rumhacken. D.~h.: in perl implementiert man das in perl und nicht als C--Extension. In C benutzt man malloc und stdio und keinen custom allocator bzw eigene I/O-Pufferverwaltung. Also schon versuchen, schnell ablaufenden Code zu schreiben, aber so, wie man das in der Sprache tun würde. Für C++ heisst das: STL und iostreams benutzen.

Am Ende kann man das natürlich nutzen, um da mal zu gucken, welche Implementation am schnellsten läuft. Hier geht es nicht darum, die Überlegenheit von C zu zeigen, sondern die relative Performance von Interpretern zu gucken. Es geht aber eben nicht nur um Performance, sondern der Code soll auch demonstrieren, wie man sowas in der jeweiligen Sprache löst. Damit man sich die Sourcen anschauen kann, und sich entscheiden kann, ob man diese Sprache für hinreichend elegant hält, dass man sich die mal näher anschauen will.

Wieso ihr mithelfen könnt: ich kann nicht alle Sprachen und habe auch keine Lust, mich da jetzt jeweils reinzugoogeln. Denn ich will den Sprachen ja auch gerecht werden und nicht bloss eine laufende Variante nehmen, die dann am Ende unfair schlecht aussieht oder unnötig langsam ist. Daher wäre es mir lieb, wenn mir jemand für die fehlenden Sprachen Sourcen zuschickt. Ich erwarte da jetzt nicht AppleScript oder so, aber C\# wäre z.~B.\ nett, und Tcl. Und vielleicht noch sowas wie LISP oder Scheme.
\end{quote}

Von Forth spricht Fefe erst gleich gar nicht :-( Aber wie sähe denn eine Lösung in (Standard-)Forth aus? Im Aufspalten von Texten ist Forth ja dank \texttt{WORD} und \texttt{PARSE} gut bestückt und einzelne Wörter kann man prima im Dictionary verwalten und dort auch ihre Häufigkeiten zählen.

Also lieber Leser, wie sieht Deine Forth-Lösung aus? 

Einsendungen nimmt die Redaktion der Vierten Dimension gerne entgegen. Wir drucken Sie dann in den kommenden Ausgaben und leiten Sie auch gerne an Fefe weiter. Zeigt mal, was in Euch und was in Forth steckt.

\end{multicols}

\section{Links}
[1] Fefes Aufruf \url{http://blog.fefe.de/?ts=b7c295e7}\\
{[2]} Fefe's call in english \url{http://ptrace.fefe.de/wp/README.txt}
\bigskip

\begin{center}
\begin{small}
\fbox{\begin{minipage}{0.9\textwidth}
    Faust
    Habe nun, ach! Philosophie,
    Juristerei und Medizin,
    Und leider auch Theologie
    Durchaus studiert, mit heißem Bemühn.
    Da steh ich nun, ich armer Tor!
    Und bin so klug als wie zuvor;
    Heiße Magister, heiße Doktor gar
    Und ziehe schon an die zehen Jahr
    Herauf, herab und quer und krumm
    Meine Schüler an der Nase herum-
    Und sehe, daß wir nichts wissen können!
    Das will mir schier das Herz verbrennen.
    Zwar bin ich gescheiter als all die Laffen,
    Doktoren, Magister, Schreiber und Pfaffen;
    Mich plagen keine Skrupel noch Zweifel,
    Fürchte mich weder vor Hölle noch Teufel-
    Dafür ist mir auch alle Freud entrissen,
    Bilde mir nicht ein, was Rechts zu wissen,
    Bilde mir nicht ein, ich könnte was lehren,
    Die Menschen zu bessern und zu bekehren.
    Auch hab ich weder Gut noch Geld,
    Noch Ehr und Herrlichkeit der Welt;
    Es möchte kein Hund so länger leben!
    Drum hab ich mich der Magie ergeben,
    Ob mir durch Geistes Kraft und Mund
    Nicht manch Geheimnis würde kund;
    Daß ich nicht mehr mit saurem Schweiß
    Zu sagen brauche, was ich nicht weiß;
    Daß ich erkenne, was die Welt
    Im Innersten zusammenhält,
\end{minipage}}

\medskip

Text zum Testen des gesuchten Splitt--Programms, das folgendes Ergebnis liefern sollte:\smallskip

\begin{tabular}{llllll}
ich   9 &
und   7 &
mir   5 &
nicht   4 &
Und   4 &
was   4 \\
die   3 &
zu   3&
noch   3&
der   3&
mich   2&
Daß   2\\
als   2&
ein,   2&
hab   2&
bin   2&
nun,   2&
Bilde   2\\
auch   2&
weder   2&
an   2&
Magister,   2&
mit   2&
so   2\\
all   1&
Ehr   1&
Innersten   1&
alle   1&
bekehren.   1&
Schüler   1\\
Herz   1&
quer   1&
Das   1&
Juristerei   1&
Habe   1&
Kraft   1\\
wissen   1&
Magie   1&
Drum   1&
lehren,   1&
Geistes   1&
Die   1\\
wissen,   1&
Ob   1&
Pfaffen;   1&
das   1&
Geld,   1&
Doktor   1\\
Rechts   1&
sagen   1&
nichts   1&
sehe,   1&
Jahr   1&
bessern   1\\
%brauche,   1&
%ach!   1&
%studiert,   1&
%würde   1&
%ergeben,   1&
%Nicht   1\\
%klug   1&
%Mich   1&
%heißem   1&
%herum-   1&
%manch   1&
%steh   1\\
\vdots & \vdots & \vdots & \vdots & \vdots
\end{tabular}
%Bemühn.   1
%könnte   1
%Durchaus   1
%ist   1
%Zwar   1
%durch   1
%Skrupel   1
%Zu   1
%Herauf,   1
%Es   1
%wie   1
%zusammenhält,   1
%schier   1
%Doktoren,   1
%armer   1
%wir   1
%Schweiß   1
%Gut   1
%Menschen   1
%Auch   1
%Geheimnis   1
%leben!   1
%daß   1
%Laffen,   1
%gescheiter   1
%gar   1
%erkenne,   1
%Freud   1
%krumm   1
%länger   1
%leider   1
%Teufel-   1
%Medizin,   1
%schon   1
%Heiße   1
%Schreiber   1
%kund;   1
%möchte   1
%plagen   1
%will   1
%heiße   1
%Philosophie,   1
%keine   1
%ziehe   1
%herab   1
%weiß;   1
%vor   1
%Zweifel,   1
%Herrlichkeit   1
%mehr   1
%Dafür   1
%Nase   1
%Mund   1
%Theologie   1
%zuvor;   1
%Da   1
%Im   1
%saurem   1
%Tor!   1
%können!   1
%Meine   1
%Welt;   1
%Faust   1
%Hölle   1
%Hund   1
%verbrennen.   1
%kein   1
%zehen   1
%Noch   1
%Fürchte   1
%entrissen,   1
%Welt   1
\end{small}
\end{center}


\end{document}