C, 775 771 वर्ण
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);
}
इनपुट : वर्ड प्रति लाइन, लोअरकेस होना चाहिए। usr/share/dict/wordsठीक है।
आउटपुट : शब्द और संख्या, उदाहरण के लिए:acceptances,89,58,15,73,7,6,99
तर्क :
c(w,o,l)शब्द की जाँच करता है w, तत्व से शुरू l।
दो-तरफ़ा पुनरावृत्ति का उपयोग किया जाता है - यदि पहला तत्व तत्व सूची के प्रमुख से मेल खाता है, तो wपूर्ण तत्व सूची के विरुद्ध रहने वाले की जांच करें । यदि यह मैच विफल हो जाता है, तो सूची की पूंछ के खिलाफ शब्द की जांच करें।
बफर oसफल पथ के साथ तत्व संख्याओं को जमा करता है। एक मैच के बाद, इसमें संख्याओं की सूची होगी, और मुद्रित है।
समस्याएँ :
सूची कुशलता से एन्कोडेड नहीं है - बहुत अधिक "और ,"। लेकिन इस तरह इसका उपयोग करना आसान है। मुझे यकीन है कि कोड में बहुत अधिक लागत के बिना, इसमें बहुत सुधार किया जा सकता है।