> Turime N žodžių, sudaryti trumpiausią žodį iš jų visų (vieno žodžio pabaiga yra kito žodžio pradžia). Pvz.: raba, abac, ar -> > arabac Tūpas ir vaizdus sprendimas: laikome, kad įmanomi žodžiai iš kiekvienos kombinacijos (kurių yra n!); perrenkant visas kombinacijas (patogu manipuliuoti indeksais, t.y., žodžio eilės nr. faile), tikriname, ar kiekviena pabaiga yra tolimesnio pradžia, ir korektiškai sudarytų žodžių ilgį įsimename; pabaigoje rodome trumpiausią. Indeksai leidžia sutaupyti atminties ir greičio. Perrinkimas turėtų būti nesudėtingas. Pradinis indeksų masyvas -- tiesiog skaičiai nuo 0 iki n-1. Patogu naudoti rekursiją arba jos ekvivalentą. Funkcija gauna masyvą, iš eilės perrenka visus jo elementus; pasirinkto elemento turinį įrašo į globalų masyvą atitinkamu offsetu, tada kviečia save su masyvo kopija, kurioje pasirinktoji reikšmė yra pašalinta, nurodydama tos kopijos ilgį. Nebekviečiama, gavus masyvą iš vieno elemento. Verta dar prieš kviečiant save patikrinti, ar žodžiai susikombinuoja, ir išsaugoti naujojo fragmento ilgį -- tada pabaigoje bus galima užsiimti tik ilgio įvertinimu. Esant galimybei pabaigoje įsiminti visą tą globalų masyvą (sąraše saugant rodykles?), pakaktų prasukti šitą rekursiją vieną kartą. Paskui jau peržiūrimi rezultatai, išrenkamas trumpiausias (galbūt ten keli vienodo ilgio), pagal indeksus iš naujo formuojamas ir išvedamas sukombinuotas žodis. Bonus: išvedami ir indeksai, kad dėstytuvui nereikėtų sukti galvos tikrinant :) Taupant atmintį, pabaigoje pakanka ieškoti, koks ilgis yra minimalus. Tada sukti rekursiją antrą kartą ir stabdyti, radus tokio pat ilgio žodį. Rekursijos lygių gausis nedaug, ar tik ne n-2. -- saimhe