Dans ce défi, vous recevez une chaîne en entrée contenant une chaîne de X, Y et Z par exemple. "XYZZ". X, Y et Z représentent un caractère particulier. Ce modèle est ensuite comparé à une deuxième entrée de chaîne. Si le modèle existe en tant que sous-chaîne dans la deuxième entrée, retournez True
, sinon, retournez False
. Une fois qu'un motif est trouvé dans le mot, le programme arrête la recherche et revient True
.
Exemples
Motif: "XXYY"
succeed ---> True (pattern found: ccee)
success ---> False (pattern not matched)
balloon ---> True (pattern found: lloo)
Motif: "XYXYZ"
bananas ---> True (pattern found: nanas)
banana ---> False (pattern not found)
- Remarque: Ce n'est pas l'entrée réelle. Ceci est un exemple de la façon dont le programme devrait fonctionner. Votre programme doit afficher
True
ouFalse
, ou d'autres valeurs Truthy / Falsy.
Autres informations importantes / utiles
- Le motif n'a pas besoin de contenir un X, Y et un Z, il peut contenir des X et des Y ou même (bien que quelque peu inutile) que des X.
- Le modèle ne peut pas être vide, mais il ne sera pas utilisé comme cas de test.
- La chaîne de recherche ne sera pas vide et sera en minuscules.
- L'ordre alphabétique de X, Y et Z dans le motif n'a pas d'importance.
- X, Y et Z doivent être des caractères uniques.
- Vous pouvez utiliser n'importe quelle bibliothèque de votre choix.
- Le score est déterminé par la taille du code , en octets. Le score le plus bas l'emporte.
Bonne chance!
Réponses:
Perl 5 , 85 octets
Enregistré 40 octets grâce à la suggestion de Peter Taylor! (voir mon ancienne version ci-dessous pour voir les différences)
83 octets de code +
-pl
indicateur.Essayez-le en ligne!
XYXYZ est transformé en
((?!\1).)((?!\1)(?!\2).)\1\2((?!\1)(?!\2)(?!\3).)
(oui, certains des tests ne peuvent pas être vrais, mais c'est plus court de cette façon), et la deuxième entrée est ensuite vérifiée par rapport à cette expression régulière. (voir les explications de mon ancienne version pour avoir plus d'intuition sur son fonctionnement)Mon ancienne version:
Merci à Arnauld d'avoir signalé une erreur que j'ai faite dans ma première version.
113 octets de code +
-pl
drapeaux, et-Mre=eval
.Essayez-le en ligne!
Sur l'exemple XYXYZ: le premier regex convertira le modèle en (.) (.) \ 1 \ 2 (.), Et ajoutera à la fin un test pour vérifier si
$1
,$2
et$3
sont différents: si c'est le cas,$\
est réglé sur un. Ensuite, la deuxième entrée est testée par rapport à cette expression régulière et$\
est implicitement imprimée à la fin.Le regex généré pour XYXYZ est
(.)(.)\1\2(.)(?{++$c;$\=1if!grep{$v{$c}{${$_}}++}1..3})^
.(Je vais ajouter un peu plus de détails aux explications quand j'aurai un moment)
la source
(.)((?!\1).)\1\2((?!\1)(?!\2).)
?Gelée , 9 octets
Renvoie le nombre de fois où le motif a été trouvé, non nul étant vrai et zéro étant faux.
Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6), 94 octets
Fonctionne en transformant le motif en expression rationnelle, par exemple car
XYXYZ
il génère/(.)(?!\1)(.)\1\2(?!\2)(?!\1)(.)/
.Je remarque une distinction intéressante entre PCRE et regexp JavaScript: dans PCRE,
\<n>
échoue (et(?!\<n>)
réussit donc ) avant que le groupe de capture ne soit défini, tandis que JavaScript correspond avec succès à la chaîne vide (et(?!\<n>)
échoue donc ).la source
Python 2 , 70 octets
Essayez-le en ligne!
Vérifie si une chaîne correspond à un modèle en utilisant la méthode de cette réponse . Utilise un préfixe de la chaîne de recherche dont la longueur est égale au modèle. Coupe le premier caractère de la chaîne jusqu'à ce qu'une correspondance soit trouvée, ou
False
si elle devient vide73 octets:
Essayez-le en ligne
Vérifie si une chaîne correspond à un modèle en utilisant la méthode de cette réponse . Vérifie récursivement toutes les sous-chaînes en se ramifiant en supprimant le premier ou le dernier caractère jusqu'à ce que la chaîne soit vide.
la source
Python 3 , 100 octets
Essayez-le en ligne!
la source
05AB1E ,
1916 octetsEssayez-le en ligne!
Renvoie 1 si vrai, nul sinon faux.
Cela peut être de 14 octets si le retour des valeurs possibles de XYZ est autorisé:
05AB1E , 14 octets
Essayez-le en ligne 2!
la source
1
etTrue
(ce qui est généralement un inconvénient pour ces types de défis), mais si la spécification de défi peut être interprétée comme nous permettant de définir la véracité / la fausseté pour le défi la deuxième version fonctionne comme vous le dites.Java 7,
177176173 octetsExplication:
Code de test:
Essayez-le ici.
Sortie:
la source
PHP, 89 octets
Un cadeau de @Christoph et @Titus
PHP, 105 octets
Un cadeau de @Christoph
PHP, 167 octets
la source
++$p
au lieu de($p+1)
, bien que je ne l'ai pas testé.[,$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);
(Notez que vous devez conserver vos anciens scores en utilisant<strike>
)!
. Cela vaut plus que les points que j'ai pu atteindre avec votre belle solution.$argv
vers$a
et$b
; -6 octets avecfor(;a&$v=$argv[1][$i++];)
; -1 octet avec des noms de variables plus longs (en effet!: Utilisez$vv
au lieu de$v
,$ii
au lieu de$i
,$rr
au lieu de$r
,$yy
au lieu de$y
et vous pouvez utiliser à la$$vv
place de$x[$v]
)C #,
184165155 octetsmerci aloisdg!
solution de retour en arrière, en prime, elle fonctionne avec un motif avec des caractères!
la source
var s=l==n.Length;
? Vous ne l'utilisez qu'àreturn s?!s:
(où!s
est toujoursfalse
), donc il peut être changé enreturn l==n.Length?0>1:
. En outre, ce qui est le suivant:(n[i]!=n[j]||n[i]!=n[j])
. Vous vérifiezn[i]!=n[j]
deux fois .. Ce sera toujourstrue or true
/false or false
..: Sint l = p.Length,i = 0, j;
i++
et votrej--
intérieur de la boucle for. par exemple:for(j=i;j>=0;)if(p[i]==p[j]==(n[i]!=n[j--]))
Rubis,
6361 octetsAu lieu de rechercher un modèle d'expression régulière, essayez simplement de remplacer «X», «Y» et «Z» de toutes les manières possibles, et trouvez une correspondance littérale.
(En fait, le même concept que la réponse 05AB1E de carusocomputing)
la source
JavaScript (ES6),
92898786 octetsPrend entrée
p
(modèle) ets
(chaîne) dans la syntaxe de curry(p)(s)
. Renvoie0
/1
.Formaté et commenté
Cas de test
la source
Mathematica 18 caractères (sans compter la chaîne et le motif)
Exemples:
True
True
la source