NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Soutěž: Machr na algoritmy - Regulární výrazy

Soutěž již skončila

Zadání

V dnešním machrovi si zkusíme implementovat funkcionalitu, kterou využíváme téměř v každé aplikaci. Budou to regulární výrazy. Regulární výraz je sekvence znaků, podle kterých vyhledáváme v zadaném textu shodu.

Rozhraní

Pogram dostane na standardním vstupu zadaný text ukončený znakem nového řádku. Dále dostane regulární výraz, opět ukončený znakem nového řádku. Program vrací hodnotu 0, jestliže byla nalezena shoda. V případě, že shoda nalezena nebyla, program vrátí hodnotu 1. Jestliže regulární výraz nebude validní, program vrátí hodnotu 2. To jsou případy, kdy bude obsahovat znaky, které nemají žádný význam, nebo formát regulárního výrazu nebude správný (například nebude ukončena závorka). Na standardní výstup program nic nevypisuje, pouze vrátí návratový kód.

Implementace

Regulární výrazy budou rozděleny do několika kategorií. Doporučuji implementovat funkcionalitu postupně, jak je vypsána.

  • Pouze jednotlivé znaky. Prakticky se kontroluje pouze to, zda je vzor totožný s textem. Text i vzor bude obsahovat pouze číslice, malé a velké písmena bez diakritiky a mezeru. To platí pro všechny následující body. Pokud bude ve vzoru nebo textu znak, který do této skupiny nepatří (například "č"), program vrátí hodnotu 2.
  • Vzor bude obsahovat množiny, které se zapisují mezi hranaté závorky. Například pro vzor [agt] je shoda v řetězci, který obsahuje pouze jeden ze znaků "a", "g", "t". Jestliže nebude hranatá závorka ukončena, program vrátí hodnotu 2.
  • Vzor bude obsahovat operátory, kontrolující počet výskytů předchozího znaku. Je to znak * (předchozí znak se nemusí vyskytovat, nebo se může libovolně opakovat), + (předchozí znak se musí vyskytovat minimálně jednou) a znak ? (předchozí znak se nemusí vyskytovat, nebo se vyskytuje právě jednou).
  • Množiny můžou být zapsány i rozpětím. Tedy [a-z] jsou všechna malá písmena, [a-zA-Z] jsou všechna písmena, [0-9] jsou všechny číslice. Kromě toho lze množinu zadat speciálním tvarem [:alpha:] pro všechna písmena, [:upper:] pro velká písmena, [:lower:] pro malá písmena, [:num:] pro číslice a [:alnum:] pro všechny znaky kromě mezery.
  • Do tohoto bodu musel regulární výraz pojmout celý text. To je důležité. V dalším kroku se bude kontrolovat, jestli bude nalezen regulární výraz kdekoliv v textu. Při prvním výskytu se program ukončí a vrátí hodnotu 0.
  • Předposlední varianta přidává znak "^" do množin a obrací význam. Jestliže [abc] pasuje na text, který obsahuje "a", "b" nebo "c", [^abc] pasuje na text, který obsahuje libovolný znak kromě "a" "b" nebo "c".
  • V poslední iteraci program bude umět zpracovat znak "^" mimo množinu (značí začátek slova) a znak "$" (značí konec slova). Například regulární výraz "^aha" vrátí 0 (úspěch) pro slovo "aha", ale 1 (neúspěch) pro slovo "dlaha".

Hodnocení
Jsou povoleny jazyky C++, C#, Java a PHP. Další jazyky po domluvě.
Bude samozřejmě hodnocena funkcionalita, ale i kvalita kódu!

Nakonec bych chtěl napsat pár rad pro snadnější implementaci.

  • Dodržte rozhraní. Program nemá výstup, vrací pouze návratový kód, do konzole nic nevypisujte.
  • Regulární výrazy se zpravidla řeší konečným stavovým automatem. Jeden zdroj můžete najít na Itnetwork. Kromě toho je na internetu spousta materiálu k tomuto tématu.

EDIT: Pro úspěšné řešení je nutné mít řešení otestované! V odevzdaném řešení tedy musí být i projekt s testy.

Níže uvedené příklady předpokládají kompletně splněné zadání. nejdřív je uveden vzor, poté text.

