Un número escalera es un número entero positivo x tal que su n º dígitos (una indexadas empezando con el dígito menos significativo) es igual a x% (n + 1) . Eso es un poco bocado, así que veamos un ejemplo. Tome 7211311 , si tomamos los residuos modulares de 7211311 en el rango 2-8 obtenemos lo siguiente:
7211311 % 2 = 1
7211311 % 3 = 1
7211311 % 4 = 3
7211311 % 5 = 1
7211311 % 6 = 1
7211311 % 7 = 2
7211311 % 8 = 7
¡Estos son los dígitos de 7211311 ! Por lo tanto, 7211311 es un número de escalera.
Tarea
Escribir código que toma cuando se le da un número positivo como entrada, generará dos valores distintos, uno si el número es un número de escalera y el otro si no lo es.
Esta es una competencia de código de golf , por lo que su objetivo debe ser minimizar el número de bytes en su código fuente.
Casos de prueba
Aquí están los primeros 13 números de escalera:
1, 10, 20, 1101, 1121, 11311, 31101, 40210, 340210, 4620020, 5431101, 7211311, 12040210
code-golf
number
decision-problem
Asistente de trigo
fuente
fuente
0
números de una escalera? Muchas respuestas piensan que sí.Respuestas:
Haskell, 55
57bytesUn enfoque diferente al de la otra solución de Haskell.
Gracias xnor por guardar 2 bytes.
fuente
let
expresión.Brachylog ,
25211614 bytesPruébalo en línea!
Primera presentación de Brachylog: D
probablemente muy poco golfista... muchas gracias a Leaky Nun y Fatalize por alentar y ayudar a jugar golf desde 25 hasta solo 14. :) :)fuente
Javascript,
42413938 bytes-4 bytes gracias a @Shaggy y @ETHProductions
Esto toma el número como una cadena y devuelve
false
si el número es un número de escalera y lotrue
contrario.Fragmento de código de ejemplo:
fuente
!
ya que el desafío no especifica explícitamente que debe devolvertrue
verdadero yfalse
falso, simplemente que debe devolver 2 valores distintos.i
ti mismo:s=>[...s].some(d=>s%i--^d,i=s.length+1)
~x == -(x+1)
en enteros yx%-y == x%y
, creo que puedes obtener uno más:s=>[...s].some(d=>s%i++^d,i=~s.length)
05AB1E , 6 bytes
Código:
Utiliza la codificación 05AB1E . Pruébalo en línea!
Explicación:
fuente
Haskell, 60 bytes
Toma el número como int
fuente
Mathematica, 60 bytes
Pruébalo en línea!
@alephalpha lo jugó hasta 48
Mathematica, 48 bytes
el siguiente es 24120020
fuente
Python 2 , 54 bytes
Pruébalo en línea!
fuente
Japt ,
97 bytesToma la entrada como una cadena.
Pruébalo
Explicación
Implícitamente tomamos la cadena como entrada.
Mapa sobre cada carácter en la cadena.
J
es la constante de Japt para-1
y la´
disminuye en 1 en cada pasada (--
en JavaScript) Entonces, en el primer pase, esto nos da-2
.Usamos ese valor para realizar una operación de módulo en la cadena de entrada que se convierte automáticamente en un entero en el proceso. En JavaScript
x%-y
da el mismo resultado quex%y
.Invierta la cadena resultante.
Compruebe si la nueva cadena es igual a la entrada original y genera el resultado como un valor booleano.
fuente
(Y+2
, siento que eso podría ser al menos 1 byte más corto ...¥£%´JÃw
:-) (funciona porquex%y == x%-y
en JS)Neim , 6 bytes
Explicación:
Pruébalo en línea!
fuente
Jalea , 7 bytes
Pruébalo en línea!
fuente
Python 2 , 56 bytes
Pruébalo en línea!
fuente
Perl 6 , 32 bytes
Pruébalo en línea!
.comb
es el número de caracteres en la representación de cadena del argumento de entrada$_
(es decir, el número de dígitos).1 + .comb ... 2
es la secuencia de números desde uno mayor que el número de dígitos hasta 2.«%«
es la hyperoperator módulo que da el resto cuando$_
el argumento de entrada a su izquierda, se divide por cada uno de los elementos de la secuencia en su derecho:$_ % 2, $_ % 3, ...
.[~]
concatena esos dígitos en un nuevo número, que se compara con el argumento de entrada utilizando el operador de igualdad de cadenaeq
.fuente
PHP , 43 bytes
Pruébalo en línea!
PHP , 44 bytes
imprime 1 para verdadero y nada para falso
Pruébalo en línea!
fuente
Pyth , 13 bytes
-1 bytes gracias a Okx .
Pruébalo en línea!
Explicación
Solución alternativa , todavía 13 bytes (gracias a karlkastor )
Pruébalo en línea! Eso es esencialmente lo mismo que la primera solución, con la excepción de que se usa
i
para convertir una matriz de números a un número, y que el rango se genera de manera diferente.fuente
ss`M_
conjk_
para guardar 2 bytes.j
genera una cadena mientras que necesito un número para comparar con la entrada (que es un número).qi_.e%Q+2k`QT
usar map (.e
) enumerado en lugar de map. Y convertir los restos a una base 10 int de la lista en lugar de usar join.C ++, 104 bytes
1) versión original:
2) en una forma legible:
Pruébalo en línea!
fuente
Pari / GP , 42 bytes
Pruébalo en línea!
fuente
Python 2 ,
66 60 5857 bytesx and
(no debe verificar 0)enumerate
Pruébalo en línea!
fuente
Python 3: 63 bytes
Si pudiera contar el número de veces que desearía que 'enumerar' fuera más corto ...
Pruébalo en línea!
fuente
lambda m:all(m%n==int(x)for n,x in enumerate(str(m)[::-1],2))
Java (OpenJDK 8) , 60 bytes
Pruébalo en línea!
Una versión sin cadenas.
fuente
Java 8,
156149bytesSin golf:
Pruébalo en línea!
ACTUALIZACIÓN:
-7 bytes : eliminado inútil
{}
y reemplazadoInteger.parseInt(...)
pornew Integer(...)
-9 bytes : gracias a Kevin Cruijssen, eliminó un montón de inútil
()
, utilizado enLong
lugar deInteger
y enprint
lugar deprintln
. Gracias Kévin!fuente
new Integer
pueden sernew Long
(-3 bytes);println
puede serprint
(-2 bytes); y puede eliminar el paréntesis que lo rodeanew Long(s[0])%i+f;
(-4 bytes).Carbón ,
2015 bytesPruébalo en línea! Salidas
-
para un número de escalera, nada de lo contrario. El enlace es a la versión detallada del código.fuente
Python 2, 61 bytes
fuente
q / kdb +, 34 bytes
Solución:
Ejemplo:
Explicación:
Transmita el número de entrada a una cadena, cuente desde 0..length de cadena, agregue 2 a todos, inviértalo y alimente cada número
mod
junto con la entrada original. Transmita el resultado del mod a una cadena y reduzca la lista, verifique si es igual a la cadena del número de entrada:Notas:
La mayor parte de la solución es para generar la
2,3,4..
lista, tengo otra solución que hace menos cosas, pero termina siendo 37 bytes después del golf:fuente
Clojure, 75 bytes
La entrada es una cadena que se usa
map
y el final%
terminó siendo más corto que elfor[i(range(count %))]
enfoque.fuente
Haskell, 62 bytes
f x=and$zipWith(==)(reverse$show x)$map(head.show.mod x)[2..]
En lugar de invertir la lista (infinita) de módulos, trunca la lista comprimiéndola con la representación de cadena invertida de la integral x, que luego asegura que es igual en cuanto a elementos.
fuente
Perl 5 , 41 bytes
39 bytes de código + 2 banderas
-pa
Pruébalo en línea!
No genera nada (undef) para números de escalera, 1 para cualquier otra cosa
fuente