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)).