Un número de colina es un número que tiene el mismo dígito en el primero y el último , pero eso no es todo. En un número de colina, los primeros dígitos están aumentando estrictamente y los últimos dígitos están disminuyendo estrictamente. El dígito más grande se puede repetir .
Aquí hay un ejemplo de un número de colina:
12377731 | 1237... | ...731
^ same ^ | strictly increasing | strictly decreasing
---------+---------------------+---------------------
12377731
^^^ okay because largest digit can be repeated
Esto no es :
4588774 | ...8774
| ^^ not the largest digit
| so this has to be strictly decreasing
| but it's not, so not a hill number
Desafío
Dado un número entero positivo, escriba un programa completo o una función que devuelva verdad para los números de colina pero falsa en otros valores.
Notas:
- La entrada y salida pueden estar en cualquier formato razonable .
- Este es el código de golf, por lo que la respuesta más corta en cada idioma gana.
Casos de prueba
12321 -> Truthy
1233321 -> Truthy
99 -> Truthy
3 -> Truthy
234567992 -> Truthy
1232 -> Falsy
778896 -> Falsy
23232 -> Falsy
45566554 -> Falsy
5645 -> Falsy
code-golf
decision-problem
number-theory
u_ndefined
fuente
fuente
222222222
? ¿Es un número de colina plana?222222222
es un número colina, más grande es de 2 dígitos y por lo tanto se puede repetir1230321
un número de colina?Respuestas:
Jalea , 8 bytes
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
6254 bytesToma la entrada como una cadena. Devuelve un valor booleano.
Pruébalo en línea!
Comentado
JavaScript (ES6), 65 bytes
Una solución usando una expresión regular. Toma la entrada como una cadena. Devuelve0 0 o 1 .
Pruébalo en línea!
¿Cómo?
Primero convertimos el número a una lista de diferencias de dígitos por pares en[ - 9 , 9 ] :
Ejemplo:
Esta matriz se coacciona a una cadena, lo que da:
Aplicamos la siguiente expresión regular:
Finalmente, también probamos si el último dígito
p
es igual al primer dígitos[0]
.fuente
Pyth, 16 bytes
Prueba el conjunto de pruebas .
fuente
Jalea , 11 bytes
Explicación:
Pruébalo en línea!
fuente
Perl 6 , 39 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 ,
114112 bytesPruébalo en línea!
fuente
R , 65 bytes
Toma cuerdas. Tomó la idea de verificar la invariancia de clasificación de la respuesta Pyth.
Pruébalo en línea!
fuente
05AB1E ,
19171312 bytes-5 bytes mediante la creación de un puerto de @lirtosiast respuesta Pyth 's .
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Â{RQ
alternativamente puede ser(Â{Q
para el mismo número de bytes, donde(
niega cada signo: Pruébelo en línea .fuente
J, 23 bytes
Idea robada de las respuestas de Jelly. Solo quería ver cuán corto podría hacerlo en J.
Pruébalo en línea!
fuente
MATL , 12 bytes
Pruébalo en línea!
Explicación
La entrada es una cadena de dígitos. La salida es a
1
o0
. El número222222
es un número de colina según este programa. Ahorré 2 bytes copiando el método de Dennis para verificar la igualdad del primer y último dígito.fuente
Python 2 , 53 bytes
Toma la entrada como una cadena. La salida es por presencia o ausencia de una excepción .
Pruébalo en línea!
Python 2 , 62 bytes
Toma la entrada como una cadena y devuelve un booleano.
Pruébalo en línea!
fuente
Lenguaje Mathematica / Wolfram,
6964 bytesPura función. Toma la entrada como un entero, devuelve
True
oFalse
.Explicación:
La primera cláusula verifica la "colina":
IntegerDigits
: Obtener dígitos del número entero. Almacenar eny
.-Differences
: Tome las diferencias sucesivas y los carteles.Sign
: Reemplace cada entrada con +1 si es positivo, 0 si es cero y -1 si es negativo. Almacenar enx
.Sort
: Ordena la lista de +1, 0, -1 de menor a mayor. Comparar con la lista original enx
.La segunda cláusula verifica si el primer y el último dígito son iguales.
Un consejo para @IanMiller para consejos sobre cómo refinar este código.
fuente
IntegerDigits
yDifferences
son bastante largos nombres de función es un poco molesto.Sort[x=Sign@-Differences[y=IntegerDigits@#]]==x&&y[[1]]==Last@y&
Japt, 11 bytes
Toma la entrada como una matriz de dígitos.
Pruébalo o ejecuta todos los casos de prueba
fuente
Retina 0.8.2 , 52 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Convierta cada dígito a unario dos veces, separado por
;
sy terminado por,
s. Sin embargo, puede pensar en el resultado como el primer dígito, a;
, luego todos los pares de dígitos adyacentes, los dígitos de cada par separados por,
y los pares separados por;
s, luego otro;
, luego el último dígito, luego un final,
.Resta los pares de dígitos adyacentes. Esto deja
;,;
dígitos iguales y1
s en el lado mayor para dígitos desiguales. (Esto podría hacerse como parte de la siguiente expresión regular, pero obviamente eso no sería tan complejo).Haga coincidir el primer dígito, luego cualquier número de pares de dígitos ascendentes, luego cualquier número de pares de dígitos iguales, luego cualquier número de pares de dígitos descendentes, luego haga coincidir el primer dígito nuevamente al final.
fuente
Rojo , 181 bytes
Pruébalo en línea!
Más legible:
fuente
Powershell, 77 bytes
Menos guión de prueba de golf:
Salida:
fuente
C # (compilador interactivo de Visual C #) , 161 bytes
Pruébalo en línea!
Aquí hay una descripción general de cómo funciona esto ...
string
fuente
Python 3 , 114 bytes
Pruébalo en línea!
Mucho más que algunas soluciones de Python 2, pero esta está basada en def y me gusta.
fuente
Ruby , 47 bytes
Pruébalo en línea!
Entrada como matriz de dígitos, la salida es booleana.
fuente