Problema:
Su tarea es decidir si en una secuencia de números, cada número contiene al menos uno de los dígitos del número que lo precedió.
Por ejemplo, lo siguiente debería devolver la verdad:
[1, 12, 203, 0, 30]
^ ^ Contains a 0
^ Contains a 2
^ Contains a 1
Lo siguiente debería devolver falsey:
[1, 32, 23, 34]
^ Doesn't contain a 1, therefore false
Su envío puede ser una función o un programa completo.
Entrada:
La entrada puede ser cualquier tipo razonable de secuencia. Una matriz de números, una matriz de cadenas, una cadena de números delimitada, etc.
Sin embargo, el orden es importante, por lo que cualquier estructura que elija aceptar como entrada obviamente debe tener un orden definido.
La entrada se puede tomar a través del stdin o como argumento.
Puedes asumir:
todos los números serán enteros no negativos
la entrada siempre contendrá al menos 2 números
los números de entrada no comenzarán con un 0
Salida:
La salida será un valor verdadero o falso (como lo define su idioma), que representa si se cumple o no la especificación anterior.
Los valores de verdad / falsey no necesitan ser consistentes entre las pruebas.
Puede enviarse a la salida estándar o devolverse.
Casos de prueba:
True cases:
[1, 1, 1, 11, 111, 11, 1]
[12, 23, 34, 45, 56]
[65, 54, 43, 32, 21]
[123, 29, 9, 59, 55, 52, 2017, 2]
[1234567890, 19, 95, 5012, 23]
False cases:
[1, 2, 3, 4, 5, 1, 11] (2 doesn't contain a 1)
[12, 23, 33, 45] (45 doesn't contain a 3)
[98, 87, 76, 11, 12, 23] (11 doesn't contain a 7 or 6)
Este es el código de golf, por lo que gana el menor número de bytes.
JavaScript (ES6),
4744 *43 bytesGuardado un byte gracias a @Neil
Toma la entrada como una lista de cadenas.
Fragmento de prueba
Mostrar fragmento de código
* ( tachado 44 sigue siendo regular 44 )
fuente
`[${p}]`
funcionaa=>a.reduce((l,r)=>`${l}`.match(`[${r}]`)&&r)
(que también funciona para la entrada numérica).p&&
si lo configurap=1/19
?05AB1E , 10 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
€Sü.å
- Desearía que esto funcionara como pensé que lo haría.ü.å
o€Süå
.CJam ,
181514 bytesGuardado 4 bytes gracias a Martin Ender
Pruébalo en línea!
Explicación
fuente
Haskell,
514835 Bytes-3 bytes gracias a @NickHansen! Realmente necesito mejorar con esos operadores de mónada
-4 y -9 bytes gracias a @Laikoni y @nimi respectivamente!
Esta versión toma la entrada como un conjunto de cadenas, eliminando la necesidad de
show
hacerlo, pero por lo que puedo ver, funciona en gran medida de la misma manera que la versión anterior:(Estoy bastante seguro de que puedo enviar una función anónima como esta, pero la arreglaré si es necesario)
Primero, los números se convierten en cadenas. Luego, la magia de la mónada
zip=<<tail
crea una función que comprime la lista consigo misma que empareja cada entrada con sus vecinos. Luegoall
asigna una lambda a cada par que verifica si una cadena contiene caracteres de la otra y finalmente verifica que todos salganTrue
.Versión antigua que funciona básicamente de la misma manera:
fuente
and.(zipWith(any.flip elem)=<<tail).map show
["1234567890", "19", "95", "5012", "23"]
, para que pueda soltar el.map show
.Mathematica
62 4735 bytesCon 12 bytes guardados gracias a MartinE.
fuente
Rubí,
4948 bytesLa salida es
nil
para falso y un entero "aleatorio" para verdadero.fuente
Java 8,
949087 bytesLa entrada es una matriz de cadenas que representan los números. A partir de la segunda cadena, se realiza una comparación de expresión regular con cada cadena anterior para ver si contiene cualquiera de sus personajes:
.*[previous string].*
.Golfizado:
Sin golf:
fuente
a->{for(int i=1;i<a.length;)if(!a[i].matches(".*["+a[i++-1]+"].*"))return 0>1;return 1>0;}
( 90 bytes )a->{int r=1;for(int i=0;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
a->{int r=1,i=0;for(;++i<a.length;)r*=a[i].matches(".*["+a[i-1]+"].*")?1:0;return r>0;}
Jalea , 6 bytes
Pruébalo en línea!
Explicación
Es más obvio intentar usar
2/
aquí, pero eso ejecuta una función unaria en todos los segmentos de tamaño 2."Ḋ
Efectivamente ejecuta una función binaria en todos los pares de elementos adyacentes, lo que significa que podemos usarf
directamente (en lugar de tener que convertirlo en unario) funcionar comof/
). Esto termina dejando el último elemento de la entrada en su lugar, pero afortunadamente ni siquiera una entrada de 0 se convierte en una lista vacía cuando se convierte a decimal, por lo que no tiene ningún efecto en elẠ
.fuente
Python 3 , 48 bytes
Pruébalo en línea!
fuente
Jalea , 8 bytes
Pruébalo en línea!
¿Cómo?
fuente
05AB1E , 5 bytes
Código:
Utiliza la codificación CP-1252 . Pruébalo en línea! o Verifique todos los casos de prueba! .
Explicación:
fuente
RüÃõå_
fue lo que se me ocurrió por mi cuenta. Me siento honrado de haber estado tan cerca de su mejor respuesta, eliminando la mía. ¿Por qué no necesitas elR
sin embargo?R
para qué sirve entonces? : pPowerShell , 87 bytes
Pruébalo en línea!
No es el más corto en ninguna medida, sino un enfoque ligeramente diferente al que otros usan, y muestra la ingeniosa
|?{}
funcionalidad.Esto toma la entrada como una matriz de cadenas
$n
y luego realiza un bucle desde1
hastalength-1
. UsamosWhere-Object
(the|?{...}
) para extraer esos índices que son verdaderos para una condición particular. Puedes pensar en esto como unfor
bucle combinado con unaif
cláusula.La cláusula aquí es
[char[]]$n[($i=$_)-1]|?{$n[$i]-like"*$_*"}
. Es decir, tomamos el índice actual$_
, lo establecemos$i
, lo restamos1
y lo usamos para indexar$n
(es decir, obtenemos el elemento anterior en nuestra matriz de entrada). Luego se lanza como unachar
matriz y se envía a través de otroWhere-Object
procedimiento.La cláusula interna
$n[$i]-like"*$_*"
especifica que la cadena en el índice actual$i
es-like
el carácter actual$_
del índice anterior. Por lo tanto, esto generará cualquier carácter que sea común entre los dos elementos de la matriz. Por lo tanto, la cláusula externa solo será verdadera si hay un carácter en común (ya que una matriz vacía es falsey en PowerShell), por lo que el índice solo se seleccionará si hay caracteres en común.Luego, reunimos todos los índices que coinciden con los criterios, y verificamos que
.count
estos sean-eq
iguales a la longitud de la matriz de entrada. Ese resultado booleano se deja en la tubería y la salida es implícita.fuente
Perl 5 , 31 bytes
Un puerto de la bella de Martin Ender respuesta .
30 bytes de código +
-p
bandera.Pruébalo en línea!
fuente
APL (Dyalog APL) , 9 bytes
Pruébalo en línea!
∧/
están todos en la lista de×
las señales≢
de la cuenta de¨
Cada uno de2∩/
las intersecciones por pares de⎕
la entrada?fuente
PHP,
6568iterar sobre todos los números y eliminar todos los dígitos que aparecieron en el anterior. Cuente con qué frecuencia es igual al número en sí (sin eliminar ningún dígito). Si al menos uno igualara, no tendríamos una coincidencia en uno de los pares.
Se
trim
corrigió un error usando insted destrtr
. Gracias a @ JörgHülsermannfuente
["filename",1,11,414]
no funcionatrim
solo funciona para los caracteres principales y finales. Arreglado.a&
lugar denull!==
(-5 bytes).$argv[$i]
, porque "Si desde y para tener diferentes longitudes, los caracteres adicionales en el más largo de los dos se ignoran". (del manual)PHP, 75 bytes
toma números de argumentos de línea de comando; sale con
1
por falsedad, con0
por verdad.Ejecutar
-r
o probarlo en línea .$b
= un número que contiene todos los dígitos$b
argumento$b
1
0
fuente
PHP, 77 bytes
fuente
foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v)):1;echo$t;
77 bytes (sin probar).$k--
a--$k
y soltar uno) después de que su enfoque debe trabajar y hay que añadir un @ por la advertencia$k--
. Lo utilicé específicamente para que $ k siga siendo 0 en la primera ejecución. Y las advertencias son ignorables. Eso significa que el código ahora tiene 76 bytes, pero aún no se ha probado.foreach($argv as$k=>$v)$t=$k--?$t*preg_match("#[{$argv[$k]}]#",$v):1;echo$t;
funciona como debería. Pruebas con$argv = array(1, 12, 123, 3, 34, 45, 5, 5);
pantallas1
y pruebas con$argv = array(1, 12, 123, 3, 34, 45, 5, 6);
pantallas0
, como se esperaba.MATL , 14 bytes
Pruébalo en línea!
Gracias @LuisMendo por guardar un byte. Explicación:
fuente
1)VG
por1&)
(y esto evita repetir el primer número))
da los valores seleccionados como primera salida, y luego los valores restantes como segunda salidaClojure, 71 bytes
Una función anónima que acepta una secuencia de números. Devoluciones
true
/false
.Me gusta como se lee. Definitivamente hay algunas áreas que se pueden mejorar aquí. Mi función que se pasa
map
no se puede cambiar fácilmente, por lo que no requiere la macro de la función, lo que significa que toda la función no puede hacer uso de la macro, que probablemente agregó algunos bytes. También sería bueno si pudiera encontrar una mejor manera de desempaquetar los valores en elevery?
predicado.fuente
SimpleTemplate, 124 bytes
Wow, esto fue un entrenamiento!
Este "simplemente" crea una expresión regular utilizando el elemento antiguo, que se muestra
1
como un valor verdadero, o nada de otra manera.Sin golf:
fuente
JavaScript (ES6), 37 bytes
Acepta entradas como una cadena de números separados por nueva línea. Basado en la excelente respuesta de Retina de @ MartinEnder ♦, pero haciendo toda la prueba en una sola expresión regular porque es más corto en JavaScript de esa manera.
fuente
Pip ,
1210 bytesToma datos como una serie de argumentos de línea de comandos. La salida es una lista no vacía para la verdad y una lista vacía para falsey. Pruébelo en línea o verifique todos los casos de prueba .
Explicación
fuente
Röda ,
4535 bytesPruébalo en línea!
Esto es similar a la solución Perl 5, que es un puerto de la solución Retina de Martin Ender. -10 bytes gracias a @Neil.
Aquí hay una solución diferente (
7372 bytes):Es una función anónima que extrae cadenas de la secuencia y comprueba que las cadenas consecutivas contienen los mismos caracteres. Explicación:
Posiblemente podría jugar más golf ...
fuente
^(\S*(\S)\S* (?=\S*\2))+\S+$
.Utilidades Bash + Unix,
7169 bytesPruébalo en línea!
La entrada está en stdin, un número por línea.
La salida está en el código de salida: 0 para la verdad, 1 para falsey.
Esto probablemente se puede jugar más al golf.
Para que el código anterior funcione, no puede haber ningún archivo en el directorio actual cuyo nombre sea un solo dígito. Si esto no es aceptable, reemplácelo
[\1]
en el programa con'[\1]'
(a un costo de 2 bytes adicionales).Ejecución de muestra (el último caso de prueba proporcionado en el desafío):
(1 aquí es falsey.)
Cómo funciona:
Lo demostraré en la muestra de ejecución anterior.
El comando sed convierte la entrada en:
El comando tr luego convierte esto a la cadena:
Esta cadena es un comando de shell para realizar la operación deseada, por lo que canalizo eso en sh y listo.
fuente
Q, 57 bytes
Nota: 0 agregado al inicio de la matriz de entrada dentro de la función. Esto se hizo para que la comparación del primer elemento se hiciera alistada. De lo contrario, el último carácter del primer elemento se toma para comparar. Sin embargo, podría hacer una verificación de tipo que agregue 7 bytes sobre el recuento actual.
fuente