Ahoj kluci, stejně jako tomu bylo minulý týden v Javě, i tento týden
budeme v pravidelné minisoutěži o placku a samolepky vytvářet webovou
aplikaci. Tentokrát bude v C# za použití ASP.NET MVC. Máte
šanci naučit se super technologii, která vás jednou bude živit. Vše
potřebné je popsané v tutoriálech - http://www.itnetwork.cz/…/asp-net/mvc, stačí jen
chtít.
Zadání úlohy je jednoduché. Vytvořte webovou aplikaci v ASP.NET MVC,
která vypočítá modus (nejčastěji se vyskytující prvek)
z čísel zadaných ve formulářovém poli. Čísla jsou zadaná slovy
a jsou vždy do 100, oddělená jsou čárkou.
Pokud je modů více, např. pro vstup:
sto, padesát šest, dvacet, sto, padesát šest
budou vypsány všechny, zde tedy 100, 56.
Snažte se o co nejhezčí kód a efektivní řešení. Jelikož se na
devbooku jedná o novou technologii, rozdám placky hned pěti
nejlepším řešitelům! Roli hraje jak rychle odevzdáte a jak
kvalitní aplikace bude.
Na začátku máš příklad "dvacet, osmdesát-dva, pět, dvacet-šest".
Pokud ale číslo obsahuje "dva" aplikace nefunguje. Bere jenom "dvě".
"osmdesát-dvě" moc hezky nezní.
Jaj detailista, ale máš pravdu, bylo by lepší to mít "dva" a
"osmdesát-dva". Ale už se mě tento detail nechce upravovat, abych to tu
nezahltil re-linky.
Ahoj,
tak po několika hodinach bojo a uznání že samo mi to do hlavy nepřiskáče
odevzdávám své nakonec celkem jednoduché řešení. Moje představa
dokonalého kódu je jiná, ale co nadělám přeci jen s tím začínám.
Měl bych po této práci zhodnotit MVC, tak jo i ne. Líbí se mi ten
koncept oddělovat model od pohledu kontrolérem, ale nelíbí se mi že ASP.NET
nás od úplně všeho odstiňuje a my pomalu nevíme co se tam děje, to se mi
zas na PHP líbí víc, že vždycky vím jak k tomu došlo.
Pokud se to naučíte je ASP.NET skvělé a už se ho nikdy nepustíte.
Omlouvám se, ale o co jde?
Zadá se slovy řada čísel (jedna, čtyři, dva, tři, jedna, čtyři) a ty
které tam jsou více jak jednou tak se vypíší jako číslo? (V tomto
případě 1 a 4?)
Přidávám svou verzi. Ještě asi není finální, ale radši to sem
hodím. Nechtělo se mi psát plně LINQ řešení, proto jsem tam přidal i
něco svých algoritmů.
Tento týden je toho spoustu, tak budu stručný. Také se omlouvám těm, co
mi psali do soukromých zpráv, ale nemám kapacitu na to, abych si před
hodnocením procházel vaše řešení.
Placku získávají (pořadí nemá souvislost s kvalitou
výsledku):
[me|]3997[/me|] - Chválím ten validátor, jsi jediný, komu to řeší
chybné vstupy. Výpočet modu jsi vyřešil skvěle.
Michal Žůrek - misaz - Helper se mi zdá zbytečný, můžeš si najít prostě
maximální hodnotu pomocí Max() a k ní potom klíče. Koukám, že translator
jsi udělal obousměrný, chválím.
Petr Domes (petrds) - Aplikace se chová zvláštně když zadám chybnou
hodnotu. Místo ForEach bych raději použil Join. To řešení s předponami je
zajímavé, ale nějak jsem se v tom ztratil, vypadá to, že to funguje.
Ostatní mají šanci své chyby opravit v další soutěži, kde
bude shodné zadání pro technologii ASP.NET Web Forms. Jsou to:
Girtas - Výpočet modu je hrozně neefektivní,
provádíš zbytečně vnořené cykly a spoustu zbytečných iterací, což
dává minimálně složitost O(n2). Dále např. mazání z listu je
velmi drahá operace.
Jakub[Saarix] - Zajímavý objektový návrh, bohužel jsi
úplně zapomněl na čísla mezi 10 a 20 (např. čtrnáct). Modus se zdá
také neefektivní, je řešen vnořenými cykly.
Arakamus - Blahořečil jsem ti za ten výpočet modu a
potom tam najdu 100 hodnot ručně vypsaných pod sebou a dokonce ještě přes
metodu Add. Když už, tak List jde inicializovat z pole nebo obsahuje metodu
AddRange. Nicméně ten list máš 3x větší, než je potřeba.
Jinak čekal jsem, že když víte, že čísla budou do stovky a v zadání
se nalézá slovo efektivní, že někoho napadne počítat modus pomocí
pomocného pole o velikosti 100 Stačí projet vstupní hodnoty od uživatele a pro každou v
pomocném poli zvýšit její počet o 1. Hodnota od uživatele je potom indexem
do tohoto pole.
Výherci nechť publikují svá řešení a napíší x, vy už
to znáte
protože celkem všechny placky mám, tak mi do profilu dej OOP (vzít C# za
zdrojový kód ve VB mi přišlo blbé) a posílat mi nemusíte nic. Publikuji
to ještě dnes.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.