"Petr" "Vcera jsem byl s Petrou"
"[a-z]k" "trakar"
"vr+" "vrrrrr" i "vratnice" ale ne "vana"
"vr?a" "vrah" i "vana" ale ne "vrrrrr"
"m[^h-z]" "mazat", ale ne "umucit"
"^stre" "na strese" ale ne "prostredi"
"[a-zA-Z0-9 ]*" vyhovuje všemu

Výhra

Vítěz dostane placku Machr, pár samolepek a ocenění do portfolia.

Výhra

Výsledky

Jméno bodů Řešení ( Stáhnout vše )
tomisoka 90 Stáhnout řešení
pocitac770 85 Stáhnout řešení
dave_23 70 Stáhnout řešení

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Patrik Valkovič:8.2.2016 11:07

V dnešním machrovi si zkusíme implementovat regulární výrazy.

Soutěž končí 21. února 20:00, tak se nezapomeň zapojit! :)

Odpovědět
8.2.2016 11:07
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Atrament
Člen
Avatar
Odpovídá na Patrik Valkovič
Atrament:8.2.2016 12:58

s/standartní/stan­dardní/g

 
Nahoru Odpovědět
8.2.2016 12:58
Avatar
Odpovídá na Atrament
Patrik Valkovič:8.2.2016 13:08

Jo díky, vždycky si to odvodím špatně :/ :D

Nahoru Odpovědět
8.2.2016 13:08
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
budacjozef98
Tvůrce
Avatar
budacjozef98:8.2.2016 13:51

Python je povoleny ? :)

 
Nahoru Odpovědět
8.2.2016 13:51
Avatar
Odpovídá na budacjozef98
Patrik Valkovič:8.2.2016 14:29

Nechceš použít něco jiného? :D Já Python neumím :(

Nahoru Odpovědět
8.2.2016 14:29
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Michael Škrášek:8.2.2016 14:37
Text i vzor bude obsahovat pouze číslice, malé a velké písmena bez diakritiky a mezeru

To znamená, že text nebude obsahovat ani čárky, tečky? ... to je divný ne, co to pak bude za text :D

Nahoru Odpovědět
8.2.2016 14:37
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Odpovídá na Michael Škrášek
Patrik Valkovič:8.2.2016 14:39

Jo zdá se to, ale uvědomuješ si, jak bys to tím stížil? To by znamenalo přidání escapování znaků, začátek a konec slova by taky probíhalo na základě několika podmínek (na rozdíl od prosté mezery). Buď rád, že je to jak je :D

Nahoru Odpovědět
8.2.2016 14:39
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Michael Škrášek:8.2.2016 14:43

Aspoň to teda bude jednoduší :)

Nahoru Odpovědět
8.2.2016 14:43
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Patrik Valkovič:8.2.2016 14:56

Pozn.: byl přidán další požadavek - testy ;-)

Nahoru Odpovědět
8.2.2016 14:56
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Neaktivní uživatel:8.2.2016 16:38

Můžem k implementaci použít regulární výrazy? :D

Nahoru Odpovědět
8.2.2016 16:38
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:8.2.2016 16:43

No....jakou čekáš odpověď? :D Hezky naparsovat :)

Nahoru Odpovědět
8.2.2016 16:43
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Lukáš Křehula:8.2.2016 17:24

Nemohl by jsi přidat nějaký příklad vstup-regex-výstup?

 
Nahoru Odpovědět
8.2.2016 17:24
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
tomisoka:8.2.2016 20:10

Zajímavé téma, jen by mě zajímalo pár věcí:
Co si mám představit pod tímto:

Kromě toho lze množinu zadat speciálním tvarem [:alpha:] pro všechny znaky


Do tohoto bodu musel regulární výraz pojmout celý text.

Toto mě mírně mate, máme tedy implementovat jednotlivě všechny možné kategorie, nebo stačí splnit všechny tyto parametry v jednom programu?


Regulární výrazy se zpravidla řeší konečným stavovým automatem.

Doufám, že toto není povinnost, protože tento způsob mi přijde mírně nepřehledný.


V odevzdaném řešení tedy musí být i projekt s testy.

Jak funguje tohle? Ještě nikdy jsem žádné takovéto testy k mému projektu nepřidával. Stačí soubor s příkladovými vstupy + jejich výstup?


