pátek 5. února 2016

Uspěli byste na pohovoru? Podruhé...

Jednou za čas přibíráme do týmu nové lidi - což znamená hodně pohovorů s uchazeči.  Jak jsem už napsal tady, tak spíše upřednostňuji rozhovor nad kouskem kódu - přitom se nejedná o žádné záludnosti. Uchazeč dostává také za úkol něco malého naprogramovat - jen je trochu potíž najít to správné zadání. Úkol by neměl být úplně triviální, ale zase nemůže být těžký. Většina lidí je navíc nervozní, ať již více čí méně a i to je třeba zohlednit.  Takže následující úloha se může v případě, že si ji čtete doma, v klidu, jevit jako velmi jednoduchá, možná až primitivní.


Napište validační metodu, která vezme kolekci telefonních čísel a rozhodne, zda se čísla navzájem nevylučují, tedy například  seznam:


89 59 87, 85 59 88, 855

nebude validní, neboť poslední číslo je shodné se začátkem druhého čísla a tedy by nebylo možné toto druhé číslo zavolat, neboť po zadání třetího čísla by došlo ke spojení s číslem třetím (855).

Seznam:
78 89 59, 78 89 56, 455, 787, 797

naopak platný je.

Vstupní seznam je vždy kolekce řetězců a ty vždy obsahují jen čísla, tedy například:

new[] { "788959", "788956", "455", "787", "797" }

Určitě existuje spousta řešení, některá elegantní, některá zase výkonná,  a po určitých zkušenostech si troufám říci, že každý to řeší jinak.

Nabízím tady jedno možné řešení, ale netroufám si tvrdit, že je nejlepší - ostatně ono stačí, když si řešitel jakkoli poradí.

Klikněte tady a ukáže se kód.

7 komentářů:

  1. Opravdu :-( - opravím, dělám podobné chyby častěji, než je mi milé.

    OdpovědětVymazat
  2. Jenom poznamka

    "zda se čísla navzájem nevylučují"
    na podobne veci se koukam jako tester:
    tady mi prijde tento 'pozadavek' docela vagni
    jako tester bych tedy 855 taky uznal, jelikoz neni ten pozadavek nijak spocifikovan.
    BTW: tlf cisla bych obycejne overoval jenom na validitu - tedy moznost obsahovat i znamenko + a mezeru pro cteni lidma)
    ale chapu, ze je potreba zadat nejake zadani

    Rad

    OdpovědětVymazat
  3. Mohl by jste upřesnit, jak by měl být požadavek popsán, aby nebyl vágní?

    Co se týče validity telefonního čísla - je popsáno, jak je telefonní číslo zadáno, můžete to brát ták, že validace a úprava formátu již proběhla. Zbytečně by to komplikovalo zadání a validace či úprava formátu může být součástí jiného zadání - při pohovoru nedávám vždy stejný příklad.

    OdpovědětVymazat
    Odpovědi
    1. Taky mně vaše zadání dělá problém pochopit. Abych pochopil zadání, musím číst vzorová data a to podle mne není dobře.
      Slovo nevylučují je nepochopitelné. Navrhoval bych například:
      Napište validační metodu, která vezme kolekci telefonních čísel a ověří validitu.
      Aby kolekce byla validní, každé číslo v kolekci musí být unikátní a zároveň žádné jiné číslo z kolekce nesmí začínat tímto číslem.

      Vymazat
  4. Po kliknutí na odkaz něco problikne a pak mi to napíše, že nemám právo zobrazit tu stránku. Ale asi to dělala nějaká lama, když ten obsah problikne a zobrazí se :-).

    Jinak workaround je do adresy v browseru zadat javascript:toggle_visibility('codeExampleToShow'), to pak funguje bez keců

    OdpovědětVymazat
    Odpovědi
    1. Občas Blogger upraví odkazy sám od sebe - opravil jsem to, mělo by to být v pořádku.

      Vymazat