... ale hej, nie trzeba być surowym.
Biorąc pod uwagę niepustą tablicę ściśle dodatnich liczb całkowitych, określ, czy jest to:
- Monotonia ściśle maleje . Oznacza to, że każdy wpis jest ściśle mniejszy niż poprzedni.
- Monotonia nie wzrasta, ale nie ściśle maleje . Oznacza to, że każda pozycja jest mniejsza lub równa poprzedniej, a tablica nie należy do powyższej kategorii.
- Żadne z powyższych .
Zwróć uwagę na następujące przypadki narożne:
- Tablica z pojedynczą liczbą jest monotoniczna, a jej wartość maleje (próżniowo).
- Tablica z tą samą liczbą powtórzeń jest monotoniczna, nie wzrasta, ale nie zmniejsza się ściśle.
Zasady
Możesz podać program lub funkcję
Dane wejściowe można przyjmować w dowolnym rozsądnym formacie: tablica, lista, ciąg znaków z liczbami oddzielonymi spacjami, ...
Możesz wybrać dowolne trzy spójne wyniki odpowiednio dla trzech kategorii. Na przykład, wyniki mogą być liczbami 0
, 1
, 2
; lub ciągi 1 1
, 1 0
, pusty łańcuch.
Najkrótszy kod w bajtach wygrywa
Przypadki testowe
Monotonia ściśle maleje:
7 5 4 3 1
42 41
5
Monotonia nie wzrasta, ale nie zmniejsza się ściśle:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Żadne z powyższych:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Odpowiedzi:
Galaretka ,
10 95 bajtów-Metoda znaleziona przez DrMcMoylex, idź, daj kredyt!
TryItOnline! lub uruchom wszystkie testy
Zwraca:
-1
= monotonicznie ściśle maleje;0
= monotoniczny nie rosnący;1
= innyW jaki sposób?
źródło
M
jest częścią dowolnej 8- bitowej mapy postaci? Nie można powiedzieć, że ma 5 bajtów, ponieważ tak nie jest. CP1252 nie ma go na przykład.byte
w nagłówku tego postu.Perl 6 , 17 bajtów
2
1
0
Rozszerzony:
źródło
>
został włączony doafter
i>=
z!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe!
3 bajty zapisane dzięki @LuisMendo!
Wyjściami są
Ściśle malejące: -1
Bez wzrostu: 0
Inne: 1
Wyjaśnienie:
źródło
0
zamiast poprzedniej ostatniej plus1
? Coś w stylu0hdX>ZS
0hdX>0/
- Pytanie do ciebie i @LuisMendo: Czy można wykorzystać fakt, że sortowanie ma tylko 1 znak (w przeciwieństwie doX>
), w jakiś sposób pośrednio używając ostatniej wartości?S
, ale nie znalazłem sposobu, aby go skrócić ...Mathematica, 22 bajty
Nienazwana funkcja przyjmuje listę liczb jako dane wejściowe. Zwraca,
-1
jeśli lista ściśle się zmniejsza,0
jeśli nie rośnie, ale nie zmniejsza się ściśle, a1
jeśli nie jest żadna.Całkiem prosty algorytm: weź różnice między kolejnymi parami, weź największą i weź znak tej największej.
(Wydaje mi się, że musi istnieć jakiś język, w którym ten algorytm ma 3 bajty ....)
W odniesieniu do tablicy z jednym wpisem:
Differences
zwraca pustą listę;Max
pustej listy daje-∞
(!); iSign[-∞]
ocenia na-1
(!!). Tak naprawdę to działa w tym przypadku rogu. Czasami kocham Mathematica. (Rzeczywiście, funkcja poprawnie określa również pustą listę jako ściśle malejącą).źródło
Haskell,
403837 bajtówZwroty
GT
dla Monotone ściśle malejeEQ
dla monotonu nie wzrastaLT
jeszczecompare
porównuje dwie liczby i zwracaGT
(EQ
,LT
), jeśli pierwsza liczba jest większa niż (równa, mniejsza niż) druga liczba.zipWith compare<*>tail
porównuje elementy sąsiadów.foldl min GT
Zmniejsza to wykaz wyników porównania z funkcją min począwszy od GT (uwaga:LT
<EQ
<GT
).Edycja: @ xnor znaleziono
23 bajty. Dzięki!źródło
GT
, ponieważ potrzebujemy minimum listy (miałem maksimum, co było złe i relikt z wczesnej wersji, w której użyłem=<<
zamiast<*>
).foldl min GT
?Common Lisp,
4340 bajtówTrwa to wejście jako lista Lisp i powraca
(T T)
,(NIL T)
i(NIL NIL)
aby wyróżnić 3 kategorie. Tutaj działa na podanych przypadkach testowych:źródło
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Pamiętaj, że możesz po prostu pisać,(lambda(x)...)
aby być krótszym.Python 2, 30 bajtów
-1
za ściśle malejące,0
za słabo malejące,+1
za nie malejąceUżywając
cmp
do porównywania kolejnych elementów i bierze maksimum. Odbywa się to poprzez usunięcie pierwszego elementu jednej kopii listy, a następnie mapowaniecmp
. Na przykładl=[2,2,1]
dajektóra ma
max
0, ponieważ istnieje równość.Krótsza lista jest automatycznie przedłużana o
None
, która jest mniejsza niż wszystkie liczby, a więc nieszkodliwa. Ten element fantomowy izoluje również od pobraniamin
pustej listy, gdy wejście ma długość 1.źródło
Brachylog , 7 bajtów
Wypróbuj online!
Wydruki są
1
ściśle malejące,0
nie rosnące ifalse.
inne.Wyjaśnienie
Inne 7 bajtowe rozwiązania
źródło
R, 44 bajty
Odczytuje dane wejściowe ze standardowego wejścia i drukuje następujące informacje w zależności od danych wejściowych:
Wydajność:
[1] FALSE TRUE
: Monotoniczny nie rośnie[1] TRUE FALSE
: Monotonia ściśle maleje[1] FALSE FALSE
: Żadne z powyższychźródło
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
jest o 1 bajt krótszy. Zwraca 0, jeśli ściśle monotonowy, 1, jeśli monotoniczny nie rośnie i 2, jeśli żaden z powyższych. Nie jestem pewien, czy wolno nic nie zwracać, jeśli żadna z powyższych opcji, ale można to jeszcze bardziej uprościćd=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
jest o jeden bajt lepszy.JavaScript (ES6), 51 bajtów
Zwraca 0 dla ścisłego zmniejszania, 1 dla niewrastającego, 2 w przeciwnym razie.
źródło
05AB1E ,
58 bajtówBłąd naprawiony przez Emignę, dzięki! Wykorzystuje tę samą metodę, co DrMcMoylex .
Wypróbuj online!
Dane wyjściowe to:
źródło
®¸ì¥Z0.S
naprawiłby problem z jednym elementem.Rubinowy, 37 bajtów
Wyjście:
[true,true]
,[true,false]
lub[false,false]
źródło
Mathematica,
1511 bajtówJest to funkcja variadic, biorąc wszystkie liczby całkowite wejściowe za osobne argumenty.
True | True
False | True
False | False
Zauważ, że
|
nie jestOr
, aleAlternatives
, co jest częścią składni dopasowania wzorca, co wyjaśnia, dlaczego te wyrażenia nie daj się ocenić naTrue
,True
,False
, odpowiednio.Sam kod jest głównie zastosowaniem tej wskazówki . Na przykład
##>0
jest,Greater[##, 0]
ale następnie##
rozwija się do wszystkich wartości wejściowych, więc otrzymujemy coś podobnegoGreater[5, 3, 2, 0]
, co samo w sobie oznacza5>3>2>0
.źródło
Rakieta , 44 bajty
Wywołano:
Wynik:
źródło
>
jako prawdziwego. Common Lisp robi to dobrze, ale nie definiuje przypadku arity 0 (co również powinno być prawdą).C ++ 14, 85 bajtów
Zwraca 3 (0b11) dla ścisłego zmniejszania, 1 (0b01) dla niewrastającego i 0 w przeciwnym razie.
Nie golfowany:
Pomyślałem, że to idealny problem dla wyrażeń składanych w C ++ 17:
Niestety nie łączy łańcuchów operatorów relacyjnych, ale tak
co nie było potrzebne.
źródło
Python 2,
6174 bajtów+13 bajtów dla wprowadzenia pojedynczej liczby
Wymaga wprowadzenia w formie listy nawiasów jak
[3,2,1]
. Zwraca 2 dla ścisłego zmniejszania, 1 dla niewrastającego i 0 w przeciwnym razie.Stare rozwiązanie:
źródło
Python 3,
8152 bajtów (Dzięki FryAmTheEggMan )Wypróbuj online!
źródło
sorted(s)[::-1]
jest krótszy do odwracania posortowanej listy. W Python 3 możesz zrobić,{*a}
aby uzyskać zestaw elementówa
.sorted
zwraca listę, więc nie musisz też rzutować zestawu na listę. Również dodawanie wartości logicznych jest koszerne! Wreszcie możesz przesłać anonimową lambdę, więc nie potrzebujeszf=
. W końcu mam 52 bajty. repl.it/E7eG/2Befunge, 50 bajtów
Wypróbuj online!
Akceptuje dane wejściowe jako sekwencję liczb całkowitych oddzielonych spacjami i zwraca 0, jeśli ściśle maleje, 1, jeśli nie ściśle maleje, 2 w przeciwnym razie.
Ponieważ czytanie befunge jest trochę niemożliwe, jeśli nie znasz języka, jest to algorytm w pseudokodzie:
* w pamięci befunge znajduje się stos, który zaczyna się od nieskończonej ilości 0 na nim. pop (), push (x), input () i output (x) są oczywiste, pozostałe używane przez nas pseudo-funkcje działają w następujący sposób:
Fajnie!
Poprzednia wersja, zaledwie 41 bajtów, ale nieważne, ponieważ wymaga się od 0 do zakończenia sekwencji wejściowej (lub za pośrednictwem tłumacza, jak ten )
Wypróbuj online!
źródło
0
nie liczy się jako prawidłowy format wejściowy. Myślę, że należy do kategorii „wstępnie przetworzonych danych wejściowych”. W rzeczywistości niektóre odpowiedzi dodają a0
do kodu (włączając w to odpowiedź do liczby bajtów). Byłbym akceptowalny, gdybyś mógł. Czy możesz zastąpić0
jakiś znak nienumeryczny? To byłoby do przyjęcia0
wstawionego przez kod kodu, aby rozpatrzyć przypadek, w którym dane wejściowe mają tylko jeden wpis. To jeden z powodów, dla których uważam, że uwzględnienie tego0
w danych wejściowych jest nieprawidłowe. W każdym razie, jeśli istnieje tłumacz, który go nie potrzebuje, możesz go użyć, aby udowodnić, że twoja odpowiedź jest poprawna bez0
. Jeśli potrzebuje tego tłumacz online Try-it-online0
, możesz dołączyć go do celów demonstracyjnych, z odpowiednim wyjaśnieniemJ, 14 bajtów
Czasownik monadyczny, biorąc listę po prawej stronie, wracając
1
do ściśle malejącego,0
dla słabo malejącego, i_1
inaczej.Staje się znakiem
*
minimum<./
następujących po sobie różnic2-/\
na liście. J nie zmienia kolejności różnic podczas ich przyjmowania, więc np. Sekwencja ściśle maleje, jeśli wszystkie są dodatnie. Warto zauważyć, że<./
zwraca pozytywny nieskończoność na listach zero elementów.W użyciu w REPL:
źródło
C,
6867 bajtówFunkcja
f
, która jest przekazywana do tablicy ints (l
) poprzedzonej jej długością (n
również int). Zwraca 3, jeśli monotonicznie ściśle maleje, 1, jeśli monotonicznie nie rośnie, ale nie ściśle maleje, 0 w przeciwnym razie.Nie grał lekko w golfa dla czytelności:
Zmieniono układ i skomentowano, aby pokazać logikę:
Przypadki testowe (dzięki uprzejmości IDEOne ):
źródło
Siatkówka , 41 bajtów
Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
2
3
1
Wyjaśnienie
Konwertuje wejście unary.
Wyrażenie regularne tutaj dopasowuje rosnącą parę kolejnych liczb. W takim przypadku nakłady nie mogą wyraźnie wzrosnąć. W
A
oznacza je jako „anty-grep” etap co oznacza, że linia wejścia jest odrzucane i zastępowane przez puste jeśli wyrażenia regularnego dopasowania.Jest to etap rozłam, który służy do dołączania wysuw do wejścia tylko wtedy, gdy dane wejściowe nie zostały odrzucone. Mamy więc do tej pory dwa możliwe wyniki: nie zwiększające się dane wejściowe otrzymują na końcu linię, a inne są nadal puste.
Na koniec zliczamy liczbę dopasowań tego wyrażenia regularnego. Wyrażenie regularne albo pasuje do identycznych liczb (a następnie wszystkiego na końcu ciągu, aby uniknąć wielu dopasowań tego rodzaju dla danych wejściowych takich jak
1 1 1 1
), lub „na końcu danych wejściowych”. Przejdźmy przez trzy typy danych wejściowych:$
pasują. Teraz$
nie jest dokładnie „koniec łańcucha”. Może również pasować przed końcowym podawaniem linii. Tak więc otrzymamy z niego dwa dopasowania, jeden na końcu wejścia, a drugi po wstawionym wierszu.$
dopasowuje się tylko raz.źródło
Aksjomat, 114 bajtów
Bez golfa
Wyniki
źródło
APL, 16 bajtów
Uwaga: wprowadź tablicę jednego elementu, np. W
a←1⍴3
przeciwnym razie:a←4 3 2 1
Tłumaczenie ustne:
Pomysł: przetestuj monotoniczność, porównując tablicę oryginalną z posortowaną, sprawdź, czy nie występuje wzrost, porównując do tablicy z usuniętymi duplikacjami.
(I myślę, że można to poprawić ...)
źródło
Haskell, 36 bajtów
(+x)
to dlatego, że haskell błędnie interpretuje(-x)
jako wartość zamiast sekcji. Zastanawiam się, czy całe wyrażenie może być opłacalne bez sensu.źródło
LabVIEW, 12 węzłów, 18 przewodów ==> 48 bajtów zgodnie z konwencją
Żadnych funkcji ukrytych w ramkach innych obudów, tylko jeden przewód.
źródło
Cejlon, 86 bajtów
Funkcja przyjmuje dane wejściowe jako parametry i zwraca krotkę zerową lub jeden wynik booleanów -
[false]
dla Monotone ściśle maleje ,[true]
dla Monotone nie rośnie, ale nie ściśle maleje , i[]
dla Żadnego z powyższych .Można go użyć w następujący sposób:
Wydajność:
Wersja nieposkromiona i skomentowana:
źródło
Clojure, 34 bajty
Bardzo proste, zwraca,
1
jeśli ściśle maleje,2
jeśli nie zwiększa się inil
inaczej.Próbowałem także unikać
apply
makr,~@
ale ma tylko 43 znaki (skutkuje to[1 2 nil]
):źródło
Pip , 8 bajtów
Pełny program Pobiera listę danych wejściowych jako argumenty wiersza polecenia. Wydajności
11
dla ściśle malejących,01
dla nie rosnących,00
dla żadnego.Wypróbuj online!
Wyjaśnienie
To podejście działa, ponieważ operatory porównania Pip, takie jak Python, łączą się w łańcuch:
4>3>2
jest prawdziwe, a nie jest(4>3)>2
(fałsz) jak w C. To samo zachowanie zachowuje się, gdy operatory porównania są modyfikowane za pomocą$
meta-operatora fold.źródło
Japt ,
987 bajtówDane wyjściowe
-1
dla „monotonicznego spadku ściśle”,0
dla „monotonicznego bez inkrementacji” i w1
inny sposób.Spróbuj
1 bajt zapisany dzięki Oliverowi .
źródło
än mg rw
zwraca złe wyniki bez,J
ale tak nie jestän rw g
. Dziwne.R , 34 bajty
Wypróbuj online!
Porty odpowiedzi MATL DJ-a .
R , 43 bajty
Wypróbuj online!
Zwraca
2
za wartość ściśle zmniejszającą się,1
za wartość nieodrastającą oraz0
inaczej.all(x==cummin(x))
jestTRUE
(konwertuje na,1
gdy jest stosowany w arytmetyce) wtedy i tylko wtedy, gdyf
nie rośnie, w tym przypadek ścisły.all(diff(x)<0)
jestTRUE
tylko wtedy, gdyf
ściśle maleje.źródło