Zkusíme to jinak. Nechal jsem se inspirovat v zahraničí a uděláme takovou malou soutěž. Já navrhnu zadání (dostatečně lehké) a Vy zkusíte poslat implementaci části programu, která bude provádět zadání. Pro normálního programátora cca 1-2 hodiny práce. Doufám, že to zkusíte.
Cílem je porovnat různé řešení a hlavně začátečníkům ukázat jak to dělají jiní. Budou vyhlášeni dva vítězové:
Druhá cena nemusí být vyhlášena (málo účastníků, autor už vyhrál první cenu …).
Uzávěrka je 29.7.2010 23:59. Řešení zasílejte přes kontaktní formulář.
Pravidla:
Ceny:
Implementujte naznačenou funkci CountDigit tak, že převezme předaný text a provede na něm tyto operace:
Máme 456h7896 2. Tj. 4+5+6+7+8+9+6+2 = 47 -> 4+7 = 11 -> 1 + 1 = 2. Výsledek je číslo 2.
Pozor na předávané hodnoty, hodně se tak dá optimalizovat. Prohlédněte si vstupní data, můžete tak něco ušetřit (všechna data jsou na jednom řádku - jeden řádek textu a ten má rozumnou délku). TStringList je použit schválně.
Stáhněte si soubor data.zip, po rozbalení vznikne data.txt. Tento soubor bude použit i pro výsledný test. Snad jsem na nic nezapomněl.
Aktualizace - demo projekt ke stažení projekt.zip
program Project1;
{$APPTYPE CONSOLE}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
{$STRINGCHECKS OFF}
{$INLINE ON}
{$O+}
uses
Sysutils,
windows,
classes;
function CountDigit(const lst: TStrings):Integer;
begin
// Result je výsledek
end;
var
lst: TStringList;
i:Integer;
tick, tickend: Cardinal;
iResult: Integer;
begin
lst := TStringList.Create;
try
lst.LoadFromFile('data.txt');
tick:= GetTickCount;
iResult := 0;
for i := 1 to 10000000 do
Inc(iResult, CountDigit(lst));
tickend := GetTickCount;
writeln(Format('Result = [%d], Time = [%d]', [iResult, tickend - tick]));
finally
FreeAndNil(lst);
end;
end.
Datum: 2010-07-15 22:17:00 Tagy: delphi, verze, optimalizace