Étant donné deux chaînes, recherchez la table de traduction ( chiffrement de substitution ) entre les deux, si la traduction n'est pas possible, affichez false. La réponse doit être minimisée et créée de gauche à droite. Le premier caractère à traduire entre les mots doit être le premier du tableau de traduction. En plus de cela, toute lettre qui n'est pas traduite (au même endroit qu'à l'origine), NE DOIT PAS être dans la table de traduction.
Probablement le plus facilement défini par des exemples:
Cas valides
"bat", "sap" => ["bt","sp"]
Notez la commande, une sortie de ["tb","ps"]
n'est pas valide pour ce défi.
"sense", "12n12" => ["se","12"]
Remarquez comment le n
n'est pas traduit car il s'agit d'une relation 1 à 1.
"rabid", "snail" => ["rabd","snal"]
Remarquez comment le i
n'est pas traduit car il s'agit d'une relation 1 à 1.
"ass", "all" => ["s","l"]
A n'est pas inclus, il reste le même, s
peut être mappé en l
raison de la correspondance de modèle.
"3121212", "ABLBLBL" => ["312","ABL"]
Correspond parfaitement au motif.
Cas de falsification
"banana", "angular" => false
(pas la même longueur, impossible).
"animal", "snails" => false
(chaque caractère ne peut être utilisé UNE FOIS de chaque côté de la traduction).
"can","cnn" => false
(n est implicitement utilisé dans la traduction, par conséquent, définir une table de traduction avec n-> a serait invalide)
Ainsi, [aimal,sails]
est une réponse invalide, ce qui rend cette fausse.
"a1", "22" => false
Voir "mises en garde", cela est répertorié comme falsifié. Dans ce cas, c'est parce que a
et 1
ne peuvent pas tous les deux correspondre à 2
. (Chaque caractère ne peut être utilisé UNE FOIS de chaque côté de la traduction).
Cette réponse semble être une bonne référence: /codegolf//a/116807/59376
Si vous avez des questions sur la fonctionnalité de deux paires de mots non répertoriés, reportez-vous à cette implémentation.
Règles d'E / S
- L'entrée peut être un tableau à 2 éléments ou 2 entrées distinctes.
- La sortie peut être un tableau ou une nouvelle ligne / délimitée par un espace, similaire à la façon dont je l'ai montré.
- La fausse sortie peut être 0, -1 ou fausse. Une sortie erronée / vide convient également.
- Vous êtes assuré que
a
ce ne sera pas égalb
et nia
nib
ne sera vide. a
etb
sont des séquences de lettres imprimables en ASCII uniquement.
Avertissements
- Les traductions doivent se produire de gauche à droite, voir l'exemple 1.
- Vous ne devez pas générer de caractères qui restent identiques.
- Votre programme ne peut prendre que deux chaînes
a
etb
. - Chaque caractère ne peut être utilisé UNE FOIS de chaque côté de la traduction. Ce qui fait la traduction
snails
d'animals
impossible. - Les remplacements récursifs ne devraient pas se produire. Exemple de remplacement récursif:
"a1","22"->[a1,12]
où a est d'abord remplacé par un 1, puis les deux 1 résultants sont remplacés par 2. Ce n'est pas correct, supposons que toutes les traductions se produisent indépendamment les unes des autres, ce qui signifie que c'est faux. Signification: "a1" avec table de traduction de [a1,12] est évalué à 12 (pas 22)
la source
Réponses:
JavaScript (ES6), 128 octets
la source
ass
etall
devrait l'êtres,l
.JavaScript (ES6),
108107105106 octetsModifier : corrigé pour prendre en charge des entrées telles que
"22" / "a1"
celles-ci devraient être fausses.Renvoie soit
0
un tableau de deux chaînes.Formaté et commenté
Cas de test
Afficher l'extrait de code
la source
f('22')('a1')
devrait aussi être faux.PHP> = 7,1, 130 octets
18 octets enregistrés par @Titus
Cas de test
Étendu
PHP> = 7.1, 148 octets
affiche 0 pour false Sortie vraie sous forme de chaîne
Cas de test
Étendu
PHP> = 7.1, 131 octets
La deuxième réponse peut être raccourcie si les tableaux associatifs sont autorisés
affiche 0 pour false Sortie true comme tableau associatif au lieu de chaîne
Cas de test
PHP> = 7.1, 227 octets
imprime 0 pour faux
Cas de test
Étendu
la source
array_values()
intérieurjoin()
est complètement inutile et peut être abandonné.a1 22 => false
cas de test. De plus, votre premier programme ne semble pas fonctionner dans le testeur en ligne.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
dans la boucle et$y==strtr($x,$c)
pour le premier test.Gelée , 18 octets
Lien monadique sans nom (fonction à une entrée) prenant une liste, qui renvoie:
une liste vide dans les cas de falsey; ou
une liste contenant deux listes de personnages dans les cas véridiques.
Essayez-le en ligne! (le pied de page divise la liste avec un espace pour éviter d'imprimer une représentation floue)
... ou consultez une suite de tests .
Comment?
la source
Rétine ,
194191 191185229225241 octetsEssayez-le en ligne!
Prend l'entrée
;
séparément. La sortie est également;
séparée. Les fausses entrées sont signifiées par des sorties vides.Je sais que c'est douloureusement verbeux, j'essaie toujours de réduire les octets. La plupart de ces octets servent à supprimer les fausses entrées.
Modifications
Il s'avère que j'avais un défaut important avec mon programme. Il est maintenant corrigé, mais au prix de plus de 40 octets.
Une autre erreur a été trouvée où mon programme n'a pas déclaré l'entrée
a1;22
fausse, mais j'ai pu garder le programme sous 250 octets après l'avoir corrigéExplication
(une explication plus détaillée sera disponible sous peu)
Nous devons d'abord vérifier si les longueurs de chaînes
a
etb
sont identiques ou non. Si ce n'est pas le cas, nous supprimons tout.Duplique l'entrée pour la conserver pendant que nous effectuons des tests de longueur.
Maintenant, dans une boucle, nous supprimons le premier caractère de
a
et le premier caractère deb
jusqu'à ce qu'une des chaînes devienne vide.Il y a maintenant des possibilités pour "l'espace modèle".
;;abc
Les deux chaînes sont de longueur égaledef;;abc
a
est plus long queb
;def;abc
b
est plus long quea
Maintenant, nous devons vider l'entrée si les chaînes ne sont pas de la même longueur (scénarios 2 et 3). C'est ce que fait cette substitution ci-dessous. Il supprime le texte correspondant aux scénarios 2 et 3.
Cela supprime les caractères qui ne sont pas translittérés dans les chaînes
a
etb
.abc;1b2
=>ac;12
Après cela, nous devons supprimer les caractères en double.
sese;1212
=>se;12
, mais cela préserve les entrées commeaba;123
Enfin, nous supprimons l'entrée s'il y a des caractères en double qui correspondent à différents caractères comme
aba;123
oua1;22
.Et enfin, supprimez les caractères en double.
la source
(?(1)(?!))
j'ai appris de votre réponse :);
.Gelée ,
2826 octetsEssayez-le en ligne!
la source
Rubis, 133 octets
Essayez-le en ligne!
Plus lisible:
Juste pour les coups de pied, voici une version de 84 octets dans Goruby, qui est Ruby, mais avec un indicateur de golf défini lors de la compilation de l'interpréteur. Entre autres, il vous permet d'abréger les appels de méthode en leur identifiant unique le plus court.
la source
Python 2 ,
198, 193, 189, 182, 179,175 ,169,165 octetsEssayez-le en ligne!
-4 octets! merci à mbomb007 pour avoir suggéré l'utilisation de tabulation au lieu d'espace.
modifié le format d'entrée, encore une fois grâce à mbomb007.
la source
Python 3.6,
211185181178 octetsQuitte avec une erreur pour les résultats de falsification.
Cela nécessite Python 3.6, que vous pouvez exécuter dans un shell ici .
Vous pouvez le tester sans le bon ordre de sortie sur TIO ici . (TIO n'a pas 3.6).
Non golfé:
Si seulement l'ordre n'avait pas d'importance ...
la source
a1,12
revenira1,12
au lieu deFalse
? Dans la section Mises en garde, il est dit que "a1" avec table de traduction de [a1,12] correspond à 12 .False
.1a 21
serait également une erreur, car il faut préserver l'oeder.a1,12
place dea1,22
.Roda ,
108119 octetsEssayez-le en ligne!
Il s'agit d'une fonction qui prend deux listes de caractères du flux et pousse deux listes vers le flux.
Cela pourrait être plus simple si je pouvais retourner des paires.
Explication (obsolète):
Voici une solution de soulignement qui ne contient aucune variable (114 octets):
Cela fait beaucoup de soulignements.
la source
<>
il?a() <> b()
est identique àinterleave([a()], [b()])
(ou justeinterleave(a, b)
, sia
etb
sont des tableaux).a1 22 => false
cas de test. "toutes les traductions se produisent indépendamment les unes des autres, ce qui signifie que c'est faux."AWK, 140 octets
Utilisation: placez le code dans
FILE
:Les chaînes d'entrée doivent être séparées par des espaces.
La sortie est vide en cas d'échec, ou 2 chaînes séparées par un espace.
la source
k, 28 octets
Explication:
la source
APL (Dyalog) avec AGL , 22 octets
Essayez-le en ligne!
{
…}
Fonction anonyme:Si…
⍺⍵
les arguments⍳⍨¨
lorsqu'ils sont auto-indexés (c'est-à-dire les premières occurrences de leurs éléments en eux-mêmes)≡/
sont équivalents:
ensuite:⍺(
…)⍵
Appliquez la fonction tacite suivante aux arguments:,¨
concaténer les éléments correspondants (erreurs sur les longueurs incompatibles)é
puis filtrer par (é
est juste la fonction primitive/
)≠
où les cordes sont différentes∪
unique (supprimer les doublons)↓⍉↑
transposer la liste de paires en paire de listes (littéralement mélanger dans une table, transposer une table, diviser en listes)sinon, ne fais rien
la source
↓⍉↑
m'a encore un peu confus.CJam, 38 octets
L'entrée et la sortie sont des tableaux sur la pile.
la source
PHP (> = 7.1), 165 octets
imprime
0
pour faux, tableau associatif autrement. Exécutez-le-r
ou testez-le en ligne .panne
la source
Output can be as an array or ...
, donc je dirais oui. La version PHP actuelle est implicite pour toutes mes publications; mais si je trouve quelque chose d'important à éditer, j'ajouterai la version.array_unique($r)!=$r
est dans tous les cas,array_unique($r)<$r
je voterai seul pour votre astuce. En ce moment je cherche une explicationarray_unique($t)<$t
(a dû changer cela carcan
tocnn
is invalid) fonctionne, car la comparaison de tableaux (contrairement à la comparaison de chaînes) compare les longueurs avant toute autre chose.can
àcnn
m'a coûté 17 Bytes Oubliez ma suggestion