Biorąc pod uwagę listę dodatnich liczb całkowitych, określ, czy istnieje element, który jest większy niż jego dwóch sąsiadów lub mniejszy niż jego dwóch sąsiadów („wypukłość”). Żeby było jasne, wypukłość nigdy nie może być pierwszą lub ostatnią pozycją na liście, ponieważ mają tylko jednego sąsiada.
Twój program powinien wypisać jedną z dwóch spójnych wartości, z których każda odpowiada albo liście bez nierówności, albo liście z nierównościami. To, jakie są wartości, nie ma znaczenia, możesz sam je wybrać.
To jest golf golfowy, więc odpowiedzi będą liczone w bajtach, przy czym mniej bajtów będzie lepszych.
Przypadki testowe
[] -> False
[1] -> False
[1,2] -> False
[1,2,1] -> True
[1,2,2] -> False
[1,2,3] -> False
[1,2,2,1] -> False
[1,2,2,3] -> False
[1,2,1,2] -> True
[1,3,2] -> True
[3,1,2] -> True
[2,2,2] -> False
code-golf
number
array-manipulation
decision-problem
Kreator pszenicy
źródło
źródło
[1,3,3]
(zapewnia, że odpowiedzi przy użyciu algorytmu Dennisa przyjmują znak przyrostów zamiast samych samych przyrostów)[1,2,2]
? A może coś mi brakuje?[1,2,2]
są takie same jak znaki tych delt, ale tak nie jest[1,3,3]
.Odpowiedzi:
Galaretka , 5 bajtów
Zwraca 0, jeśli jest nierówność, 1 jeśli nie.
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 38 bajtów
Zwraca wartość logiczną.
Przypadki testowe
Pokaż fragment kodu
W jaki sposób?
Używamy a do przechowywania poprzedniej wartości n . Ustawiamy x na 1, jeśli a <n , -1 jeśli a> n lub 0, jeśli a = n . I sprawdzamy, czy old_x * x <0 , co jest możliwe tylko wtedy, gdy ( old_x = 1 i x = -1 ) lub ( old_x = -1 i x = 1 ).
Ponieważ x jest inicjowany do anonimowej funkcji zwrotnej niektórych () , jest on wymuszany na NaN podczas pierwszej iteracji, co powoduje, że test jest fałszywy.
źródło
Haskell , 42 bajty
Wypróbuj online!
Wyjaśnienie
Najpierw mamy funkcję,
f
która pobiera funkcję binarną i listę i stosuje funkcję binarną do każdej sąsiedniej pary na liście.Następnie nasza główna funkcja dotyczy
f(-)
listy wejść. Oblicza to listę różnic. Następnie ubiegamyf(*)
się o listę, aby pomnożyć każdą sąsiednią parę. Na koniec pytamy, czy jakakolwiek para jest mniejsza niż zero.Liczba na liście końcowej może być ujemna tylko wtedy, gdy jest iloczynem liczby ujemnej i dodatniej z listy różnic. Dlatego w celu uzyskania wpisu ujemnego (a następnie zwrócenia wartości true) pierwotna lista musi przejść z wartości rosnącej na malejącą lub odwrotnie, tzn. Musi mieć nierówność.
źródło
Python 2 , 43 bajty
Zwraca wartość True, jeśli wystąpi guz, błędy, jeśli go nie ma. ( domyślnie dozwolone )
Wypróbuj online!
źródło
Oktawa z pakietem obrazów,
3432 bajty2 bajty zapisane dzięki @StewieGriffin !
Wypróbuj online!
Wyjaśnienie
Oblicza kolejne różnice, układa je w przesuwne bloki o długości 2, uzyskuje iloczyn każdego bloku i sprawdza, czy jakikolwiek taki produkt jest ujemny.
źródło
0||prod(...)
oszczędza 2 bajty. Możesz również pominąć całąany
część i użyć domyślnej definicji truey / falsy, aby zapisać 5 bajtów .any
. Dzięki za0||
pomysł!R, 48 bajtów
Wypróbuj online!
Jak to działa krok po kroku na przykładzie c (1,4,1,4):
Jako bonus, oto rozwiązanie o podobnej długości i koncepcji wykorzystujące pakiet
zoo
:źródło
embed
istnieje. Szkoda, żerowProds
icolProds
nie istnieje jako alias w R.rowSums
irowMeans
....colSums
przekształcę dane wejściowe w matrycę na podstawie dodatkowych danych wejściowych, które prawdopodobnie mają gdzieś zastosowanie w golfie ... teraz muszę je znaleźć!matrixStats
pakiecie.function(x)any(matrixStats::colProds(embed(diff(x),2)))<0
. Ale dla wszystkiego innego niż golf golfowy, ten pakiet jest rzeczywiście skarbnicą.Haskell , 33 bajty
Wypróbuj online!
True
jeśli jest nierówność, błędy, jeśli nie ma.źródło
l`zip3`tail l$drop 2l
jest po prostu krótszy o włos. Zastanawiam się, czy dopasowanie wzorca jest jakoś jeszcze krótsze?Perl 6 , 39 bajtów
Wypróbuj online!
$_
jest argumentem listy tej anonimowej funkcji..[1..*]
to ta sama lista, ale z pominiętym pierwszym elementem.Zcmp
zamyka obie listy razem zcmp
operatorem, co daje listęOrder
wartości. Na przykład dla listy wejściowej1, 2, 2, 2, 1
spowoduje to powstanie listyMore, Same, Same, Less
.Teraz musimy tylko wiedzieć, czy ta lista zawiera dwa sąsiednie elementy,
More, Less
czyLess, More
. Trik, którego użyłem, to przekonwertowanie listy na łańcuch rozdzielany spacjami za pomocą~
, a następnie przetestowanie, czy zawiera ona podłańcuch,re L
czys M
. (Pierwszy nie może być tylkoe L
dlatego, żeSame
kończy się również na „e”.)Inteligentny operator dopasowania zwraca
Match
obiekt (jeśli dopasowanie się powiedzie) lubNil
(jeśli się nie udało), więcso
konwertuje cokolwiek to jest na wartość logiczną.źródło
Wolfram Language (Mathematica) , 40 bajtów
Wypróbuj online!
źródło
Rubinowy ,
5546 bajtówWypróbuj online!
Lambda akceptuje tablicę i zwraca wartość logiczną.
-9 bajtów Wymienić
(x<y&&y>z)||(x>y&&y<z)
z(y-x)*(y-z)>0
(dzięki GolfWolf )źródło
|
zamiast||
, oszczędzając 1 bajt.PostgreSQL 173 bajtów
źródło
Java 8,
10810410186847972 bajtów-2 bajty dzięki @ OlivierGrégoire .
-13 bajtów dzięki @Nevay .
Wypróbuj online.
źródło
-1
.a->{int i=a.length;for(;i-->2;)i|=(a[i]-a[--i])*(a[i]-a[i-1])>>-1;return-~i|3;}
(zwraca-1
dla prawdziwych przypadków,3
dla falsey) - lub, jeśli używasz obecności / braku wyjątku jako wartości zwracanej 55 bajtów:a->{for(int i=0;++i>0;)i|=(a[i-1]-a[i])*(a[i]-a[i+1]);}
a->{int i=a.length,p=0;for(;i-->1;)i|=p*(p=a[i]-a[i-1])>>-1;return-i>1;}
R ,
5856 bajtówWypróbuj online!
Zaoszczędzono 2 bajty dzięki Giuseppe
źródło
{}
za -2 bajty.c()
toNULL
nie to samo, co pusty wektor liczb całkowitych,integer(0)
podczas gdy w MATLAB[]
jestdouble
domyślnie, ale jeśli chcesz zachować to w ten sposób, jest to całkowicie rozsądne.J ,
1615 bajtów-1 bajt dzięki FrownyFrog
Wypróbuj online!
Oryginał: 16 bajtów
2-/\]
- różnice między sąsiadującymi elementami2*/\
- produkty z każdej sąsiedniej pozycji[:<./
- minimum0>
- jest negatywny?Wypróbuj online!
źródło
f=.
bajtów przypisania . Pamiętaj, że jestem stosunkowo nowym użytkownikiem :)1 e.0>2*/\2-/\]
Japt , 11 bajtów
-5 bajtów dzięki @ETHproductions
Wypróbuj online! | Przypadki testowe
Wykorzystuje algorytm Dennisa
źródło
Japt , 9 bajtów
Wypróbuj online!
Zestawienie odpowiedzi Olivera z podejściem zastosowanym w kilku innych odpowiedziach.
źródło
Attache , 39 bajtów
Wypróbuj online!
Całkiem zadowolony z tego, jak to się potoczyło.
Wyjaśnienie
Jest to kompozycja czterech funkcji:
Delta
pobiera różnice między elementami. =Następnie
Sign
stosuje się do każdej różnicy, dając nam tablicę1
s,0
s i-1
s. =Następnie
Slices&2
daje wszystkie wycinki długości dwa z tablicy, podając wszystkie pary różnic.Wreszcie
Any&:&{_*~?Sum[__]}
jest równoważne z danymi wejściowymix
:Wyszukuje elementy, które sumują się do zera, ale nie są zerem. Jeśli istnieje jakakolwiek taka para elementów, oznacza to nierówność.
źródło
MATL , 8 bajtów
Wypróbuj online!
źródło
Łuska , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Oktawa , 33 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Brachylog , 10 bajtów
Wypróbuj online!
Udaje się (
true.
), jeśli występuje nierówność, i nie (false.
), jeśli nie ma nierówności.Wyjaśnienie
Jest to już dość czytelne:
źródło
05AB1E , 7 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
0‹
która w zasadzie sprawdza liczbę pod kątem znaku ujemnego?d
służy do sprawdzania, czy tylko góra stosu jest zawarta[0-9]
, co jest przeciwieństwem tego, co chcemy tutaj. Ale teraz jest bardziej inteligentny, a liczby ujemne / zmiennoprzecinkowe są również liczone jako liczby.a
zobaczyłnegative
znak i wrócił prawdą czy coś ... Ale myślę, że masz rację, pamiętam twojąd
sztuczkę.Brachylog , 10 bajtów
Wypróbuj online!
Nie jest tak schludny i elegancki jak istniejąca 10-bajtowa odpowiedź @ Fatalize, ale działa!
źródło
Łuska , 9 bajtów
Wypróbuj online!
Wykorzystuje algorytm Dennisa.
źródło
Perl 5 , 54 + 2 (
-pa
) = 56 bajtówWypróbuj online!
źródło
Python 2 , 60 bajtów
Wypróbuj online!
Prawie to samo, pomyślałem, że będzie krótszy ...
Python 2 , 63 bajty
Wypróbuj online!
źródło
Pyt ,
117 bajtówWysyła 1, jeśli występuje nierówność, 0 w przeciwnym razie
Wypróbuj online!
Odpowiedź Haskell z Port of Wheat Wizard
Stary sposób (11 bajtów):
Wypróbuj online!
Zwraca wartość Fałsz, jeśli wystąpi guz, Prawda w przeciwnym razie
Portowa odpowiedź Dennisa na galaretkę
źródło
Wolfram Language (Mathematica) ,
3736 bajtówPodaje przeciwieństwo odpowiedzi na przypadki testowe (odwrócone False i True). Przygotuj a,
!
aby przejść do normalnej postaci.LUB
Odwrócona także wyjście, więc zastąpić
FreeQ
zMatchQ
normalnej formie.Objaśnienie: Weź znak różnic w sekwencji. Jeśli wynikowa sekwencja obejmuje {1, -1} lub {-1,1} występuje nierówność. Bezwzględna wartość różnic {1, -1} lub {-1,1} wynosi 2 w obu przypadkach.
Ogol kolejny bajt, wyrównując ostateczną listę zamiast przyjmując wartość bezwzględną:
Wypróbuj online!
źródło
Perl, 35 bajtów
Obejmuje
+3
dla-p
bump.pl
:Uruchom jako:
źródło
Julia 0.6 ,
5756 bajtówZasadniczo, po prostu całkowicie ludzka odpowiedź na python. -1 bajt od użytkownika 71546
Wypróbuj online!
Julia 0.6 , 39 bajtów
Styl rekurencji Lispy, czyli odpowiedź pytona Dennisa. Zwraca,
true
gdy występuje nierówność, w przeciwnym razie zgłasza błąd. Powinno to być może 42 bajty, ponieważ musisz przeliterować go podczas rozmowy. Np. Dzwonisza=[1,2,1]
jakof(a...)
.f(a)=f(a...)
usunę tę potrzebę, ale jest ona dłuższa. Muszę poprawić rekurencję i nie lubię pisać kodu, który generuje błąd.Wypróbuj online!
źródło
for