C, 775 771 ký tự
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);
}
Đầu vào : Word trên mỗi dòng, phải là chữ thường. usr/share/dict/wordsỔn.
Đầu ra : Word và số, vd:acceptances,89,58,15,73,7,6,99
Logic :
c(w,o,l)kiểm tra từ w, bắt đầu bằng phần tử l.
Đệ quy hai chiều được sử dụng - nếu phần tử đầu tiên khớp với phần đầu của danh sách phần tử, hãy kiểm tra phần còn wlại so với danh sách phần tử đầy đủ. Nếu trận đấu này thất bại, hãy kiểm tra từ so với đuôi của danh sách.
Bộ đệm otích lũy các số phần tử dọc theo đường dẫn thành công. Sau một trận đấu, nó sẽ chứa danh sách các số và được in.
Vấn đề :
Danh sách không được mã hóa hiệu quả - quá nhiều "và ,". Nhưng cách này dễ sử dụng. Tôi chắc chắn rằng nó có thể được cải thiện nhiều, mà không mất quá nhiều chi phí trong mã.