Přidaná funkcionalita je žádaná? Např '.' pro libovolný znak.


BTW:

Je to znak * (předchozí znak se nemusí vyskytovat, nebo se může libovolně opakovat), + (předchozí znak se musí vyskytovat minimálně jednou) a znak ? (předchozí znak se nemusí vyskytovat, nebo se vyskytuje právě jednou).

 
Nahoru Odpovědět
8.2.2016 20:10
Avatar
Odpovídá na tomisoka
Patrik Valkovič:8.2.2016 20:28

Díky, asi nějaký autocorrect :(
1 - [:alpha:] jsou všechna písmena, je to opraveno.
2 - Musel pojmout celý text znamená, že pro vstup "ad abcd" a regulární výraz "abcd" měl program vrátit 1 (neúspěch), protože prvotní sekvence "ad" nebyla zadána.
3 - Kategorie jsem se snažil seřadit podle obtížnosti. Iterativním přístupem se mi to jeví jako nejschůdnější řešení, ale samozřejmě postup nechám na vás ;) Samozřejmě program bude pouze jeden, který bude obsahovat všechny kategorie.
4 - Stavový automat povinný není, ale to že se to pomocí něho obvykle řeší má své důvody (a přehlednost je jedním z nich). Je to machr, máte se něco nového naučit, tak proč to nezkusit ;-)
5 - O testování se tu rozepisovat nebudu. Najdi si na Googlu Unit testy, potom tě to už nasměruje.
6 - Tečku jsem zapomněl :( Nicméně už to opravovat nebudu a další funkcionalita není vyžadována.

Nahoru Odpovědět
8.2.2016 20:28
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Neaktivní uživatel:9.2.2016 16:06

[:alpha:] platí pořád jen a-Z (tj bez diaktritiky)?

Nahoru Odpovědět
9.2.2016 16:06
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:9.2.2016 16:12

Ano, ale pozor. Formální zápis je [a-zA-Z], coz je ekvivalence k [:alpha:].

Nahoru Odpovědět
9.2.2016 16:12
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Štefan Pružinský:9.2.2016 16:35

Ahoj, mohol by si uviesť pár exemplárnych vstupov a výstupov z použitím daných operátorov na lepšiu ilustráciu.

Nahoru Odpovědět
9.2.2016 16:35
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Patrik Valkovič:9.2.2016 16:39

Zítra je přidám.

Nahoru Odpovědět
9.2.2016 16:39
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:9.2.2016 20:19

Javascript může být? Včera jsem dopsal překladač, tak bych ho zkusil trochu ořezat. :D

 
Nahoru Odpovědět
9.2.2016 20:19
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na Patrik Valkovič
Ondřej Štorc:9.2.2016 20:38

Mohou být množiny definovány i takhle: [a-Z], nebo ho lze zapsat jen takhle: [a-zA-Z]?

Nahoru Odpovědět
9.2.2016 20:38
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Odpovídá na 1Pupik1989
Patrik Valkovič:9.2.2016 21:46

No tak nakonec jsem se rozhodl, že může být i Javascript, ale podmínka konzolové apliakce zůstává. Nechci to pouštět v prohlířeči, proto se prosím podívej na JSDB (http://www.jsdb.org/index.html). Počítej s tím prosím.
To stejné platí pro PHP, bude spuštěno v konzoli!! Nevím, jestli jsem to dostatečně zdůraznil. Pro bližší informace prostudujte http://www.thecave.info/…-input-user/ a http://stackoverflow.com/…ble-possible.
Množina nemůže být definována [a-Z], platí pouze [a-zA-Z] ale samozřejmě i další kombinace (uvedu zítra v demo vstupech).
[a-t] [a-z0-7] [a-tA-T] a podobně. Ale nemůžou být spolu znaky různé kategorie [a-9] [a-Z] atd (v takových situacích program vrátí 1 (neúspěch).

Nahoru Odpovědět
9.2.2016 21:46
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Ondřej Štorc
Štefan Pružinský:9.2.2016 21:49

Asi nie... Btw. teším sa na ďalší spoločný súboj. :D

Ano, ale pozor. Formální zápis je [a-zA-Z], coz je ekvivalence k [:alpha:].

Editováno 9.2.2016 21:51
Nahoru Odpovědět
9.2.2016 21:49
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Patrik Valkovič
Štefan Pružinský:9.2.2016 21:51

Tak si ma predbehol...

Ale nemůžou být spolu znaky různé kategorie [a-9] [a-Z] atd (v takových situacích program vrátí 1 (neúspěch).

Nemám to byť náhodou 2? Výraz nie je validný, nie?

Nahoru Odpovědět
9.2.2016 21:51
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Patrik Valkovič:9.2.2016 21:52

Jo, už mi to nejde opravit (včetně těch překlepů) :(

Nahoru Odpovědět
9.2.2016 21:52
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Štefan Pružinský:9.2.2016 21:54

Myslím, že ide. Teraz som to skúšal... Nastav si kurzor na konečnú pozíciu toho tlačidla a počas refreshu kontinuálne klikaj... Hodí Ťa to späť do formulára komentáru, kde ho môžeš upraviť... :)

Editováno 9.2.2016 21:56
Nahoru Odpovědět
9.2.2016 21:54
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Patrik Valkovič:10.2.2016 14:11

Byly přidány ukázky.

Nahoru Odpovědět
10.2.2016 14:11
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
balaz.marek94:11.2.2016 9:23

Môže byť aj čosi takéto?

[a-z] [:upper::lower:]m[:alnum: ]

Ak to náhodou nebude vidno, tak vo výraze sú dve medzery :)

 
Nahoru Odpovědět
11.2.2016 9:23
Avatar
Odpovídá na balaz.marek94
Patrik Valkovič:11.2.2016 9:28

Ne, kombinovat se můžou pouze zápisy zapsané s pomlčkou. [:upper::lower:] je přece [:alpha:]. Nicméně může být zápis

[a-z ]

To znamená nějaké malé písmeno nebo mezera. I tohle je platné:

[a-tABC0-2 ]
Nahoru Odpovědět
11.2.2016 9:28
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
balaz.marek94:11.2.2016 14:52

Chápem, ešte jedna otázka, asi hlúpa keďže klasické regulárne výrazy ju používajú, ale predsa. Môže byť výraz zapísaný aj takto? :-)

[a-z]m[a-z]
 
Nahoru Odpovědět
11.2.2016 14:52
Avatar
Odpovídá na balaz.marek94
Patrik Valkovič:11.2.2016 14:59

Samozřejmě. To znamená libovolné malé písmeno, potom m následujícím opět libovolným malým písmenem.

Nahoru Odpovědět
11.2.2016 14:59
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
1Pupik1989
Člen
Avatar
1Pupik1989:11.2.2016 19:55

"vr?" "vrah" i "vana" ale ne "vrrrrr"

Opravdu? Já bych řekl, že "vrrrrr" projde.

 
Nahoru Odpovědět
11.2.2016 19:55
Avatar
Odpovídá na 1Pupik1989
Patrik Valkovič:11.2.2016 19:59

? znamená, že se nevyskytuje nebo se vykytuje jednou. To znamená že vrah projde, vana taky (r se vykytovat nemusí).
A jak se na to teď dívám, "vrrr" skutečně projde :D Ale kdyby byl vzor "vr?a", tak vana i vrah projdou, ale vrr už ne ;-)

Nahoru Odpovědět
11.2.2016 19:59
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
1Pupik1989
Člen
Avatar
Odpovídá na Patrik Valkovič
1Pupik1989:12.2.2016 10:16

To je pravda. Jen jsem se 2x nad tím pozastavil, než jsem napsal. Projde vlastně vše co začíná na "v". ;-)

 
Nahoru Odpovědět
12.2.2016 10:16
Avatar
Odpovídá na Patrik Valkovič
Zdeněk Pavlátka:12.2.2016 11:12

