En este desafío, recibirá una cadena como entrada que contiene una cadena de X, Y y Z, por ejemplo. "XYZZ". X, Y y Z representan un personaje en particular. Este patrón se compara con una segunda entrada de cadena. Si el patrón existe como una subcadena en la segunda entrada, regrese True
, de lo contrario, regrese False
. Una vez que se encuentra un patrón en la palabra, el programa deja de buscar y regresa True
.
Ejemplos
Patrón: "XXYY"
succeed ---> True (pattern found: ccee)
success ---> False (pattern not matched)
balloon ---> True (pattern found: lloo)
Patrón: "XYXYZ"
bananas ---> True (pattern found: nanas)
banana ---> False (pattern not found)
- Nota: Esta no es la entrada real. Este es un ejemplo de cómo debería funcionar el programa. Su programa debería generar
True
oFalse
, u otros valores de Verdad / Falsificación.
Otra información importante / útil
- El patrón no necesita contener una X, Y y una Z, podría contener X e Y o incluso (aunque algo sin sentido) solo X.
- El patrón no puede estar vacío, pero esto no se utilizará como un caso de prueba.
- La cadena de búsqueda no estará vacía y estará en minúscula.
- El orden alfabético de X, Y y Z en el patrón no importa.
- X, Y y Z deben ser personajes únicos.
- Puede usar cualquier biblioteca que desee.
- La puntuación está determinada por el tamaño del código , en bytes. La puntuación más baja gana.
¡Buena suerte!
Respuestas:
Perl 5 , 85 bytes
¡Ahorré 40 bytes gracias a la sugerencia de Peter Taylor! (vea mi versión anterior a continuación para ver las diferencias)
83 bytes de código +
-pl
bandera.Pruébalo en línea!
XYXYZ se transforma en
((?!\1).)((?!\1)(?!\2).)\1\2((?!\1)(?!\2)(?!\3).)
(sí, algunas de las pruebas no pueden ser verdaderas, pero es más corto de esa manera), y la segunda entrada se verifica contra esa expresión regular. (vea las explicaciones de mi versión anterior para tener una mayor intuición de cómo funciona)Mi versión anterior:
Gracias a Arnauld por señalar un error que cometí en mi primera versión.
113 bytes de código +
-pl
banderas, y-Mre=eval
.Pruébalo en línea!
En el ejemplo XYXYZ: la primera expresión regular convertirá el patrón a (.) (.) \ 1 \ 2 (.), Y agregará al final una prueba para verificar si
$1
,$2
y$3
son diferentes: si es así,$\
se establece en uno. Luego, la segunda entrada es testículos contra esta expresión regular, y$\
se imprime implícitamente al final.La expresión regular generada para XYXYZ es
(.)(.)\1\2(.)(?{++$c;$\=1if!grep{$v{$c}{${$_}}++}1..3})^
.(Agregaré un poco más de detalles a las explicaciones cuando tenga un momento)
fuente
(.)((?!\1).)\1\2((?!\1)(?!\2).)
?Jalea , 9 bytes
Devuelve el número de veces que se encontró el patrón, siendo cero verdadero y falso falso.
Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 94 bytes
Funciona transformando el patrón en una expresión regular, por ejemplo, para
XYXYZ
generar/(.)(?!\1)(.)\1\2(?!\2)(?!\1)(.)/
.Noto una distinción interesante entre PCRE y JavaScript regexp: en PCRE,
\<n>
falla (y por lo tanto(?!\<n>)
tiene éxito) antes de que se defina el grupo de captura, mientras que JavaScript coincide con éxito con la cadena vacía (y por lo tanto(?!\<n>)
falla).fuente
Python 2 , 70 bytes
Pruébalo en línea!
Comprueba si una cadena coincide con un patrón utilizando el método en esta respuesta . Utiliza un prefijo de la cadena de búsqueda cuya longitud es igual al patrón. Corta el primer carácter de la cadena hasta que se encuentre una coincidencia, o
False
si queda vacía73 bytes:
Pruébalo en línea
Comprueba si una cadena coincide con un patrón utilizando el método en esta respuesta . Verifica recursivamente todas las subcadenas ramificándose para eliminar el primer o el último carácter hasta que la cadena esté vacía.
fuente
Python 3 , 100 bytes
Pruébalo en línea!
fuente
05AB1E ,
1916 bytesPruébalo en línea!
Devolverá 1 si es verdadero, nulo si no es cierto.
Esto puede ser de 14 bytes si se permite devolver los posibles valores de XYZ:
05AB1E , 14 bytes
Pruébelo en línea 2!
fuente
1
yTrue
(que generalmente es un inconveniente para este tipo de desafíos), pero si la especificación del desafío puede interpretarse como que nos permite definir la verdad / falsedad para el desafío La segunda versión funciona como usted dice.Java 7,
177176173 bytesExplicación:
Código de prueba:
Pruébalo aquí
Salida:
fuente
PHP, 89 bytes
Un regalo de @Christoph y @Titus
PHP, 105 bytes
Un regalo de @Christoph
PHP, 167 bytes
fuente
++$p
lugar de($p+1)
, aunque en realidad no lo he probado.[,$a,$b]=$argv;foreach(str_split($a)as$k=>$v)$r.=$k==($p=strpos($a,$v))?"(.)":"\\".++$p;echo preg_match("#$r#",$b);
.[,$a,$b]=$argv;foreach(str_split($a)as$v)$r.=$x[$v]?"\\$x[$v]":'(.)'.!$x[$v]=++$y;echo preg_match("#$r#",$b);
(Tenga en cuenta que debe mantener sus puntajes anteriores usando<strike>
)!
. Vale más la pena que los puntos que podría alcanzar con su buena solución.$argv
a$a
y$b
; -6 bytes confor(;a&$v=$argv[1][$i++];)
; -1 byte con nombres de variables más largos ( ¡en efecto!: Use en$vv
lugar de$v
, en$ii
lugar de$i
, en$rr
lugar de$r
, en$yy
lugar de$y
y puede usar en$$vv
lugar de$x[$v]
)C #,
184165155 bytesgracias aloisdg!
solución de retroceso, como beneficio adicional, funciona con un patrón con cualquier personaje.
fuente
var s=l==n.Length;
? Solo lo usa enreturn s?!s:
(donde!s
siempre estáfalse
), por lo que se puede cambiar areturn l==n.Length?0>1:
. Además, ¿qué es esto(n[i]!=n[j]||n[i]!=n[j])
? Verifican[i]!=n[j]
dos veces. Esto siempre serátrue or true
/false or false
..: Sint l = p.Length,i = 0, j;
i++
y suj--
dentro del bucle for. por ejemplo:for(j=i;j>=0;)if(p[i]==p[j]==(n[i]!=n[j--]))
Ruby,
6361 bytesEn lugar de buscar un patrón de expresiones regulares, simplemente intente sustituir 'X', 'Y' y 'Z' de todas las formas posibles, y encuentre una coincidencia literal.
(En realidad, el mismo concepto que la respuesta 05AB1E de carusocomputing)
fuente
JavaScript (ES6),
92898786 bytesToma entrada
p
(patrón) ys
(cadena) en la sintaxis de curry(p)(s)
. Devoluciones0
/1
.Formateado y comentado
Casos de prueba
fuente
Mathematica 18 caracteres (sin contar cadenas y patrones)
Ejemplos:
True
True
fuente