Ao escrever uma mensagem com imãs de geladeira, você geralmente substitui um 1
por um I
. Neste desafio, seu objetivo é descobrir se uma mensagem pode ser escrita usando as letras de outra mensagem. As substituições permitidas são:
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 exemplo, a mensagem CIRCA 333
pode ser reorganizada para soletrar ICE CREAM
, onde os dois primeiros 3
s são girados 180 graus para formar dois E
seo último 3
é girado 90 graus no sentido anti-horário para gerar um M
. Espaços em branco podem ser incluídos nas mensagens, mas não devem ser considerados na sua solução, pois são feitos colocando os ímãs na geladeira.
Entrada
Duas cadeias (ou matrizes de caracteres). Todas as mensagens corresponderão^[A-Z0-9 ]+$
Saída
Na verdade, se as duas seqüências de entrada são rearranjos válidos um do outro, falsey o contrário.
Exemplos
["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
Mais exemplos profundos
Estas são todas as palavras com mais de 15 letras que mapeiam para outra palavra. Algumas são substituições triviais, mas incluí tudo o que encontrei.
["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 este é um desafio de código de golfe, a solução mais curta vence! Aceitarei a solução mais curta em 7 dias após a postagem. Feliz golfe!
Relacionado
EDIT : Cometeu um erro nas substituições, teve G = 6
e 6 = 9
como substituições separadas, fundiu-os em um.
T
eL
não são permutáveis, não posso adicionarT = 7
. O mesmo vale paraN = Z = 2
, o que implicaria issoN = Z = R = 2
. No entanto, o tipo de substituição que você sugere tornaria uma versão mais difícil desse desafio, que eu poderia publicar posteriormente. Eu só queria ver se esse tipo de desafio seria bem recebido primeiro.false
.Respostas:
Japt ,
38363330 bytesRecebe a entrada como uma matriz de 2 strings.
Experimente ou execute todos os casos de teste
3 bytes salvos graças ao ETHProductions
fonte
r¶
no final para salvar 3 bytes.Python 2 ,
145131130129125 bytesExperimente online!
Alt:
Python 2 , 125 bytes
Experimente online!
fonte
Ruby ,
997271 bytesExperimente online!
Pega uma matriz de seqüências de caracteres, assume entrada em maiúsculas como em todos os casos de teste.
-1 byte jogado por benj2240.
fonte
!
para salvar um byteJavaScript (ES6),
102100 bytesRecebe entrada como duas matrizes de caracteres na sintaxe de currying
(a)(b)
. Retorna um booleano.Experimente online!
Quão?
Usando a função auxiliar g () , para cada entrada s :
Os dígitos 0 a 8 e as letras X , Y e Z permanecem inalterados. Tudo o resto é explicitamente traduzido.
Código:
Classificamos os caracteres (que trazem todos os espaços no início), juntamos a eles e removemos todos os espaços em branco à esquerda.
Código:
Finalmente, comparamos as duas saídas.
fonte
Retina 0.8.2 , 42 bytes
Experimente online! Recebe entrada em linhas separadas, mas o Link inclui casos de teste e cabeçalho. Explicação:
Mapeie todas as letras para um conjunto mínimo, excluindo os espaços.
Classifique cada sequência em ordem.
Compare os dois valores.
fonte
APL (Dyalog Unicode) , 49 bytes SBCS
-1 graças a ngn.
Função de prefixo tácito anônimo.
Experimente online!
⎕R
PCRE R moran Jr.:'UMWZ '
esses cinco caracteres⎕D,
precedidos das dígitos,¨
separadamente (fazer cada um em uma corda ao invés de ser um único caractere)com:
⊂⍬
nada'OIREASGLBGCEEN',
precedido por esses personagens(
…)
Aplique a seguinte função tácita a isso:(
…)¨
Aplique a seguinte função tácita a cada um:⊂
coloque-o (para tratá-lo como um todo)⍋⌷¨
use cada um dos índices que a classificariam para indexar em toda a sequência (classificações)≡/
eles são idênticos? (lit. redução de correspondência)fonte
''
->⍬
Python 2 , 108 bytes
Experimente online!
Existem 23 classes de equivalência de caracteres. Usando a cadeia de 36 caracteres
'85930A4614012B3C4D5EF6378GH9AI2J3KL7'
, mapeamos cada caractere para sua classe de equivalência (ignorando espaços) e, em seguida, classificamos a matriz resultante. Duas cadeias são equivalentes se as listas resultantes forem iguais.fonte
Java 10,
262260258216208174 bytes-2 bytes graças a @Arnauld .
-76 bytes graças a @ OlivierGrégoire .
Experimente online.
Explicação:
fonte
"A4B8CUEMEWE3G6G9I1L7NZO0R2S5".split("(?<=\\G.{2})")
parece funcionar ... embora eu nem saiba exatamente como. : p{2}
pode ser.
por outro -2 bytes. Também não tenho 100% de certeza de como isso funciona. Eu sei que(?<= ... )
é usado para dividir, mas continuo delimitador por item . Mas estou um pouco confuso por que(?=\\G..)
(continuar liderando delimitador) não funciona nesse sentido. E também não sei realmente como o\\G..
vs..
atua na divisão aqui. Vou ver se consigo descobrir em algum lugar, porque não estou curioso. ; p Agradecemos de qualquer maneira pelos bytes salvos. É necessário lembrar\\G
ao dividir em blocos de tamanho uniforme. :)(?<=\\G..)
uma divisão, eu fiz uma pergunta sobre StackoverFlow que esclareceu algumas coisas. Basicamente, é um comportamento indefinido que funciona de maneira diferente em quase todos os idiomas. Embora\G
seja de comprimento zero, em Java, com uma visão positiva por trás da divisão, meio que conflita as duas regras, causando o comportamento que vemos aqui. Ainda é um pouco vago para mim pessoalmente, mas pelo menos salvou 4 bytes nesta resposta. ;)R , 123 bytes
Experimente online!
utf8ToInt
converte uma string em um vetor de pontos de código Unicode.mas isso não ajuda aqui, porque na verdade estou lidando com números inteiros e não lógicos.!sd(a-b)
é um byte menor que,all(a==b)
fonte
!any
no lugar de!sd
como os elementos podem ser todos iguais, mas a 1. Tente:f(list("BCDEF","ABCDE"))
J , 56 bytes
Experimente online!
Explicação:
&
para argumentos à esquerda e à direita-.&' '
remove espaços da entrada,rplc
substitui'0123456789UMWZ';"0'OIREASGLBGCEEN'"1
os caracteres na entrada substituindo os caracteres na coluna da esquerda pelos caracteres da direita: (aqui transpostos para economizar espaço)/:~@
e classifica as seqüências resultantes-:
as seqüências ordenadas são iguais?Minha solução inicial:
J ,
7773 bytesExperimente online!
Explicação:
(' '-.~])
remove espaços dos argumentos ee."1
testa cada caractere quanto à associação na tabela a seguir:[:(,a.,.@-.,)'EMW3','G69',9 2$'A4B8CUI1L7NZO0R2S5'"1
A referência:1#.
adiciona as tabelas de comparação para cada argumento-:&
eles combinam?fonte
Perl 6 , 55 bytes
Experimente online!
Funciona com um número arbitrário de seqüências de caracteres.
fonte
Python 2 , 111 bytes
Experimente online!
116 bytes
Experimente online!
fonte
Python 3 , 105 bytes
Experimente online!
fonte
Geléia ,
3934 bytesExperimente online!
fonte
05AB1E ,
3833 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
Veja esta dica 05AB1E (seções Como compactar cadeias de caracteres que não fazem parte do dicionário? E Como compactar números inteiros grandes? ) Para entender por que
.•2Θ`ĆĀÑεÉ•
é"abemwgilorsuz"
e•B/óÕ¦•
é48333917025
.fonte