Pro zájemce třetí kolo soutěže. Úkolem je optimalizovat demo funkci, pravidla se od minule v podstatě nemění. Nejlepší (tj. nejrychlejší) vyhraje tričko s logem FireMonkey, flašku 4GB a případně 2x hrníček s logem Borland (viz minule, fakt se z něj dobře pije). Případně může být udělena i druhá cena (za nejzajímavější kód nebo nejrychlejší řešení bez ASM).
Uzávěrka je 21.3.2012 ve 20 hodin, ale řešení se může posílat průběžně (každý může poslat 3 řešení), ale nejdříve 1.3 - chtěl bych si zkusit ještě trošku poladit svoje řešení.
Doufám, že to bude zábava.
Napište co nejrychlejší variantu
procedure IntToStrExFmt(i:Integer; var s:string);
var
cr: Currency;
begin
cr := i;
FmtStr(s, '%.0n', [cr]);
end;
Funkce tedy vrací text, který obsahuje převedenou hodnotu čísla, ale bere v potaz oddělovač tisíců (+ znaménko). Program na konci provádí několik volání pro testovací výpis - výsledek se vypisuje včetně velikosti řetězce a musí se rovnat demo výstupu.
V programu upravte svoje jméno, případně podmíněnou kompilaci.
Ukázka výsledku:
-123 456 789
-2 147 483 647
2 147 483 647
123 456
Běh programu:
q:\soutez3>soutez.exe
ThousandSeparator:160
Autor: Radek Červinka, kompilator:23,00
Last time = [18787]
Min time = [18787], Average time = [18818], Max time = [18845]
Kontrola:
-123 456 789, 12
-2 147 483 647, 14
2 147 483 647, 13
123 456, 7
-1, 2
0, 1
soutez3.zip - demo program.
Osobně jsem použil Delphi XE2, demo se provádí cca 19s. Vybral jsem záměrně takový příklad, který má velký potenciál pro optimalizaci a může si ho zkusit různě zkušený programátor. Délku provádění jsem odhadl podle mé soukromé verze soutěžního řešení s tím, že určitě nebudu nejrychlejší - tak ať je rezerva.
Pro antivirový test můžete použít virusscan.jotti.org.
V případě nejasností napište komentář.
A ještě jednou: je to pro zábavu.
Datum: 2012-02-24 22:59:00 Tagy: optimalizace