Všechny příklady vrací 0 (úspěch).

"vr+" "vrrrrr" i "vratnice" ale ne "vana"

To je trochu podivná formulace, nejpreve napíšeš, že všechny vrací nulu, ale pak v příkladech uvádíš i možnosti, které by projít neměly

Nahoru Odpovědět
12.2.2016 11:12
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Patrik Valkovič
Štefan Pružinský:13.2.2016 15:06

Do tohoto bodu musel regulární výraz pojmout celý text. To je důležité. V dalším kroku se bude kontrolovat, jestli bude nalezen regulární výraz kdekoliv v textu. Při prvním výskytu se program ukončí a vrátí hodnotu 0.

Myslíš to všeobecne, alebo doslovne? V kontexte, v ktorom to bolo povedané to znamená niečo ako:
Nesprávne (pre direktívy text, +, ?, *, [] platí: "Do tohoto bodu musel regulární výraz pojmout celý text"):

Pattern: fr*d?[^d-z]
Text: ABCD/frrrdc/jska - potencionálna, ale neuznaná zhoda => nejde o celý text, ale len o výsek z neho

Správne:

Pattern: fr*d?[^d-z]
Text: /frrrdc/

pozn.: // ohraničuje zhodu.

A naopak direktívy $ a ^ na začiatku/konci textu treba hľadať na hocijakom mieste v texte. Znie to trochu nelogicky a malo by to byť skôr úplne naopak, nie? Prípadne si tým poukazoval na dva odlišné módy programu... Vopred ďakujem za vysvetlenie. :)

