<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% 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 &amp;
und   7 &amp;
mir   5 &amp;
nicht   4 &amp;
Und   4 &amp;
was   4 \\
die   3 &amp;
zu   3&amp;
noch   3&amp;
der   3&amp;
mich   2&amp;
DaÃŸ   2\\
als   2&amp;
ein,   2&amp;
hab   2&amp;
bin   2&amp;
nun,   2&amp;
Bilde   2\\
auch   2&amp;
weder   2&amp;
an   2&amp;
Magister,   2&amp;
mit   2&amp;
so   2\\
all   1&amp;
Ehr   1&amp;
Innersten   1&amp;
alle   1&amp;
bekehren.   1&amp;
SchÃ¼ler   1\\
Herz   1&amp;
quer   1&amp;
Das   1&amp;
Juristerei   1&amp;
Habe   1&amp;
Kraft   1\\
wissen   1&amp;
Magie   1&amp;
Drum   1&amp;
lehren,   1&amp;
Geistes   1&amp;
Die   1\\
wissen,   1&amp;
Ob   1&amp;
Pfaffen;   1&amp;
das   1&amp;
Geld,   1&amp;
Doktor   1\\
Rechts   1&amp;
sagen   1&amp;
nichts   1&amp;
sehe,   1&amp;
Jahr   1&amp;
bessern   1\\
%brauche,   1&amp;
%ach!   1&amp;
%studiert,   1&amp;
%wÃ¼rde   1&amp;
%ergeben,   1&amp;
%Nicht   1\\
%klug   1&amp;
%Mich   1&amp;
%heiÃŸem   1&amp;
%herum-   1&amp;
%manch   1&amp;
%steh   1\\
\vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \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}</pre></body></html>