Skip to content

Instantly share code, notes, and snippets.

@peterkracik
Forked from stefanluptak/moje_riesenie.ex
Last active May 23, 2019 09:42
Show Gist options
  • Select an option

  • Save peterkracik/bac90cab9d1a5dd9596ccf6ec7f2dfd1 to your computer and use it in GitHub Desktop.

Select an option

Save peterkracik/bac90cab9d1a5dd9596ccf6ec7f2dfd1 to your computer and use it in GitHub Desktop.

Intro

Milan si plánuje výlet a potrebuje si do batohu vhodne usporiadať oblečenie podľa toho, ako sa podmienky budú meniť v čase. K dispozícii má len 2 údaje.

  • dĺžku (D) jeho cesty
  • zoznam (Z) súradníc (S), na ktorých sa cestou nachádzajú stromy

Formát vstupov

Dĺžka D je kladné celé číslo. Súradnica S je kladné celé číslo, ktoré udáva, vo vzdialenosti koľkých metrov od štartu sa nachádza strom. S < D, S >= 0.

V zozname Z sa žiadna súradnica neopakuje viac ako 1-krát, taktiež count(Z) <= D.

Príklady vstupov

Čiže ak sú vstupy D = 3, Z = [0, 1, 2], tak to znamená, že na celej ceste sú stromy. Ak sú vstupy D = 3, Z = [], tak to znamená, že nikde na ceste nie sú stromy. Ak sú vstupy D = 3, Z = [0], tak to znamená, že hneď na začiatku je strom a potom už nič.

Zadanie

Vytvor funkciu, ktorej vstupy budú D a Z a jej výsledkom bude zoznam úsekov, ktoré bude Milan počas svojej cesty prechádzať. Jeden úsek bude mať formát [boolean, integer] kde prvý prvok bude udávať, či na danom úseku je aspoň jeden strom a druhý bude udávať jeho dĺžku.

Ukážky volania funkcie

useky(3, []) -> [[false, 3]]
useky(3, [1]) -> [[false, 1], [true, 1], [false, 1]]
useky(3, [0, 1, 2]) -> [[true, 3]]
useky(4, [2, 3]) -> [[false, 2], [true, 2]]

Pokyny

Funkciu vypracujte v ľubovoľnom programovacom jazyku resp. v pochopiteľnom pseudo kóde. Riešenie odovzdajte ako fork tohto gistu ideálne aj s testami. Cieľom nie je len vytvoriť funkčné ale aj elegantné riešenie. Veľa šťastia.

/**
*
* @param {number} d length of the path
* @param {array} s array of covered segments
* @return {array} [[boolean, number]]
*/
function useky(d, s) {
let finalPath = [[s.includes(0), 1]]; // initialize first segment
// assign to the finalpath array
for (let i=1; i<d; i++) {
let iscovered = s.includes(i);
// if same attribute as the previous, increment the segment distance
if (iscovered == finalPath[finalPath.length-1][0]) {
finalPath[finalPath.length-1][1]++;
} else {
// intialize the new segment
finalPath.push([iscovered, 1]);
}
}
return finalPath;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment