Descripción del desafío
Una subsecuencia monotónica es una secuencia de números [a1, a2, ..., an]tal que
a1 <= a2 <= ... <= ano a1 >= a2 >= ... >= an. [1, 3, 3, 7, 9, 13, 13, 100]es una subsecuencia monotónica (no decreciente), así como [9, 4, 4, 3, 0, -10, -12](esta no aumenta), pero [1, 3, 6, 9, 8]no lo es. Dada una lista de enteros (en cualquier formato razonable), genera el número más pequeño de Nmodo que la secuencia de estos enteros se pueda dividir en Nsecuencias monotónicas.
Ejemplos
[1, 3, 7, 5, 4, 2] -> [[1, 3, 7], [5, 4, 2]] -> 2
[1, 2, 3, 4, 5, 6] -> [1, 2, 3, 4, 5, 6] -> 1
[3, 1, 5, 5, 6] -> [[3, 1], [5, 5, 6]] -> 2
[4, 6, 8, 9, 1, 6] -> [[4, 6, 8, 9], [1, 6]] -> 2
[3, 3, 3, 3] -> [[3, 3, 3, 3]] -> 1
[7] -> [[7]] -> 1
[] -> [] -> anything (you don't actually have to handle an empty list case)
[1, 3, 2, -1, 6, 9, 10, 2, 1, -12] -> [[1, 3], [2, -1], [6, 9, 10], [2, 1, -12]] -> 4

[4,4,8,8,1,4,5] -> 20 / undefinedque parece que debería ser 0 o la representaciónundefineden nuestro idioma, pero a partir de tu comentario sobre la respuesta de Jonathan Allan Jelly, parece queundefinedsignificaanything... ¿Cuál es? ? En el segundo caso, sugeriría escribir enanythinglugar deundefinedRespuestas:
Brachylog , 12 bytes
Pruébalo en línea!
Esto devuelve
false.para la lista vacía[].Explicación
Esto devolverá el más pequeño porque
~cgenerará puntos de elección desde el número más pequeño de sublistas hasta el más grande.fuente
ZporqueZes un nombre de variable; entonces estamos diciendo "llame a este programa con la Salida como variable". Puede cambiarZa cualquier otra letra mayúscula ; Es solo un nombre variable. La razón por la que existe este argumento es para permitir la posibilidad de establecer realmente la salida en algo, en lugar de una variable.4en ese ejemplo, le dirá si eso es correcto o no )3porque no encontrará ninguna lista de sublistas donde todas sean monótonas y de longitud3. Solo lleva mucho tiempo porque probará todas las listas posibles de sublistas, incluso aquellas que en realidad tienen más de 3 elementos porque la longitud se verifica después de encontrar la lista. Porque5dicetrueporque de hecho hay al menos una lista de longitud5con sublistas monótonas que funciona. Entonces, este programa devuelve la longitud más pequeña cuando la salida es una variable y si hay alguna lista de esa longitud que funcione si la salida es un entero.Perl, 65 bytes
62 bytes de código + 3 bytes para la
-nbandera.monot_seq.pl:
Dé la entrada sin nueva línea final, con los números separados por espacios:
-5 bytes gracias a @Gabriel Benamy.
fuente
($&<=>$1)*($1<=>$2)||$1==$2en($&<=>$1)*($1<=>$2)>=0Mathematica, 111 bytes
Función con nombre que
ftoma una lista no vacía de números (enteros o incluso reales). Funciona de adelante hacia atrás, descarta el primer elemento repetidamente y realiza un seguimiento de cuántas subsecuencias se necesitan. Más detallado:fuente
d=#2-#&@@#&;Además, definir cualquierafogcomo operador unario±probablemente ahorrará algunos bytes.Jalea , 19 bytes
TryItOnline! o ejecutar todas las pruebas (la lista vacía da como resultado
1)¿Cómo?
(No estoy convencido de que este sea el método más adecuado para minimizar el recuento de bytes)
fuente
1(lo que en realidad creo que tiene más sentido que0).undefinedsignifica: el resultado es irrelevante.Perl,
98979679 bytesLa entrada se proporciona como una lista de números, separados por espacios, proporcionados en tiempo de ejecución, p. Ej.
(el 4 es la salida)
Legible:
El 'operador de nave espacial'
<=>devuelve -1 si LHS <RHS, 0 si LHS = RHS y +1 si LHS> RHS. Al comparar los tres elementos secuenciales$a,$b,$cpara determinar si son monótona, sólo es necesario determinar que no es exactamente el caso de que uno de$a<=>$b,$b<=>$ces 1 y el otro es -1 - que sólo sucede cuando su producto es -1. Si bien$a==$bo$b==$c, entonces la secuencia es monotónica, y el producto es 0. Si$a < $b < $c, entonces ambos resultan en -1, y -1 * -1 = 1. Si$a > $b > $c, entonces ambos resultan en 1, y 1 * 1 = 1. En cualquier caso, la secuencia es monotónica y deseamos continuar.Si el producto es menor que 0, sabemos que la secuencia no es monotónica, y descartamos los valores
$a,$bque actualmente tenemos, e incrementamos nuestro contador de subsecuencia. De lo contrario, avanzamos un número.No devuelve nada si la entrada está vacía; de lo contrario, devuelve el menor número de subsecuencias monotónicas contiguas.
fuente
1yif(o tal vez lo hace en perlas antiguas, pero en las recientes no las necesita ). También puede (probablemente) reemplazarshiftporpop. Sin embargo, hay algunos casos de prueba en los que su código no funciona:6 3 6 3(imprime 3 en lugar de 2),4 3 2 1(imprime 2 en lugar de 1). Usando enpoplugar deshiftresolverlos, pero creando otros nuevos (1 2 3 4imprime 3 en lugar de 1) ...C # 6,
297209 bytesSin golfing con explicaciones
fuente
JavaScript (ES6), 69 bytes
Toma la entrada como múltiples parámetros. Funciona comparando recursivamente los primeros tres elementos para ver si son monótonos, de ser así, elimina el elemento del medio ya que es inútil, si no, elimina los dos primeros elementos y comienza una nueva secuencia.
fuente
Clojure, 97 bytes
reducerealiza un seguimiento de la subsecuencia actual y calcula cuántas veces<=y>=condiciones fallan. El último1toma el segundo elemento del resultado (siendo el contadori).fuente