ZADANIE 1 / 6 · 10 PKT · SUGEROWANE 5 MIN
Ile wartości poza przedziałem?
countOutside(values, low, high)
Napisz funkcję, która policzy elementy mniejsze od low lub większe od high. Granice należą do przedziału. Każde wystąpienie licz osobno; zwróć liczbę elementów, nie ich sumę.
Oczekiwany wynik: Liczba (number). Pusta tablica daje 0. Granice low i high mogą być równe.
Nowy przykład demonstracyjny
countOutside([12, -6, 4, 18, 4], 4, 12) → 2
Sprawdzana umiejętność: Warunki logiczne, granice przedziału i zliczanie.
ZADANIE 2 / 6 · 15 PKT · SUGEROWANE 6 MIN
Zmień znaki na nieparzystych indeksach
negateOddPositions(values)
Utwórz nową tablicę tej samej długości. Na indeksach 1, 3, 5 i kolejnych nieparzystych indeksach zmień znak wartości. Elementy na pozostałych indeksach zachowaj. Decyduje indeks, nie parzystość liczby.
Oczekiwany wynik: Nowa tablica liczb (Array<number>), również dla pustego wejścia i jednego elementu. Zero pozostaje zerem.
Nowy przykład demonstracyjny
negateOddPositions([12, -6, 11, -8, 3]) → [12, 6, 11, 8, 3]
Sprawdzana umiejętność: Indeksowanie oraz tworzenie niezależnej tablicy wynikowej.
ZADANIE 3 / 6 · 15 PKT · SUGEROWANE 7 MIN
Napraw wyszukiwanie ostatniego trafienia
lastTargetIndex(values, target)
Popraw podany fragment tak, aby funkcja zwracała największy indeks elementu równego target. Gdy takiego elementu nie ma, zwróć -1. Możesz przepisać całą funkcję, zachowując nazwę i argumenty.
Oczekiwany wynik: Liczba (number). Indeksy zaczynają się od 0; dla pustej tablicy wynikiem jest -1.
Nowy przykład demonstracyjny
lastTargetIndex([6, 11, 6, 11, 6], 6) → 4
Zobacz celowo błędny fragment do poprawienia
Ten fragment jest treścią zadania, a nie jego rozwiązaniem.
function lastTargetIndex(values, target) {
let result = 0;
for (let index = 1; index < values.length; index++) {
if (values[index] === target) return index;
}
return result;
}
Sprawdzana umiejętność: Debugowanie, warunek braku trafienia i ostatnie wystąpienie.
ZADANIE 4 / 6 · 20 PKT · SUGEROWANE 8 MIN
Usuń tylko pierwsze wystąpienie
removeFirst(values, target)
Zwróć nową tablicę z pominiętym pierwszym od lewej wystąpieniem target. Pozostałe elementy, także kolejne wystąpienia tej samej wartości, mają zachować kolejność. Gdy nie ma trafienia, zwróć nową kopię całej tablicy.
Oczekiwany wynik: Nowa tablica liczb (Array<number>). Puste wejście daje pustą tablicę. Usunięcie jedynego elementu też daje pustą tablicę.
Nowy przykład demonstracyjny
removeFirst([12, 5, 12, 7, 12], 12) → [5, 12, 7, 12]
Sprawdzana umiejętność: Stan w pętli, selekcja elementów i zachowanie kolejności.
ZADANIE 5 / 6 · 20 PKT · SUGEROWANE 9 MIN
Sumy kolejnych trójek
tripleSums(values)
Oblicz sumę każdej pełnej trójki kolejnych elementów. Początek trójki przesuwaj o jeden indeks, więc sąsiednie trójki nakładają się. Zwróć sumy w kolejności występowania trójek.
Oczekiwany wynik: Nowa tablica liczb (Array<number>). Dla mniej niż 3 elementów zwróć pustą tablicę. Dla n ≥ 3 wynik ma n − 2 elementy.
Nowy przykład demonstracyjny
tripleSums([6, -2, 9, 1, -5]) → [13, 8, 5]
Sprawdzana umiejętność: Praca na sąsiednich indeksach i poprawne granice pętli.
ZADANIE 6 / 6 · 20 PKT · SUGEROWANE 10 MIN
Najdłuższa seria równych wartości
longestEqualRun(values)
Znajdź najdłuższy nieprzerwany fragment równych elementów stojących obok siebie. Zwróć długość serii. Nie łącz wystąpień rozdzielonych inną wartością i nie zwracaj samej wartości ani jej indeksu.
Oczekiwany wynik: Liczba (number). Pusta tablica daje 0, jeden element daje 1. Przy remisie zwróć wspólną długość najdłuższych serii.
Nowy przykład demonstracyjny
longestEqualRun([6, 6, -2, -2, -2, -2, 6]) → 4
Sprawdzana umiejętność: Śledzenie bieżącej serii i zapamiętywanie najlepszego wyniku.
Sugerowane czasy zadań sumują się do 45 minut. Pozostałe 5 minut z limitu 50 minut można wykorzystać na sprawdzenie pracy.