C, 775 771 Zeichen
char*e[]={"h","he","li","be","b","c","n","o","f","ne","na","mg","al","si","p","s","cl","ar","k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr","rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe","cs","ba","la","ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu","hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn","fr","ra","ac","th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr","rf","db","sg","bh","hs","mt","ds","rg","cn","uut","fl","uup","lv","uus","uu",0};
b[99],n;
c(w,o,l)char*w,*o,**l;{
return!*w||!strncmp(*l,w,n=strlen(*l))&&c(w+n,o+sprintf(o,",%d",l-e+1),e)||*++l&&c(w,o,l);
}
main(){
while(gets(b))c(b,b+9,e)&&printf("%s%s\n",b,b+9);
}
Eingabe : Wort pro Zeile, muss klein geschrieben sein. usr/share/dict/wordsist gut.
Ausgabe : Wort und Zahlen, zB:acceptances,89,58,15,73,7,6,99
Logik :
c(w,o,l)Überprüft das Wort w, beginnend mit Element l.
Die bidirektionale Rekursion wird verwendet. Wenn das erste Element mit dem Kopf der Elementliste übereinstimmt, überprüfen Sie den Rest von wmit der vollständigen Elementliste . Wenn diese Übereinstimmung fehlschlägt, überprüfen Sie das Wort am Ende der Liste.
Der Puffer osammelt die Elementnummern entlang des erfolgreichen Pfades. Nach einer Übereinstimmung enthält es die Liste der Zahlen und wird gedruckt.
Probleme :
Die Liste ist nicht effizient codiert - zu viel "und ,". Aber auf diese Weise ist sie einfach zu verwenden. Ich bin sicher, dass sie ohne zu hohe Codekosten erheblich verbessert werden kann.