... pero bueno, no es necesario ser estricto.
Dada una matriz no vacía de enteros estrictamente positivos, determine si es:
- Monótono estrictamente decreciente . Esto significa que cada entrada es estrictamente menor que la anterior.
- Monótono no creciente, pero no estrictamente decreciente . Esto significa que cada entrada es menor o igual que la anterior, y la matriz no cae en la categoría anterior.
- Ninguna de las anteriores .
Tenga en cuenta los siguientes casos de esquina:
- Una matriz con un solo número es monótono estrictamente decreciente (de manera muy vaga).
- Una matriz con el mismo número repetido es monótona, no aumenta, pero no disminuye estrictamente.
Reglas
Puede proporcionar un programa o una función
La entrada se puede tomar en cualquier formato razonable: matriz, lista, cadena con números separados por espacios, ...
Puede elegir tres salidas consistentes para las tres categorías respectivamente. Por ejemplo, las salidas pueden ser números 0
, 1
, 2
; o cadenas 1 1
, 1 0
cadena vacía.
El código más corto en bytes gana
Casos de prueba
Monótono estrictamente decreciente:
7 5 4 3 1
42 41
5
Monótono que no aumenta, pero no disminuye estrictamente:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Ninguna de las anteriores:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Respuestas:
Jalea ,
10 95 bytes-Método encontrado por DrMcMoylex, ¡ve a dar crédito!
TryItOnline! o ejecutar todas las pruebas
Devuelve:
-1
= monótono estrictamente decreciente;0
= monótono no creciente;1
= otro.¿Cómo?
fuente
M
parte de algún mapa de caracteres de 8 bits ? No puede decir que son 5 bytes porque no lo es. CP1252 no lo tiene por ejemplo.byte
en el encabezado de esta publicación.Perl 6 , 17 bytes
2
1
0
Expandido:
fuente
>
se cambió conafter
y>=
con!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 bytesPruébalo en línea! o verificar todos los casos de prueba!
¡3 bytes guardados, gracias a @LuisMendo!
Las salidas son
Estrictamente decreciente: -1
No creciente: 0
Otro: 1
Explicación:
fuente
0
lugar de anteponer la última ventaja1
? Algo así como0hdX>ZS
0hdX>0/
- Pregunta para usted y @LuisMendo: ¿Es posible aprovechar el hecho de que sort es solo 1 char (opuesto aX>
), usando de alguna manera implícita el último valor?S
, pero no he encontrado una manera de acortarlo ...Mathematica, 22 bytes
Función sin nombre que toma una lista de números como entrada. Devuelve
-1
si la lista está disminuyendo estrictamente,0
si no aumenta pero no disminuye estrictamente, y1
si no lo es.Algoritmo bastante simple: tome las diferencias de pares consecutivos, tome el más grande y tome el signo de ese par más grande.
(Siento que debe existir algún lenguaje en el que este algoritmo sea de 3 bytes ...)
Con respecto a una matriz con una sola entrada:
Differences
produce una lista vacía;Max
de una lista vacía da-∞
(!); ySign[-∞]
evalúa a-1
(!!). Entonces, en realidad funciona en este caso de esquina. Tengo que amar a Mathematica a veces. (De hecho, la función también etiqueta correctamente una lista vacía como estrictamente decreciente).fuente
Haskell,
403837 bytesDevoluciones
GT
para Monotono estrictamente decrecienteEQ
para monótono no crecienteLT
máscompare
compara dos números y devuelveGT
(EQ
,LT
) si el primer número es mayor que (igual que, menor que) el segundo número.zipWith compare<*>tail
compara elementos vecinos.foldl min GT
reduce la lista de los resultados de la comparación con la función min comenzando con GT (nota:LT
<EQ
<GT
).Editar: @xnor encontró
23 bytes. ¡Gracias!fuente
GT
, porque necesitamos el mínimo de la lista (tenía el máximo, que era incorrecto y un relicto de una versión anterior donde usé en=<<
lugar de<*>
).foldl min GT
?Lisp común,
4340 bytesEsto toma la entrada como una lista de Lisp, y devuelve
(T T)
,(NIL T)
y(NIL NIL)
para distinguir las 3 categorías. Aquí se ejecuta en los casos de prueba proporcionados:fuente
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Tenga en cuenta que puede escribir(lambda(x)...)
para ser más corto.Python 2, 30 bytes
-1
para disminuir estrictamente,0
para disminuir débilmente,+1
para no disminuirUtilizando
cmp
para comparar elementos consecutivos, y toma el máximo. Esto se hace eliminando el primer elemento de una copia de la lista y luego asignandocmp
. Por ejemplo,l=[2,2,1]
daque tiene
max
0 porque existe una igualdad.La lista más corta se amplía automáticamente con
None
, que es menor que todos los números y es inofensiva. Este elemento fantasma también aísla contra la tomamin
de una lista vacía cuando la entrada tiene longitud 1.fuente
Brachylog , 7 bytes
Pruébalo en línea!
Esto se imprime
1
para disminuir estrictamente,0
para no aumentar y defalse.
otra manera.Explicación
Otras soluciones de 7 bytes
fuente
R, 44 bytes
Lee la entrada de stdin e imprime lo siguiente según la entrada:
Salida:
[1] FALSE TRUE
: Monótono no creciente[1] TRUE FALSE
: Monótono estrictamente decreciente[1] FALSE FALSE
: Ninguna de las anterioresfuente
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
es 1 byte más corto. Devuelve 0 si es monótono estrictamente, 1 si es monótono sin aumento y 2 si ninguno de los anteriores. No estoy seguro de si está permitido devolver nada si ninguno de los anteriores, pero podría simplificar aún másd=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
es un byte mejor.JavaScript (ES6), 51 bytes
Devuelve 0 para disminución estricta, 1 para no aumento, 2 de lo contrario.
fuente
05AB1E ,
5 58 bytesError solucionado por Emigna, gracias! Utiliza el mismo método que el de DrMcMoylex .
Pruébalo en línea!
Salida es:
fuente
®¸ì¥Z0.S
solucionaría el problema del elemento único.Ruby, 37 bytes
Salida:
[true,true]
,[true,false]
o[false,false]
fuente
Mathematica,
1511 bytesEsta es una función variada, que toma todos los enteros de entrada como argumentos separados.
True | True
False | True
False | False
Tenga en cuenta que
|
no esOr
sinoAlternatives
, lo que es parte de la sintaxis de coincidencia de patrones, lo que explica por qué estas expresiones no se evalúan aTrue
,True
,False
, respectivamente.El código en sí es principalmente una aplicación de este consejo . Por ejemplo
##>0
esGreater[##, 0]
pero luego##
se expande a todos los valores de la entrada, así que conseguir algo asíGreater[5, 3, 2, 0]
, que a su vez significa5>3>2>0
.fuente
Raqueta , 44 bytes
Invocado:
Resultado:
fuente
>
como verdadero. Common Lisp lo hace bien, pero no puede definir el caso de arity 0 (que también debería ser cierto).C ++ 14, 85 bytes
Devuelve 3 (0b11) para disminuir estrictamente, 1 (0b01) para no aumentar y 0 en caso contrario.
Sin golf:
Pensé que este era un problema perfecto para las expresiones plegables de C ++ 17:
Desafortunadamente, no encadena a los operadores relacionales pero sí
lo que no se quería.
fuente
Python 2,
6174 bytes+13 bytes para la entrada de número único
Requiere entrada en forma de lista de paréntesis como
[3,2,1]
. Devuelve 2 para disminución estricta, 1 para no aumento y 0 en caso contrario.Vieja solución:
fuente
Python 3,
8152 bytes (Gracias a FryAmTheEggMan )Pruébalo en línea!
fuente
sorted(s)[::-1]
es más corto para revertir una lista ordenada. En Python 3 puede hacer{*a}
para obtener un conjunto de elementos dea
.sorted
devuelve una lista para que tampoco tenga que convertir el conjunto en una lista. ¡También agregar booleanos es perfectamente kosher! Finalmente, puede enviar una lambda anónima, por lo que no necesitaf=
. Obtengo 52 bytes al final. repl.it/E7eG/2Befunge, 50 bytes
Pruébalo en línea!
Acepta la entrada como una secuencia de int separada por espacios, y devuelve 0 si disminuye estrictamente, 1 si disminuye no estrictamente, 2 de lo contrario.
Dado que leer befunge es imposible si no conoce el idioma, este es el algoritmo en pseudocódigo:
* en la memoria befunge hay una pila que comienza con una cantidad infinita de 0. pop (), push (x), input () y output (x) se explican por sí mismos, las otras pseudofunciones que utilicé funcionan así:
Funge!
Versión anterior, solo 41 bytes pero no válida ya que requiere un 0 para terminar la secuencia de entrada (o usar un intérprete como este )
Pruébalo en línea!
fuente
0
no cuenta como un formato de entrada válido. Creo que pertenece a la categoría de "entrada preprocesada". De hecho, algunas respuestas agregan a0
en el código (lo que incluye eso en el conteo de bytes). Sería aceptable si pudieras ¿Puedes reemplazar el0
por algún carácter no numérico? Eso sería aceptable0
insertado por el código para tratar el caso de que la entrada tenga solo una entrada. Esa es una razón por la que considero que incluir eso0
en la entrada no es válido. De todos modos, si hay un intérprete que no lo necesita, puede usar ese intérprete para demostrar que su respuesta es válida sin el0
. Si el intérprete de Try-it-online lo necesita0
, puede incluirlo con fines de demostración, con una nota explicativa apropiadaJ, 14 bytes
El verbo monádico toma la lista de la derecha, regresa
1
para disminuir estrictamente,0
para disminuir débilmente y de_1
otra manera.Toma el signo
*
del mínimo<./
de diferencias consecutivas2-/\
de la lista. J no cambia el orden de las diferencias al tomarlas, por lo que la secuencia está disminuyendo estrictamente si todas son positivas. En particular,<./
devuelve infinito positivo en las listas de elementos cero.En uso en REPL:
fuente
C,
6867 bytesUna función
f
, a la que se le pasa una matriz de ints (l
) precedida por su longitud (n
, también un int). Devuelve 3 si el tono monótono disminuye estrictamente, 1 si el tono monótono no aumenta, pero no disminuye estrictamente, 0 en caso contrario.Sin golf ligeramente para facilitar la lectura:
Reorganizado y comentado para mostrar lógica:
Casos de prueba (cortesía de IDEOne ):
fuente
Retina , 41 bytes
Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
2
3
1
Explicación
Convierte la entrada unaria.
La expresión regular aquí coincide con un par creciente de números consecutivos. Si este es el caso, la entrada claramente no puede ser no creciente. La
A
denota como una etapa "anti-grep", lo que significa que la línea de entrada se descarta y se reemplaza con la cadena vacía si la expresión regular coincide.Esta es una etapa dividida que se utiliza para agregar un salto de línea a la entrada solo si la entrada no se descartó. Así que tenemos dos resultados posibles hasta ahora: las entradas que no aumentan obtienen un salto de línea al final y otras aún están vacías.
Finalmente, contamos el número de coincidencias de esta expresión regular. La expresión regular coincide con números idénticos (y luego todo hasta el final de la cadena para evitar múltiples coincidencias de este tipo para entradas como
1 1 1 1
), o el "final de la entrada". Veamos los tres tipos de entradas:$
coincidencias. Ahora$
no es exactamente "el final de la cadena". También puede coincidir frente a un salto de línea final. Así que en realidad obtendremos dos coincidencias, una al final de la entrada y otra después del salto de línea que insertamos.$
solo coincide una vez.fuente
Axioma, 114 bytes
Sin golf
Resultados
fuente
APL, 16 bytes
Nota: ingrese una matriz de elementos como por ejemplo
a←1⍴3
:a←4 3 2 1
Interpretación de salida:
Idea: pruebe la monotonicidad comparando la matriz original con la ordenada, verifique que no aumente comparando la matriz con las duplicaciones eliminadas.
(Y creo que se puede mejorar ...)
fuente
Haskell, 36 bytes
(+x)
es porque haskell interpreta mal(-x)
como un valor en lugar de una sección. Me pregunto si toda la expresión se puede hacer rentable sin puntos.fuente
LabVIEW, 12 nodos, 18 cables ==> 48 bytes por convención
No hay funciones ocultas en los otros marcos de casos, solo un cable de ancho.
fuente
Ceilán, 86 bytes
La función toma la entrada como sus parámetros y devuelve una tupla de cero o uno booleanos:
[false]
para Monotono estrictamente decreciente ,[true]
para Monotono no creciente, pero no estrictamente decreciente , y[]
para Ninguno de los anteriores .Se puede usar así:
Salida:
Una versión no comentada y comentada:
fuente
Clojure, 34 bytes
Muy sencillo, devuelve
1
si está disminuyendo estrictamente,2
si no aumenta y denil
otra manera.También intenté evitar
apply
con macros,~@
pero solo es más largo con 43 caracteres (esto da como resultado[1 2 nil]
):fuente
Pip , 8 bytes
Programa completo Toma la lista de entrada como argumentos de línea de comandos. Salidas
11
para disminuir estrictamente,01
para no aumentar,00
para ninguno.Pruébalo en línea!
Explicación
Este enfoque funciona porque los operadores de comparación de Pip, como Python, encadenan juntos:
4>3>2
es verdadero, en lugar de ser(4>3)>2
(falso) como en C. Y el mismo comportamiento se cumple cuando los operadores de comparación se modifican con el$
metaoperador de plegado.fuente
Japt ,
987 bytesSalidas
-1
para "monótono estrictamente decreciente",0
para "monótono no creciente" y de1
otro modo.Intentalo
1 byte guardado gracias a Oliver .
fuente
än mg rw
devuelve los resultados incorrectos sin elJ
pero ese no es el caso conän rw g
. Extraño.R , 34 bytes
Pruébalo en línea!
Puertos DJ's MATL respuesta .
R , 43 bytes
Pruébalo en línea!
Devoluciones
2
por estrictamente decreciente,1
por no aumentar, y de0
otra manera.all(x==cummin(x))
esTRUE
(se convierte a1
cuando se usa en aritmética) si y solo sif
no aumenta, incluido el caso estricto.all(diff(x)<0)
esTRUE
solo cuandof
está disminuyendo estrictamente.fuente