Nahoru Odpovědět
13.2.2016 15:06
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Patrik Valkovič:13.2.2016 15:11

Ano a ano. Buď implementujete verzi, která zkoumá celý text (verze 1), nebo verzi, která zkoumá jednotlivé části textu (proto jsou direktivy ^$ zařazeny až na konec).
Zadání je vymyšleno k iterativnímu vývoji. Do té doby bude kontrolován celý text. V další iteraci se program vylepší, aby mu stačila pouze část textu. Bylo by vhodné přidat informaci o fázi vývoje do projektu.

Nahoru Odpovědět
13.2.2016 15:11
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Neaktivní uživatel:15.2.2016 16:21

Asi bysme měli řešit i backtracking, že?
např

"vr?rak" => "vrak" "vrrak" "vrrrak"
Nahoru Odpovědět
15.2.2016 16:21
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:15.2.2016 17:26

První a druhé projde, třetí už ne (můžou být maximálně 2 r).

Nahoru Odpovědět
15.2.2016 17:26
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Patrik Valkovič
Neaktivní uživatel:15.2.2016 17:31

a jo, třetí by nemělo

Nahoru Odpovědět
15.2.2016 17:31
Neaktivní uživatelský účet
Avatar
Odpovídá na Patrik Valkovič
Štefan Pružinský:16.2.2016 14:36

Ešte jedná, zdanlivo primitívna otázka: Bude všetok text/vzorka v jednom odstavci?
Jeden odstavec:

