Kolega kombinuje. Czy słusznie?
Jak widać, nie. Zadanie jest de facto proste. Wyzwaniem jest ono wyłącznie dla szanownego kolegi, co sugeruje, że jest on początkowym użytkownikiem. Zadanie rozwiązane przez kolegę również jest przeznaczone dla osób początkujących
A to już absolutny dowód na brak wprawy. Zadanie faktycznie można w ten sposób utrudnić, ale po co? Sama funkcja jest trywialna, a poza tym zupełnie nieprzydatna w praktycznych sytuacjach. Dowód? Nie ma jej podanej (wprost) w funkcjach bibliotecznych.
A teraz na poważnie i bardziej bezpośrednio.
Pomysł z dodatkowym wyzwaniem jest zły z kilku względów. Po pierwsze - podołałeś trzem znakom. Podołasz więc czterem znakom, pięciu znakom, ..., a w końcu stworzysz funkcję, która Cię interesuje. Stracisz na to ileś czasu. W tym czasie możesz przerobić inne zadania i poćwiczyć bardziej interesujące operacje na stringach czy czymkolwiek innym. Możesz też, jak słusznie radzi @narbej, poprawić swój aktualny kod. Więcej wiedzy zyskasz analizując zupełnie inny problem, a nie rozwijając obecny. Powiem więcej - z każdym kolejnym dodatkowym wyzwaniem Twój problem (zaczynający się od prostych trzech znaków!) będzie coraz bardziej abstrakcyjny. Bo dlaczego użyć jednej funkcji? Czy nie lepiej stworzyć możliwie krótki kod oparty na szablonach? I nie korzystający z iostream? A może wstawka w asmie? Poświęcisz kilka godzin na doktoryzowanie się z takich tematów, a w rzeczywistości stworzysz nienadający się do użytku kod i nie zdobędziesz żadnej interesującej wiedzy ani przydatnych umiejętności. W szczególności Twój kod będzie nieczytelny, oparty na kopiowaniu rozwiązań z sieci a dodatkowo algorytmicznie wołający o pomstę do nieba (a złożoność elementarnych algorytmów operujących na stringach jest znaczna: http://eduinf.waw.pl/inf/alg/001_search/0043.php)
Moja rada: odpuść. Jeżeli chcesz nauczyć się funkcji, możesz rozwiązać np. to http://pl.spoj.com/problems/HANG/ zadanie. Tam funkcje rzeczywiście mogą się przydać, ich zastosowanie jest dużo bardziej naturalne niż dla abstrakcyjnego problemu, sędzia sprawdzi poprawność rozwiązania (Twoje "wyzwanie" nie będzie tak dokładnie sprawdzone), ... .
A może nie używaj jeszcze funkcji tylko goto? Swojego czasu napisałem program do analizy algorytmów sortujących, w którym proste funkcje mieszałem z goto. Program nie działa za dobrze po dziś dzień, a ja już nie używam goto To cenna lekcja i doskonały pomysł na wolny weekend.
W każdym razie odradzam Ci realizowanie Twojego pomysłu bo gdy nabierzesz większej wprawy w kodzeniu uznasz, że była to strata czasu. To trochę jak LazyFoo i jego przygody opisane w sekcji Over Engineering (http://lazyfoo.net/articles/article01/index.php) - stworzysz super hiper ultra giga fajny kod, który w rzeczywistości będzie koszmarny, pewnie nie zawsze sprawny, a Ty stracisz na niego kilka godzin i powiesz sobie "Kurde, mogłem zrobić inne zadanie na SPOJu"
(Linki daję celowo byś miał jakąś lekturę -> to też lepsze od Twojego wyzwania)