Rozważ jednowymiarową sekwencję liczb w ustalonym zakresie, tj
[1, 2, 4, 6, 8, 0, 2, 7, 3] in range [0, 10⟩
Ciągle rosnący wykres * ** to linia, która łączy wszystkie punkty w tej sekwencji od lewej do prawej i zawsze idzie w górę lub utrzymuje poziom. W razie potrzeby linia owija się od góry do dołu i stamtąd idzie w górę, aby osiągnąć następny punkt.
Celem tego wyzwania jest podzielenie sekwencji na różne podsekwencje, z których wszystkie nie maleją, tak aby po wykreśleniu razem z ograniczoną osią pionową utworzyły one stale rosnący wykres. Odbywa się to poprzez dodanie punktu na końcu jednej podsekwencji i na początku następnej podsekwencji, tak aby kąt linii przecinającej górną granicę był wyrównany z linią przecinającą dolną granicę i dwoma punktami przecięcia mają tę samą współrzędną poziomą. Powyższy przykład dałby następujące dane wyjściowe:
[1, 2, 4, 6, 8, 10]
[-2, 0, 2, 7, 13]
[-3, 3]
Odpowiedni wykres będzie wyglądał następująco: A z rozszerzoną osią dla lepszego widoku: Wymaganym wynikiem jest lista podsekwencji, które tworzą części stale rosnącego wykresu. Robienie fabuły nie jest wymagane, ale zapewni ci punkty bonusowe;). Wynik musi w jakiś sposób wyraźnie oddzielić podsekwencje.
Notatki
- Zakres będzie zawsze miał zero jako lewą (włącznie) granicę, a prawa granica będzie liczbą całkowitą N.
- Sekwencja nigdy nie będzie zawierać wartości, które nie mieszczą się w zakresie.
- Pierwsza podsekwencja nie ma na początku dodatkowego punktu.
- Ostatni podsekwencja nie ma na końcu dodatkowego punktu.
- Nie jest wymagane podawanie początkowych wskaźników, które byłyby wymagane do wykreślenia podsekwencji.
Przypadki testowe
Input: [0, 2, 4, 6, 1, 3, 5, 0], 7
Output: [0, 2, 4, 6, 8], [-1, 1, 3, 5, 7], [-2, 0]
Input: [1, 1, 2, 3, 5, 8, 3, 1], 10
Output: [1, 1, 2, 3, 5, 8, 13],[-2, 3, 11],[-7, 1]
Input: [5, 4, 3, 2, 1], 10
Output: [5, 14],[-5, 4, 13],[-6, 3, 12],[-7, 2, 11],[-8, 1]
Input: [0, 1, 4, 9, 16, 15, 0], 17
Output: [0, 1, 4, 9, 16, 32], [-1, 15, 17], [-2, 0]
Punktacja
To jest code-golf, wygrywa najkrótszy kod w bajtach.
* Nie rzeczywisty żargon ** Tak naprawdę, jak wskazał @ngm, powinien się nazywać „Zawsze nie malejącym wykresem”, ale brzmi to mniej imponująco.
Odpowiedzi:
Galaretka , 20 bajtów
Wypróbuj online!
Kolejności są podzielone według
0.5
.źródło
R ,
179158151 bajtówWypróbuj online!
Edycja: Kod jest teraz funkcją i wymaga danych wejściowych. (Podziękowania dla Giuseppe, user202729 i JayCe za spokojne wskazanie tego)
Edycja: -21 bajtów sugerowanych przez Giuseppe.
Edytuj: -7 bajtów przez usunięcie
d=NULL;
.źródło
s[p+1]-((m+s[p+1])-s[p])
upraszczas[p]-m
, a ty maszd=c(c(...))
tylko tam, gdzied=c(...)
jest to wymagane. Podejrzewam, że istnieje bardziej golfowy sposób, ale wciąż jest to dobra odpowiedź.d
nawet inicjalizacji?Python 2 , 60 bajtów
Dane wejściowe to N, po których wszystkie punkty są pojedynczymi argumentami. Kolejności w danych wyjściowych są rozdzielane przez
0.5
.Wypróbuj online!
Python 2 ,
927768 bajtówKolejności są rozdzielone przez
[...]
.Wypróbuj online!
źródło
Czysty ,
279269258 bajtówWypróbuj online!
źródło
JavaScript (Node.js) ,
10482 bajtówWypróbuj online! Odpowiedź Pythona na port @ ovs.
źródło
Haskell,
828180 bajtówTo jest część mojej czystej odpowiedzi .
Wypróbuj online!
-1, -1 dzięki Laikoni
źródło
f
lokalnie bez nawiasów wokół:
wzorca, jak wlet x<r@(a:_):s|...
.Czysty , 92 bajty
Wypróbuj online!
Argumentem operatora
foldr
jest lambda z osłoną; jest analizowany jako:Przeniesiłem to do Haskell .
źródło
Czysty ,
11010910410097 bajtówWypróbuj online!
-1 bajt dzięki Keelan
źródło
Haskell , 82 bajty
Wypróbuj online! Port mojej czystej odpowiedzi .
Alternatywnie, również 82 bajty
Wypróbuj online!
źródło
JavaScript (Node.js) , 98 bajtów
Wypróbuj online! Jest to nieco dłużej niż w przypadku innej odpowiedzi JS, ale wykorzystuje inne podejście.
Nieskluczone i uproszczone wyjaśnienie
źródło
JavaScript (Node.js) , 48 bajtów, tablice oddzielone
,,
Wypróbuj online!
JavaScript (Node.js) , 50 bajtów, tablice oddzielone
|
Wypróbuj online!
źródło