Dans cette challence, votre tâche consiste à localiser des sous-chaînes avec une structure donnée.
Contribution
Votre entrée doit être deux chaînes alphanumériques non vides, un modèle p
et un texte t
. L'idée est que chaque caractère de p
représente une sous-chaîne non vide contiguë t
qui se produisent côte à côte et p
représente leur concaténation. Des caractères identiques correspondent à des sous-chaînes identiques; par exemple, le motif aa
représente tout carré non vide (une chaîne obtenue en concaténant une chaîne plus courte à lui-même). Ainsi, le motif aa
peut correspondre à la sous-chaîne byebye
, à chaque a
correspondance bye
.
Production
Si le texte t
contient une sous-chaîne qui p
correspond, alors votre sortie doit être cette sous-chaîne, avec des deux-points :
insérés entre les chaînes qui correspondent aux caractères de p
. Par exemple, si nous avons t = byebyenow
et p = aa
, alors bye:bye
est une sortie acceptable. Il peut y avoir plusieurs choix pour la sous-chaîne correspondante, mais vous ne devez en sortir qu'un seul.
Si t
ne contient pas de sous-chaîne correspondante, votre sortie sera un visage triste :(
.
Règles et clarifications
Différents caractères de p
peuvent correspondre à des sous-chaînes identiques, ils p = aba
peuvent donc correspondre à la chaîne AAA
. Notez que les caractères doivent correspondre à des chaînes non vides; en particulier, si elle p
est plus longue que t
, la sortie doit être :(
.
Vous pouvez écrire un programme complet ou une fonction, et vous pouvez également changer l'ordre des deux entrées. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
Donné dans le format pattern text -> output
. Notez que d'autres sorties acceptables peuvent exister.
a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c
la source
O(2^((n * (n + 1))/2))
: PRéponses:
Python, 207 octets
Appeler avec
g(pattern, string)
Utilise le
re
module pour effectuer la plupart du travail.la source
JavaScript (SpiderMonkey) (ES5.1), 198 octets
Depuis la sortie d'ES6 en juin 2015, je poste la version ES5.1 du code avec l'équivalent ES6, mais déclare la version ES5.1 comme réponse principale.
Match gourmand, donc le premier cas retourne "Non" au lieu de "N".
Essayez-le en ligne!
JavaScript (Node.js) (ES6), 141 octets
Essayez-le en ligne!
Prend les arguments de la syntaxe de curry:
f(a)(b)
Explication (et non golfée):
la source
Brachylog , 35 octets
Essayez-le en ligne!
Sur des entrées pas assez petites, très lentes. Je n'ai pas vraiment fait le sixième cas de test, mais pas par manque d'essais. (Probablement en raison du forçage brutal de chaque partition de chaque sous-chaîne, en commençant par la plus grande, puis en vérifiant si c'est une correspondance.) Prend l'entrée comme une liste
[pattern,string]
.Explication condensée et divisée:
sᵗ~cᵗX
X est le modèle associé à une partition d'une sous-chaîne de la chaîne d'entrée.
lᵛ
Le motif et la partition ont le même nombre d'éléments.
Xzdz≠ʰ
Il n'y a pas deux
pattern char, matched substring
paires uniques partageant un caractère de motif. En d'autres termes, aucun caractère de motif n'est mappé sur plusieurs sous-chaînes, bien que plusieurs caractères de motif puissent être mappés sur une sous-chaîne.Xt~ṇ{Ḷ∧":"|}ᵐ.∨":("
La sortie est constituée des éléments de la partition joints par des deux-points, sauf si quelque chose n'a pas pu être fait, auquel cas c'est à la
:(
place.Explication monolithique:
la source