Program na vstupu dostane pracovní výkaz a vypíše jeho souhrn.
Vstup:
Každý řádek vstupu je buďto popis aktivity nebo komentář.
Soubor končí řádkem, který obsahuje pouze tečku (".").
Popis aktivity má tvar ZAČÁTEK ČINNOST KONEC.
ZAČÁTEK a KONEC jsou údaje o datu a čase ve tvaru dd.mm.yyyy hh:mm:ss.
Každá aktivita začíná i končí ve stejný den.
Datum a čas bude vždy validní, nemusíte to kontrolovat.
ČINNOST může být libovolně dlouhý text (složený z libovolného počtu slov).
ČINNOST je vždy oddělena právě jednou mezerou od ZAČÁTKU a KONCE (tyto mezery nejsou součástí názvu ČINNOSTI).
Řádky, které nesplňují uvedený tvar popisu aktivity, jsou komentáře a program je ignoruje.
Vstup obsahuje alespon jeden popis aktivity.
Výstup:
Výstupem programu je seznam činností a jejich celkového času.
Činnosti seřaďte sestupně podle celkové doby jimi strávené.
Každou činnost vypište ve tvaru CELKEM ČINNOST na samostatný řádek.
CELKEM je součet délek všech popisů aktivity s touto činností ve tvaru hh:mm:ss (hodiny, minuty i sekundy mají vždy dva znaky, např. 00:08:06 pro 0 hodin 8 minut a 6 sekund). Máte zaručeno, že žádný údaj CELKEM nebude mít víc než 24 hodin a že žádné dvě činnosti nebudou mít stejný celkový čas.
Příklad
Vstup
Tohle je ukazkovy soubor pro program pocitajici vykazy, a tyto radky nemaji spravny format a proto budou ignorovany 23.01.2020 11:33:31 ani tato radka nema spravny format ...a prazdne radky take ne. 24.10.2019 11:20:41 priprava SemALG 24.10.2019 11:21:00 24.10.2019 11:21:06 DU SemPgm 24.10.2019 11:52:50 24.10.2019 15:01:20 priprava SemPgm 24.10.2019 15:28:12 24.10.2019 17:21:35 DU SemALG 24.10.2019 18:50:00 25.10.2019 10:05:13 slajdy 25.10.2019 10:43:04 25.10.2019 11:35:56 slajdy 25.10.2019 12:56:01 25.10.2019 14:47:30 slajdy 25.10.2019 15:38:51 29.10.2019 10:45:31 TAJ Predmety 29.10.2019 10:46:00 29.10.2019 12:05:13 DU SemALG 29.10.2019 12:21:11 29.10.2019 12:30:12 SWP web 29.10.2019 12:36:38 29.10.2019 12:36:53 priprava SemALG 29.10.2019 13:14:47 29.10.2019 13:59:13 RCDX PY 29.10.2019 15:20:02 dalsi radek, ktery bude ignorovan... .
Výstup
02:49:17 slajdy 01:44:23 DU SemALG 01:20:49 RCDX PY 00:38:13 priprava SemALG 00:31:44 DU SemPgm 00:26:52 priprava SemPgm 00:06:26 SWP web 00:00:29 TAJ Predmety
Hinty
Datum můžete ignorovat (je stejný pro začátek i konec), zajímají vás jen hodiny, minuty a sekundy.
Buď použijte třídu TimeSpan, nebo si převeďte hodiny a minuty na sekundy a počítejte jen se sekundami.
Pokud používáte metody Parse nebo TryParse na TimeSpan nebo DateTime (případně Convert.ToDateTime), nastavte si explicitně kulturní prostředí – ReCodEx nejspíš používá anglický formát data a času, kdežto váš počítač možná používá český. Nejjednodušší je vložit tento řádek kódu na začátek vaší Main metody: System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("cs-CZ");.
Nezapomenňte, že C# umí snadno vybírat podřetězce – prvních 19 znaků na řádku můžete získat pomocí line[..19] a posledních 19 pomocí line[^19..].
Při volání metody Sort nebo při vytváření SortedDictionary (nebo podobných tříd, které řadí prvky podle klíče) můžete specifikovat porovnávač prvků – dělali jsme to na čtvrtém cvičení. V případě SortedDictionary nestačí porovnávací funkce (Comparison<T>), ale je potřeba IComparer<T>. Ten jde naštěstí z porovnávací funkce vyrobit snadno pomocí metody Comparer<T>.Create(Comparison<T>). Například porovnávač čísel na jejich sestupné seřazení můžete získat takto: Comparer<int>.Create((a, b) => b.CompareTo(a)).