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
TrueoFalse, 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 +
-plbandera.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 +
-plbanderas, 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,$2y$3son 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
XYXYZgenerar/(.)(?!\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
Falsesi 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
1yTrue(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
++$plugar 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.$argva$ay$b; -6 bytes confor(;a&$v=$argv[1][$i++];); -1 byte con nombres de variables más largos ( ¡en efecto!: Use en$vvlugar de$v, en$iilugar de$i, en$rrlugar de$r, en$yylugar de$yy puede usar en$$vvlugar 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!ssiempre 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:
TrueTruefuente