Al escribir un mensaje con imanes de nevera, a menudo te encontrarás sustituyendo a 1
por un I
. En este desafío, su objetivo es averiguar si un mensaje puede escribirse usando las letras de otro mensaje. Las sustituciones permitidas son:
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
Por ejemplo, el mensaje CIRCA 333
se puede reorganizar para deletrear ICE CREAM
, donde los primeros dos 3
s se giran 180 grados para formar dos E
, y el último 3
se gira 90 grados en sentido antihorario para formar un M
. Se pueden incluir espacios en blanco en los mensajes, pero no se deben tener en cuenta en su solución, ya que se hacen colocando los imanes en el refrigerador.
Entrada
Dos cadenas (o matrices de caracteres). Todos los mensajes coincidirán^[A-Z0-9 ]+$
Salida
Verdad si las dos cadenas de entrada son reorganizaciones válidas entre sí, de lo contrario falsey
Ejemplos
["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
Más ejemplos veraces
Estas son todas las palabras de más de 15 letras que se asignan a otra palabra. Algunas son sustituciones triviales, pero incluí todo lo que encontré.
["ANTHROPOMORPHISE","ANTHROPOMORPHISM"]
["ANTIPHILOSOPHIES","ANTIPHILOSOPHISM"]
["CIRCUMSTANTIALLY","ULTRAMASCULINITY"]
["DECENTRALIZATION","DENEUTRALIZATION"]
["DIMETHYLNITROSAMINE","THREEDIMENSIONALITY"]
["INSTITUTIONALISE","INSTITUTIONALISM"]
["INTERCRYSTALLINE","INTERCRYSTALLIZE"]
["INTERNATIONALISE","INTERNATIONALISM"]
["OVERCENTRALIZATION","OVERNEUTRALIZATION"]
["OVERCENTRALIZING","OVERNEUTRALIZING"]
["PREMILLENNIALISE","PREMILLENNIALISM"]
["TRANSCENDENTALIZE","TRANSCENDENTALIZM"]
Como se trata de un desafío de código de golf, ¡la solución más corta gana! Aceptaré la solución más corta en 7 días desde la publicación. ¡Feliz golf!
Relacionado
EDITAR : cometió un error en las sustituciones, tenía G = 6
y, 6 = 9
como sustituciones separadas, las fusionó en una sola.
T
yL
no son intercambiables, no puedo añadirT = 7
. Lo mismo se aplicaN = Z = 2
, lo que implicaría esoN = Z = R = 2
. Sin embargo, el tipo de sustituciones que sugiera haría una versión más difícil de este desafío, que podría publicar en otro momento. Solo quería ver si este tipo de desafíos serían bien recibidos primero.false
.Respuestas:
Japt ,
38363330 bytesToma la entrada como una matriz de 2 cadenas.
Pruébalo o ejecuta todos los casos de prueba
3 bytes guardados gracias a ETHProductions
fuente
r¶
al final para guardar 3 bytes.Python 2 ,
145131130129125 bytesPruébalo en línea!
Alt:
Python 2 , 125 bytes
Pruébalo en línea!
fuente
Ruby ,
997271 bytesPruébalo en línea!
Toma una serie de cadenas, asume la entrada en mayúsculas como en todos los casos de prueba.
-1 byte golfizado por benj2240.
fuente
!
para guardar un byteJavaScript (ES6),
102100bytesToma datos como dos matrices de caracteres en la sintaxis de curry
(a)(b)
. Devuelve un booleano.Pruébalo en línea!
¿Cómo?
Usando la función auxiliar g () , para cada entrada s :
Los dígitos del 0 al 8 y las letras X , Y y Z no se modifican. Todo lo demás está traducido explícitamente.
Código:
Ordenamos los caracteres (que trae todos los espacios al principio), los unimos y eliminamos todos los espacios en blanco iniciales.
Código:
Finalmente, comparamos ambas salidas.
fuente
Retina 0.8.2 , 42 bytes
Pruébalo en línea! Toma información en líneas separadas, pero Link incluye casos de prueba y encabezado. Explicación:
Asigna todas las letras a un conjunto mínimo, eliminando los espacios.
Ordenar cada cadena en orden.
Compara los dos valores.
fuente
APL (Dyalog Unicode) , SBCS de 49 bytes
-1 gracias a ngn.
Función de prefijo tácito anónimo.
Pruébalo en línea!
⎕R
PCRE R eplace:'UMWZ '
estos cinco caracteres⎕D,
precedidos por los dígitos por,¨
separado (cada uno en una cadena en lugar de ser un solo carácter)con:
⊂⍬
nada'OIREASGLBGCEEN',
precedido por estos caracteres(
…)
Aplica la siguiente función tácita a eso:(
…)¨
Aplique la siguiente función tácita a cada uno:⊂
adjuntarlo (para tratarlo como un todo)⍋⌷¨
use cada uno de los índices que lo ordenarían para indexar en toda la cadena (ordena)≡/
son idénticos? (lit. reducción de partido)fuente
''
->⍬
Python 2 , 108 bytes
Pruébalo en línea!
Hay 23 clases de equivalencia de caracteres. Usando la cadena de 36 caracteres
'85930A4614012B3C4D5EF6378GH9AI2J3KL7'
, asignamos cada carácter a su clase de equivalencia (ignorando espacios), luego ordenamos la matriz resultante. Dos cadenas son equivalentes si las listas resultantes son iguales.fuente
Java 10,
262260258216208174 bytes-2 bytes gracias a @Arnauld .
-76 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")
parece funcionar ... aunque ni siquiera estoy seguro exactamente cómo. : p{2}
puede ser.
por otros -2 bytes. Tampoco estoy 100% seguro de cómo funciona. Sé que(?<= ... )
se usa para dividir, pero sigue delimitador final por elemento . Pero estoy un poco confundido por qué(?=\\G..)
(seguir delimitador principal) no funciona en ese sentido. Y tampoco sé realmente cómo actúa el\\G..
vs..
en la división aquí. Veré si puedo resolverlo en alguna parte, porque no tengo curiosidad. ; p Gracias de cualquier manera por los bytes guardados. Es necesario recordar\\G
cuando se divide en bloques de tamaño par. :)(?<=\\G..)
una división, he hecho una pregunta de StackoverFlow que arroja algo de luz. Básicamente es un comportamiento indefinido que funciona de manera diferente en casi todos los idiomas. Aunque\G
es de longitud cero, en Java con el aspecto positivo dentro de la división, entra en conflicto con ambas reglas causando el comportamiento que vemos aquí. Todavía es un poco vago para mí personalmente, pero al menos ahorró 4 bytes en esta respuesta. ;)R , 123 bytes
Pruébalo en línea!
utf8ToInt
convierte una cadena en un vector de puntos de código Unicode.eso, pero eso no ayuda aquí porque en realidad estoy tratando con números enteros y no lógicos.!sd(a-b)
es un byte más corto queall(a==b)
fuente
!any
en lugar de!sd
como los elementos podrían ser todos iguales, pero para 1. Pruebe:f(list("BCDEF","ABCDE"))
J , 56 bytes
Pruébalo en línea!
Explicación:
&
para los argumentos izquierdo y derecho-.&' '
elimina espacios de la entrada,rplc
reemplaza'0123456789UMWZ';"0'OIREASGLBGCEEN'"1
los caracteres en la entrada por sustitución de los caracteres en la columna de la izquierda con los de la derecha: (aquí transpuesta para ahorrar espacio)/:~@
y ordena las cadenas resultantes-:
son iguales las cuerdas ordenadas?Mi solución inicial:
J ,
7773 bytesPruébalo en línea!
Explicación:
(' '-.~])
elimina espacios de ambos argumentos ye."1
prueba cada personaje para pertenecer a la siguiente tabla:[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1
la referencia:1#.
suma las tablas de comparación para cada argumento-:&
¿se complementan?fuente
Perl 6 , 55 bytes
Pruébalo en línea!
Funciona con un número arbitrario de cadenas.
fuente
Python 2 , 111 bytes
Pruébalo en línea!
116 bytes
Pruébalo en línea!
fuente
Python 3 , 105 bytes
Pruébalo en línea!
fuente
Jalea ,
3934 bytesPruébalo en línea!
fuente
05AB1E ,
3833 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea esta sugerencia mía 05AB1E (secciones ¿Cómo comprimir cadenas que no forman parte del diccionario? Y ¿Cómo comprimir enteros grandes? ) Para comprender por qué
.•2Θ`ĆĀÑεÉ•
es"abemwgilorsuz"
y•B/óÕ¦•
es48333917025
.fuente