Witam wszystkich, podczas pracy nad obecym projektem musiałem rozwiązać pewien problem, którego implementacja w Object Pascalu zajęła mi ok. 20 minut; Z racji tej, że temat problemu jest dość ciekawy - ogłaszam konkurs; Opis problemu poniżej:
Uwaga! Temat ten nie jest związany z żadnym wyłudzaniem kodu na jakieś zaliczenie! Nie chodzę ani do szkoły, nie studiuję ani nawet nie pracuję na stanowisku, które jest związane z programowaniem; W załączniku zamieszczam skompilowany moduł zawierający tylko i wyłącznie moją fukcję; Deklaracja funkcji to:
function AddBytesPhrase(sSize: ShortString): ShortString;
Napisać funkcję, która do podanej w parametrze liczby będzie dodawać słowo bajtów ale w taki sposób, by słowo było poprawnie odmieniane (jak to w polskiej mowie) przy każdej podanej liczbie, np:
Wejście Wyjście '1' '1 bajt' '2' '2 bajty' '4' '4 bajty' '5' '5 bajtów' ... '22' '22 bajty' ... '272734643' '272734643 bajty' ...
a także spełniać następujące warunki:
- funkcja posiada jeden parametr - łańcuch znaków, który stanowi dowolną naturalną i nieujemną liczbę (typ
ShortString
), długość liczby max. 255 znaków - wartością zwracaną przez funkcję jest łańcuch, który stanowi podaną w parametrze liczbę + znak spacji + słowo bajów w odpowiedniej odmianie
- funkcja nie może wykorzystywać gotowej funkcji realizującej zadanie (choć chyba takiej w kompilatorze nie ma :)) ani korzystać z żadnego dodatkowego modułu prócz
System
(brak blokuuses
) - funkcja może wykorzystywać jedynie systemowe funkcje Ord i Length
- funkcja nie może posiadać żadnych lokalnych stałych, zmiennych, typów itd. i nie może korzystać z globalnych
- w ciele funkcji każda instrukcja musi być w osobnej linii, także po
else
- musi być jak najszybsza i posiadać jak najmniej instrukcji
- funkcja nie może posiadać instrukcji inicjalizującej wartość początkową rezultatu, a pomimo tego kompilator nie wyświetla hint'a o jej braku (inicjalizacji)
- długość kodu stanowi pełna definicja funkcji (nagłówek funkcji wraz z blokiem
begin end
w osobnych liniach)
To tyle, jeśli chodzi o warunki; Jeżeli chodzi o nazewnictwo - jest dowolne; Implementacja nie powinna zająć długo czasu, ale jest ciekawą zagadką;
Dodam, że moja funkcja posiada 24 linie bez linii pustych i spełnia wszystkie wyżej wypunktowane warunki;
Kod udostępnie po tym, jak ujżę kod szybszy od mojego i który spełnia wszystkie warunki;
Zachęcam do udziału; Do wygrania... nie wiem, dobre piwo postawię on-line :)
Czekam na kody, pozdrawiam;
EDIT: Poprawiłem wyjście, bo źle napisałem... :)