Recientemente tuve una prueba de matemáticas y noté que cierto número en la prueba coincidía con un patrón interesante. El número ( 28384
) coincide con una secuencia de dígitos genéricos que se ve así
(n)(x)(n+1)(x)(n+2)(x)(n+3) etc...
donde n
y x
son enteros de un solo dígito. La secuencia puede comenzar con uno x
o n
y terminar con uno x
o n+y
.
Su tarea es, dado un entero positivo de varios dígitos, generar un valor verdadero o falso, dependiendo de si la entrada coincide con el patrón. La entrada tendrá entre 4 y 18 dígitos. Puede tomar la entrada como una representación de cadena del número entero. La entrada no comenzará con un 0 pero puede contener o terminar con 0.
n+y
siempre será un número de un solo dígito (de ahí que el límite de longitud sea 18).
Casos de prueba
Estos deberían generar un valor verdadero
182838485868788898
4344
85868
12223242526
Y estos deberían ser falsey
12345
6724013635
36842478324836
1222232425
5859510511
Como con todos los códigos de golf, ¡el código más corto gana! ¡Buena suerte y que las probabilidades estén siempre a tu favor!
x
yn
no cero para los números que se ajustan a la regla?Respuestas:
Python 2 ,
84818079 bytes-1 byte gracias a ovs
Pruébalo en línea!
Python 3 ,
82797877 bytesPruébalo en línea!
Un poco más corto en Python 3, pero no pensé que mereciera su propia respuesta.
Explicación
Configuramos una función
g
que toma una cadena y un índice (ya sea 1 o 0).g
luego devuelve si o nolen(set(x[a::2]))
, es decir, el número de dígitos únicos en cualquier otra posición, es igual a(x[a==0::2]in"123456789")
, si los otros dígitos están en orden ascendente o no. Si los dígitos están en orden ascendente, esto devuelve si son todos iguales o no, de lo contrario, preguntará si el conjunto está vacío, lo que no puede ser, por lo tanto siempre devuelve falso.fuente
x[a<1::2]in"123456789"
puede ser"0"<x[a<1::2]<":"
(comparar caracteres compara códigos de acceso)a<1
? Parece que eso puede ser justoa
.Jalea ,
1311 bytesPruébalo en línea!
Explicación:
fuente
05AB1E , 15 bytes
Pruébalo en línea!
Explicación
Debería funcionar (los casos de prueba funcionaron), pero si encuentra algún defecto, hágamelo saber.
14 bytes si ninguna salida cuenta como falso:
fuente
D, 117 bytes
Definitivamente subóptimo, pero funciona bien
¡Pruébelo en línea!
fuente
Haskell
1081139795 bytesLlamada de muestra:
f "182838485868788898"
rendimientosTrue
Versión sin golf con explicaciones:
fuente
isPrefixOf
no está en Prelude, por lo que debe incluirimport Data.List
en su código o utilizar una alternativa, por ejemploand(zipWith(==)(n:r)[n..])
.x/=y
puede ser1>0
porque si no esx/=y
asíx==y
y el primer caso lo atrapa.where
definitoriasc
yd
auxiliares fuera def
está bien.f
entonces se puede acortar af s@(_:n:_)=c s||c(n:s)
.;
. Es el mismo recuento de bytes, pero mejora la legibilidad del código.JavaScript (ES6),
666360 bytesToma la entrada como una cadena.
Casos de prueba
Mostrar fragmento de código
fuente
C (gcc), 123 bytes
Pruébalo en línea!
fuente
Python 3 ,
99 9689 bytesall()
función&
|
y reemplazar variable adicional pork<1
Pruébalo en línea!
Explicación:
Primero divida la cadena en dos listas: una con elementos indexados impares y otra con elementos indexados pares. Se supone que las dos listas A y B son tales que:
O todo lo contrario
La condición consecutiva es verificada por:
a in '123456789'
La condición del mismo número se verifica mediante:
all(i=a[x] for i in a)
fuente
i
conk<1
y soltar eli
argumento todos juntos.&
lugar deand
. Tuor
puede ser reemplazado con|
también.PHP , 68 bytes
Pruébalo en línea!
Salida de parte de la cadena de búsqueda a partir de e incluyendo la primera aparición de entrada al final de la cadena de búsqueda como valor verdadero y nada falso
para 2 Bytes más se puede reemplazar
echo$s;
con!!echo$s;
obtener1
como valor TruthyEncuentre la aparición de la entrada en una de las siguientes cadenas de la matriz
fuente
JavaScript (ES6), 54 bytes
Toma la entrada como una cadena.
fuente
MATL , 15 bytes
Pruébalo en línea!
Con algo de ayuda de @LuisMendo en el chat. Tenga en cuenta que, si la salida vacía + error también se considera 'falso',
X
se puede omitir, llevando la puntuación a 14 bytes .fuente
Mathematica, 121 bytes
fuente
Pyth , 20 bytes
Salida
[]
cuando el número coincide con el patrón de dígitos, cualquier otra cosa.Pruébalo en línea!
Explicaciones (ejemplo con entrada
85868
)fuente
Pyth, 17 bytes
Pruébalo aquí
El mismo algoritmo que mi respuesta Jelly.
Explicación:
fuente
Python 3 ,
167161157131106bytes-55 bytes gracias a las sugerencias de @ WheatWizard
Pruébalo en línea!
fuente
set(c)
es lo mismo que{*c}
. (al menos en Python 3)[t[z]for z in range(0,len(t),2)]
También es solo un empalme de lista. Puedes hacer esto simplemente cont[::2]
. Si no está familiarizado con esta sintaxis, le sugiero que eche un vistazo a los documentos, porque es bastante útil.Java (OpenJDK 8) ,
128119118108107104 bytesPruébalo en línea!
Explicación:
fuente
Retina , 47 bytes
Pruébalo en línea!
Emite 1 si coincide con el patrón, 0 si no coincide
Explicación
Convierta cada dígito n en n + 1 en unario, separados por punto y coma
(Nueva línea final) convierte cada dígito a la diferencia entre sí mismo y los dos puntos anteriores.
(Nueva línea final) elimina los primeros 2 dígitos
Cuenta el número de coincidencias de este patrón, que comprueba si hay 0 y 1 alternados
fuente