No tak nakonec jsem se rozhodl, že může být i Javascript, ale podmínka konzolové apliakce zůstává. Nechci to pouštět v prohlířeči, proto se prosím podívej na JSDB (http://www.jsdb.org/index.html). Počítej s tím prosím. To stejné platí pro PHP, bude spuštěno v konzoli!! Nevím, jestli jsem to dostatečně zdůraznil. Pro bližší informace prostudujte http://www.thecave.info/…-input-user/ a http://stackoverflow.com/…ble-possible. Množina nemůže být definována [a-Z], platí pouze [a-zA-Z] ale samozřejmě i další kombinace (uvedu zítra v demo vstupech). [a-t] [a-z0-7] [a-tA-T] a podobně. Ale nemůžou být spolu znaky různé kategorie [a-9] [a-Z] atd (v takových situacích program vrátí 1 (neúspěch).

Viac:

No tak nakonec jsem se rozhodl, že může být i Javascript, ale podmínka konzolové apliakce zůstává. Nechci to pouštět v prohlířeči, proto se prosím podívej na JSDB (http://www.jsdb.org/index.html). Počítej s tím prosím.
To stejné platí pro PHP, bude spuštěno v konzoli!! Nevím, jestli jsem to dostatečně zdůraznil. Pro bližší informace prostudujte http://www.thecave.info/…-input-user/ a http://stackoverflow.com/…ble-possible.
Množina nemůže být definována [a-Z], platí pouze [a-zA-Z] ale samozřejmě i další kombinace (uvedu zítra v demo vstupech).
[a-t] [a-z0-7] [a-tA-T] a podobně. Ale nemůžou být spolu znaky různé kategorie [a-9] [a-Z] atd (v takových situacích program vrátí 1 (neúspěch).
Nahoru Odpovědět
16.2.2016 14:36
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Štefan Pružinský
tomisoka:16.2.2016 14:52

Text i vzor bude obsahovat pouze číslice, malé a velké písmena bez diakritiky a mezeru.

Ale reálně pokud by ti tam dal i více řádků tak by to funkcionalitě nemělo uškodit.


A taky moc by to nešlo vzhledem k inputu:

Program dostane na standardním vstupu zadaný text ukončený znakem nového řádku. Dále dostane regulární výraz, opět ukončený znakem nového řádku.

 
Nahoru Odpovědět
16.2.2016 14:52
Avatar
Odpovídá na tomisoka
Štefan Pružinský:16.2.2016 14:57

Práve o to ukončenie znakom nového riadku mi išlo... Moja chyba - nehľadal som odpoveď v zadaní. Díki. :)

Nahoru Odpovědět
16.2.2016 14:57
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:18.2.2016 23:08

Bere se jako validní "regulární výraz" i prázdný výraz?

 
Nahoru Odpovědět
18.2.2016 23:08
Avatar
Odpovídá na pocitac770
Michal Žůrek - misaz:18.2.2016 23:11

Proc by nemel?

 
Nahoru Odpovědět
18.2.2016 23:11
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
pocitac770:18.2.2016 23:14

Právě, že mě to napadlo, že všechny podmínky splňuje, tak se pro jistotu ptám, protože na tuhle problematiku tady snad zatím nikdo nenarazil :D

 
Nahoru Odpovědět
18.2.2016 23:14
Avatar
Odpovídá na pocitac770
Patrik Valkovič:18.2.2016 23:15

Ano, ale z principu vždy vrátí 0 (úspěch).

Nahoru Odpovědět
18.2.2016 23:15
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
pocitac770
Tvůrce
Avatar
pocitac770:21.2.2016 15:25

Z těch Unit Testů jsem teda fakt jelen... Chápu to dobře, že vlastně máme vytvořit zvlášť projekt s třídou, přes kterou budeme simulovat jednotlivé vstupy? A máme udělat jeden "test" pro každý bod?

 
Nahoru Odpovědět
21.2.2016 15:25
Avatar
Odpovídá na pocitac770
Patrik Valkovič:21.2.2016 16:23

Program má určitě i nějakou vnitřní logiku, kterou by bylo vhodné otestovat. Formu a rozsah testů nechávám na vás.

Nahoru Odpovědět
21.2.2016 16:23
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Patrik Valkovič:21.2.2016 23:42

Soutěž ukončena, pokusím se to do zítřka opravit.

Nahoru Odpovědět
21.2.2016 23:42
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Patrik Valkovič:22.2.2016 21:24

Díky všem za účast, zde jsou výsledky:

tomisoka - 90 bodů
Výborné řešení. Neprošly pouze 4 vstupy, ale to bylo pravděpodobně špatnou formulací v zadání. N druhou strany, je rozdíl mezi koncem slova a koncem fráze! Ačkoliv jsi proti tomu měl námitky, nakonec jsi přeci jen udělal stavový automat (ať si to uvědomuješ nebo ne). Chválím chytré parsování vstupu (jako jedinný). Jen názvy tříd byly trochu matucí a chyběly testy.

pocitac770 - 85 bodů
Prošli všechny řešení až na 7. Bohužel pro některé vstupy vyhazoval program výjimky, a v takových situacích nemůžu udělit splnění soutěže. I když je v programu náznak stavového automatu, ta validace je naprosto šílená. Pokud bych začal přidávat další požadavky, tak je tento stav neudržitelný. Navíc je vše v jedné metodě.

dave_23 - 70 bodů
Oceňuji snahu o implementaci stavového automatu. Bohužel program neprošel ve 21 případech. Také chválím dokumentaci (jako jedinný)!! Jeden test se píše do jedné metody (aby od sebe šli odlišit). Když ti teď nějaký test neprojde, tak nezjistíš, pro kterou hodnotu. Vím že je to dost psaní navíc, ale z dlouhodobého hlediska je to mnohem lepší.
A mimochodem - pokrytí kódu testama bylo skoro 95%, dobrá práce :)

Placku tedy získává tomisoka Gratuluji :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
22.2.2016 21:24
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
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.

Zobrazeno 50 zpráv z 53.