C, 775 771 karakter
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);
}
Input : Kata per baris, harus huruf kecil. usr/share/dict/wordsbaik-baik saja.
Output : Word dan angka, mis .:acceptances,89,58,15,73,7,6,99
Logika :
c(w,o,l)memeriksa kata w, dimulai dengan elemen l.
Rekursi dua arah digunakan - jika elemen pertama cocok dengan kepala daftar elemen, periksa sisa-sisa dari wdaftar elemen lengkap. Jika kecocokan ini gagal, periksa kata di bagian ujung daftar.
Buffer omengakumulasi nomor elemen di sepanjang jalur yang berhasil. Setelah pertandingan, itu akan berisi daftar angka, dan dicetak.
Masalah :
Daftar ini tidak dikodekan secara efisien - terlalu banyak "dan ,". Tapi dengan cara ini mudah digunakan. Saya yakin itu bisa lebih ditingkatkan, tanpa terlalu banyak biaya dalam kode.