Lorsque vous écrivez un message avec des aimants pour réfrigérateur, vous vous retrouverez souvent à remplacer un 1
par un I
. Dans ce défi, votre objectif est de savoir si un message peut être écrit en utilisant les lettres d'un autre message. Les substitutions autorisées sont:
A = 4
B = 8
C = U
E = M = W = 3
G = 6 = 9
I = 1
L = 7
N = Z
O = 0
R = 2
S = 5
Par exemple, le message CIRCA 333
peut être réorganisé pour épeler ICE CREAM
, où les deux premiers 3
s sont tournés de 180 degrés pour faire deux E
s, et le dernier 3
est tourné de 90 degrés dans le sens antihoraire pour faire un M
. Les espaces blancs peuvent être inclus dans les messages, mais ils ne doivent pas être pris en compte dans votre solution, car ils sont créés en plaçant les aimants sur le réfrigérateur.
Contribution
Deux chaînes (ou tableaux de caractères). Tous les messages correspondront^[A-Z0-9 ]+$
Sortie
Vrai si les deux chaînes d'entrée sont des réarrangements valides l'une de l'autre, sinon falsey.
Exemples
["CIRCA 333", "ICE CREAM"] => true
["DCLV 00133", "I LOVE CODE"] => true
["WE ARE EMISSARIES", "33 423 3315542135"] => true
["WE WANT ICE CREAM", "MET CIRCA 334 MEN"] => true
["I HAVE ICE CREAM", "HAVE 2 ICE CREAMS"] => false
Des exemples plus véridiques
Ce sont tous les mots de plus de 15 lettres qui correspondent à un autre mot. Certains sont des substitutions triviales, mais j'ai inclus tout ce que j'ai trouvé.
["ANTHROPOMORPHISE","ANTHROPOMORPHISM"]
["ANTIPHILOSOPHIES","ANTIPHILOSOPHISM"]
["CIRCUMSTANTIALLY","ULTRAMASCULINITY"]
["DECENTRALIZATION","DENEUTRALIZATION"]
["DIMETHYLNITROSAMINE","THREEDIMENSIONALITY"]
["INSTITUTIONALISE","INSTITUTIONALISM"]
["INTERCRYSTALLINE","INTERCRYSTALLIZE"]
["INTERNATIONALISE","INTERNATIONALISM"]
["OVERCENTRALIZATION","OVERNEUTRALIZATION"]
["OVERCENTRALIZING","OVERNEUTRALIZING"]
["PREMILLENNIALISE","PREMILLENNIALISM"]
["TRANSCENDENTALIZE","TRANSCENDENTALIZM"]
Comme il s'agit d'un défi de golf de code, la solution la plus courte l'emporte! J'accepterai la solution la plus courte dans les 7 jours suivant la publication. Bon golf!
Exemple de solution, sans golf
en relation
EDIT : fait une erreur dans les substitutions, avait G = 6
et en 6 = 9
tant que substitutions distinctes, les a fusionnées en une seule.
T
etL
ne sont pas échangeables, je ne peux pas ajouterT = 7
. Il en va de mêmeN = Z = 2
, ce qui impliquerait celaN = Z = R = 2
. Cependant, le type de substitutions que vous proposez rendrait la version plus difficile de ce défi, que je pourrais poster ultérieurement. Je voulais juste voir si ce genre de défis serait bien accueilli en premier.false
.Réponses:
Japt ,
38363330 octetsPrend l'entrée comme un tableau de 2 chaînes.
Essayez-le ou exécutez tous les cas de test
3 octets économisés grâce à ETHProductions
la source
r¶
à la fin pour économiser 3 octets.Python 2 ,
145131 131130129125 octetsEssayez-le en ligne!
Alt:
Python 2 , 125 octets
Essayez-le en ligne!
la source
Rubis ,
997271 octetsEssayez-le en ligne!
Prend un tableau de chaînes, suppose l'entrée en majuscules comme dans tous les cas de test.
-1 octet joué par benj2240.
la source
!
pour économiser un octetJavaScript (ES6),
102100 bytesPrend l'entrée comme deux tableaux de caractères dans la syntaxe de curry
(a)(b)
. Renvoie un booléen.Essayez-le en ligne!
Comment?
En utilisant la fonction d'assistance g () , pour chaque entrée s :
Les chiffres 0 à 8 et les lettres X , Y et Z restent inchangés. Tout le reste est explicitement traduit.
Code:
Nous trions les caractères (ce qui apporte tous les espaces au début), les joignons et supprimons tous les espaces de tête.
Code:
Enfin, nous comparons les deux sorties.
la source
Retina 0.8.2 , 42 octets
Essayez-le en ligne! Prend des données sur des lignes distinctes, mais Link inclut des cas de test et un en-tête. Explication:
Mappez toutes les lettres à un ensemble minimal, en supprimant les espaces.
Triez chaque chaîne dans l'ordre.
Comparez les deux valeurs.
la source
APL (Dyalog Unicode) , 49 octets SBCS
-1 grâce à ngn.
Fonction de préfixe tacite anonyme.
Essayez-le en ligne!
⎕R
PCRE R eplace:'UMWZ '
ces cinq caractères⎕D,
précédés des chiffres,¨
séparément (transformez chacun en une chaîne plutôt qu'en un seul caractère)avec:
⊂⍬
rien'OIREASGLBGCEEN',
précédé de ces caractères(
…)
Appliquer à cela la fonction tacite suivante:(
…)¨
Appliquer à chacun la fonction tacite suivante:⊂
l'enfermer (pour le traiter dans son ensemble)⍋⌷¨
utiliser chacun des indices qui le trierait pour indexer dans la chaîne entière (trie)≡/
sont-ils identiques? (réduction d'allumettes allumée)la source
''
->⍬
Python 2 , 108 octets
Essayez-le en ligne!
Il existe 23 classes d'équivalence de caractères. À l'aide de la chaîne de 36 caractères
'85930A4614012B3C4D5EF6378GH9AI2J3KL7'
, nous mappons chaque caractère à sa classe d'équivalence (en ignorant les espaces), puis trions le tableau résultant. Deux chaînes sont équivalentes si les listes résultantes sont égales.la source
Java 10,
262260258216208 208174 octets-2 octets grâce à @Arnauld .
-76 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
la source
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")
semble fonctionner ... même si je ne sais même pas exactement comment. : p{2}
peut être.
pour un autre -2 octets. Je ne sais pas non plus à 100% comment cela fonctionne. Je sais qu'il(?<= ... )
est utilisé pour diviser mais garder un délimiteur de fin par élément . Mais je suis un peu confus pourquoi(?=\\G..)
(garder le délimiteur principal) ne fonctionne pas à cet égard. Et aussi, je ne sais pas vraiment comment le\\G..
vs..
agit dans la division ici. Je vais voir si je peux le comprendre quelque part, car je ne suis pas curieux. ; p Merci dans les deux cas pour les octets enregistrés. Besoin de se rappeler\\G
lors de la division sur des blocs de taille égale. :)(?<=\\G..)
intérieur d'une scission, j'ai fait une question StackoverFlow qui jette un peu de lumière. Fondamentalement, c'est un comportement non défini qui fonctionne différemment dans presque toutes les langues. Bien qu'il\G
soit de longueur nulle, en Java avec le derrière positif à l'intérieur de la scission, il entre en conflit avec les deux règles provoquant le comportement que nous voyons ici. C'est encore un peu vague pour moi personnellement, mais au moins cela a sauvé 4 octets dans cette réponse. ;)R , 123 octets
Essayez-le en ligne!
utf8ToInt
convertit une chaîne en un vecteur de points de code Unicode.mais cela n'aide pas ici parce que je traite en fait des entiers et non des logiques.!sd(a-b)
est un octet plus court que cela,all(a==b)
la source
!any
à la place!sd
car les éléments peuvent être tous égaux, mais à 1. Essayez:f(list("BCDEF","ABCDE"))
J , 56 octets
Essayez-le en ligne!
Explication:
&
pour les arguments gauche et droit-.&' '
supprime les espaces de l'entrée,rplc
remplace'0123456789UMWZ';"0'OIREASGLBGCEEN'"1
les caractères en entrée par substitution des caractères de la colonne de gauche par ceux de la droite: (ici transposés pour gagner de la place)/:~@
et trie les chaînes résultantes-:
les chaînes triées sont-elles égales?Ma première solution:
J ,
7773 octetsEssayez-le en ligne!
Explication:
(' '-.~])
supprime les espaces des arguments ete."1
teste l'appartenance de chaque personnage à la table suivante:[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1
le référence:1#.
additionne les tableaux de comparaison pour chaque argument-:&
correspondent-ils?la source
Perl 6 , 55 octets
Essayez-le en ligne!
Fonctionne avec un nombre arbitraire de chaînes.
la source
Python 2 , 111 octets
Essayez-le en ligne!
116 octets
Essayez-le en ligne!
la source
Python 3 , 105 octets
Essayez-le en ligne!
la source
Gelée ,
3934 octetsEssayez-le en ligne!
la source
05AB1E ,
3833 octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E (sections Comment compresser des chaînes ne faisant pas partie du dictionnaire? Et Comment compresser de grands entiers? ) Pour comprendre pourquoi
.•2Θ`ĆĀÑεÉ•
est"abemwgilorsuz"
et•B/óÕ¦•
est48333917025
.la source