Biorąc pod uwagę tablicę dodatnich liczb całkowitych, wypisz tablicę wszystkich elementów, które są większe lub równe sąsiednim. Większość elementów będzie miała dwa sąsiednie elementy; pierwszy i ostatni element to przypadki szczególne, ponieważ mają one tylko jeden sąsiadujący element.
Możesz założyć, że tablica zawiera co najmniej dwa elementy.
Przypadki testowe:
Input | Output
[4,2,6,12,4,5,4,3] | [4,12,5]
[1,2] | [2]
[1,2,3,2,1] | [3]
[3,2,1,2,3] | [3,3]
[4,4] | [4,4]
[2,4,4,4,1] | [4,4,4]
[2,3,3,4] | [3,4]
[4,3,3,4] | [4,4]
To jest golf golfowy , wygrywa najkrótszy kod!
[4,3,3,4]
jako próbę. Niestety moje rozwiązanie nie poradziło sobie z tym zbyt dobrze.Odpowiedzi:
Galaretka ,
13 1211 bajtówMonadyczny link pobierający listę dodatnich liczb całkowitych i zwracający filtrowaną listę zawierającą tylko te, które są większe lub równe wszystkim ich sąsiadom.
Wypróbuj online!
Poprzednie 12 bajtów :
Poprzednie 13 bajtów :
W jaki sposób?
źródło
»
- a może około 10 ..?Python , 54 bajty
Wypróbuj online!
I / O ma krotki zamiast list.
Python , 57 bajtów
Wypróbuj online!
Alt 57:
źródło
Mathematica 22 bajtów
źródło
Haskell,
504942 bajtówWypróbuj online!
scanr(:)[0]
tworzy listę ogonów(0:l)
, każdy z końcowy0
, npl = [4,3,3,4]
:[[0,4,3,3,4,0],[4,3,3,4,0],[3,3,4,0],[3,4,0],[4,0],[0]]
co jest wzór dopasowany againsi:j:k:_
wyodrębnić wszystkie listy z co najmniej 3 elementów, które są nazwanei
,j
ik
. Zachowaj,j
jeśli jego> =i
ij
.Edycja: Ørjan Johansen zapisał 7 bajtów. Dzięki!
źródło
i:j:k:_<-scanr(:)[0]$0:l
jest krótszy. (Nieznacznie dostosowując „standardową”tails=scanr(:)[]
lewę).Dyalog APL,
31302822 21bajtówWypróbuj online!
Objaśnienie (Nie jestem dobry w wyjaśnianiu rzeczy):
źródło
Haskell , 40 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 40 bajtów
źródło
Python 3 ,
84 75 *71 bajtówWypróbuj online!
* @ LeakyNun zapisał 9 bajtów za pomocą sprytnej sztuczki operatora.
źródło
lambda l,k=[0]:[l[i]for i in range(len(l))if(k+l+k)[i+2]<=l[i]>=(k+l+k)[i]]
Galaretka , 15 bajtów
Wypróbuj online!
źródło
05AB1E ,
151413 bajtówWypróbuj online!
Wyjaśnienie
Poprzednie 15 bajtowe rozwiązanie
Wypróbuj online!
Wyjaśnienie
źródło
R, 44 bajty
która ocenia na funkcję:
Porównuje
x
doc(0,x)
, więc zx
przesuniętą o jedną pozycję w prawo. Porównuje równieżx
dox[-1]
, więc o jedną pozycję przesunął się w lewo. Oba są,TRUE
jeśli jest tam maksimum.&
wziąć ORAZ tych booleanów. Z uwagi na zawijający się charakter wektorów R, gdy nie są one tej samej długości, musimy obciąć wynik na długościx
, która jest ustalana przez wzięciesum(x|1)
. Następnie podłączamy wektor boolowski, biorąc tylko prawdziwe wskaźnikix
i zwracamy to.Uwaga: ponieważ te operacje logiczne są wykonywane przy użyciu wektorów o nierównej długości, R będzie narzekać. Dużo. Ale wśród ostrzeżeń będzie prawidłowy wynik:
źródło
R , 42 bajty
Wypróbuj online!
2 bajty krótsze niż rozwiązanie JAD .
diff
oblicza kolejne różnice; wtedy zachowaj tylko wpisy większe niż oba sąsiedzi.źródło
Pyth , 20 bajtów
Do gry w golfa ...
Zestaw testowy.
źródło
R , 68 bajtów
Wypróbuj online!
źródło
pryr::f(expression)
jest krótszym sposobem zadeklarowania funkcji niżfunction(a)expression
.sum(a|1)
jest to skrótlength(a)
.PHP , 67 bajtów
Wypróbuj online!
źródło
Siatkówka , 51 bajtów
Wypróbuj online
źródło
q, 39 bajtów
źródło
Stax , 10 bajtów
Uruchom i debuguj
Generuje dane wyjściowe jako wartości oddzielone znakiem nowej linii na wyjściu standardowym.
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
Zaktualizowano: Właśnie znalazłem rozwiązanie 9-bajtowe. Zaktualizuje wyjaśnienie później:
Stax , 9 bajtów
Uruchom i debuguj
źródło
Perl 5
-a
, 37 bajtówWypróbuj online!
źródło