Dadas duas seqüências, encontre a tabela de conversão ( cifra de substituição ) entre as duas, se a tradução não for possível, a saída será falsa. A resposta deve ser minimizada e criada da esquerda para a direita. O primeiro caractere a ser traduzido entre as palavras deve ser o primeiro na tabela de tradução. Além disso, qualquer letra que não seja traduzida (no mesmo local em que foi originalmente) NÃO deve estar na tabela de tradução.
Provavelmente, mais facilmente definido através de exemplos:
Casos válidos
"bat", "sap" => ["bt","sp"]
Observe a ordem, uma saída de ["tb","ps"]
não é válida para este desafio.
"sense", "12n12" => ["se","12"]
Observe como o n
não é traduzido porque é uma relação de 1 para 1.
"rabid", "snail" => ["rabd","snal"]
Observe como o i
não é traduzido porque é uma relação de 1 para 1.
"ass", "all" => ["s","l"]
A não está incluído, permanece o mesmo, s
pode ser mapeado l
devido à correspondência de padrões.
"3121212", "ABLBLBL" => ["312","ABL"]
Corresponde perfeitamente ao padrão.
Falsy Cases
"banana", "angular" => false
(não é do mesmo tamanho, impossível).
"animal", "snails" => false
(cada caractere só pode ser usado UMA VEZ em cada lado da tradução).
"can","cnn" => false
(n é implicitamente usado na tradução, portanto, definir uma tabela de tradução com n-> a seria inválido)
Assim, [aimal,sails]
é uma resposta inválida, tornando essa falsidade.
"a1", "22" => false
Veja "advertências", isso é listado como falso. Nesse caso, é porque a
e 1
não é possível mapear os dois 2
. (Cada caractere só pode ser usado UMA VEZ em cada lado da tradução).
Esta resposta parece ser uma boa referência: /codegolf//a/116807/59376
Se você tiver dúvidas sobre a funcionalidade de dois pares de palavras não listados, adie para esta implementação.
Regras de E / S
- A entrada pode ser como uma matriz de 2 elementos ou como 2 entradas separadas.
- A saída pode ser delimitada por uma matriz ou nova linha / espaço, semelhante à forma como eu a mostrei.
- A saída falsa pode ser 0, -1 ou falsa. Erro / Saída vazia também está bem.
- Você está garantido de que
a
não será igualb
ea
nemb
estará vazio. a
eb
são seqüências de letras somente para impressão ASCII.
Ressalvas
- As traduções devem ocorrer da esquerda para a direita, veja o exemplo 1.
- Você não deve gerar caracteres que permaneçam iguais.
- Seu programa pode ter apenas duas seqüências de caracteres
a
eb
. - Cada caractere só pode ser usado UMA VEZ em cada lado da tradução. Isto é o que faz a tradução do
snails
queanimals
impossível. - Substituições recursivas não devem ocorrer. Exemplo de substituição recursiva:
"a1","22"->[a1,12]
onde a é substituído primeiro por 1, os 1s resultantes são substituídos por 2. Isso não está correto, suponha que todas as traduções ocorram independentemente uma da outra, o que significa que isso é falso. Significado: "a1" com tabela de tradução de [a1,12] é avaliado como 12 (não 22)
fonte
Respostas:
JavaScript (ES6), 128 bytes
fonte
ass
eall
deve sers,l
.JavaScript (ES6),
108107105106 bytesEditar : corrigido para suportar entradas como essas
"22" / "a1"
que devem ser falsas.Retorna uma
0
ou uma matriz de duas cadeias.Formatado e comentado
Casos de teste
Mostrar snippet de código
fonte
f('22')('a1')
deve ser falso também.PHP> = 7.1, 130 bytes
18 bytes salvos por @Titus
Casos de teste
Expandido
PHP> = 7.1, 148 bytes
imprime 0 para false Output true como string
Casos de teste
Expandido
PHP> = 7.1, 131 bytes
A segunda resposta pode ser reduzida para isso se matrizes associativas forem permitidas
imprime 0 para false Output true como array associativo em vez de string
Casos de teste
PHP> = 7.1, 227 bytes
imprime 0 para falso
Casos de teste
Expandido
fonte
array_values()
dentrojoin()
é completamente inútil e pode ser descartado.a1 22 => false
caso de teste. Além disso, seu primeiro programa parece não funcionar no testador online.($p=$x[$i])==$o?:$k[$c[$p]=$o]=$p;
no loop e$y==strtr($x,$c)
no primeiro teste.Gelatina , 18 bytes
Link monádico sem nome (função de uma entrada) obtendo uma lista, que retorna:
uma lista vazia nos casos de falsey; ou
uma lista contendo duas listas de caracteres nos casos reais.
Experimente online! (o rodapé divide a lista com um espaço para evitar a impressão de uma representação distorcida)
... ou consulte uma suíte de testes .
Quão?
fonte
Retina ,
194191185229225241 bytesExperimente online!
Leva entrada
;
separada. A saída também é;
separada. Entradas falsas são significadas por saídas vazias.Eu sei que isso é dolorosamente detalhado, ainda estou tentando reduzir bytes. A maioria desses bytes é para excluir entradas falsas.
Editar% s
Acontece que eu tinha uma falha significativa no meu programa. Está corrigido agora, mas ao custo de mais de 40 bytes.
Outro erro foi encontrado onde meu programa não declarou a entrada como
a1;22
falsa, mas eu consegui manter o programa abaixo de 250 bytes depois de corrigi-loExplicação
(uma explicação mais detalhada estará disponível em breve)
Primeiro temos de verificar se os comprimentos das cordas
a
eb
são os mesmos ou não. Caso contrário, excluímos tudo.Duplica a entrada para preservá-la enquanto fazemos alguns testes de comprimento.
Agora, em um loop, excluímos o primeiro caractere de
a
e o primeiro caractere deb
até que uma das strings fique vazia.Agora, existem possibilidades para o "espaço padrão".
;;abc
Ambas as cordas têm o mesmo comprimentodef;;abc
a
é maior queb
;def;abc
b
é maior quea
Agora temos que esvaziar a entrada se as seqüências não tiverem o mesmo comprimento (cenários 2 e 3). É isso que essa substituição abaixo faz. Ele remove o texto que corresponde aos cenários 2 e 3.
Isso remove caracteres que não são transliterados em strings
a
eb
.abc;1b2
=>ac;12
Depois disso, temos que remover caracteres duplicados.
sese;1212
=>se;12
, mas isso preserva entradas comoaba;123
Por fim, excluímos a entrada se houver caracteres duplicados mapeados para caracteres diferentes como
aba;123
oua1;22
.E, finalmente, remova caracteres duplicados.
fonte
(?(1)(?!))
que aprendi com a sua resposta :);
.Geléia ,
2826 bytesExperimente online!
fonte
Ruby, 133 bytes
Experimente online!
Mais facilmente:
Para começar, aqui está uma versão de 84 bytes no Goruby, que é Ruby, mas com uma bandeira de golfe definida ao compilar o intérprete. Entre outras coisas, permite abreviar as chamadas de método para o menor identificador exclusivo.
fonte
Python 2 ,
198,193,189,182,179,175,169,165 bytesExperimente online!
-4 bytes! obrigado a mbomb007 por sugerir o uso de tab em vez de espaço.
modificou o formato de entrada, novamente graças ao mbomb007.
fonte
Python 3,6,
211185181178 bytesSai com um erro para resultados falsos.
Isso requer Python 3.6, que você pode executar em um shell aqui .
Você pode testá-lo sem a ordem de saída correta no TIO aqui . (O TIO não possui 3.6).
Ungolfed:
Se apenas a ordem não importasse ...
fonte
a1,12
retornar ema1,12
vez deFalse
? Sob a seção Advertências, diz-se que "a1" com tabela de conversão de [a1,12] é avaliado como 12 .False
.1a 21
também estaria errado, pois o oeder deve ser preservado.a1,12
vez dea1,22
.Röda ,
108119 bytesExperimente online!
Essa é uma função que pega duas listas de caracteres do fluxo e envia duas listas ao fluxo.
Isso poderia ser classificador se eu tivesse permissão para retornar pares.
Explicação (desatualizada):
Aqui está uma solução de sublinhado que não contém variáveis (114 bytes):
Isso é um monte de sublinhados.
fonte
<>
faz?a() <> b()
é o mesmo queinterleave([a()], [b()])
(ou apenasinterleave(a, b)
, sea
eb
são matrizes).a1 22 => false
caso de teste. "todas as traduções ocorrem independentemente uma da outra, o que significa que isso é falso."AWK, 140 bytes
Uso: Coloque o código
FILE
então:As cadeias de entrada precisam ser separadas por espaço em branco.
A saída está vazia se falharem ou 2 cadeias separadas por um espaço.
fonte
k, 28 bytes
Explicação:
fonte
APL (Dyalog) com AGL , 22 bytes
Experimente online!
{
...}
função anônima:E se…
⍺⍵
os argumentos⍳⍨¨
quando auto-indexado (ou seja, as primeiras ocorrências de seus elementos em si)≡/
são equivalentes:
então:⍺(
...)⍵
Aplique a seguinte função tácita aos argumentos:,¨
concatenar elementos correspondentes (erros em comprimentos incompatíveis)é
filtrar por (é
é apenas a função primitiva/
)≠
onde as cordas são diferentes∪
exclusivo (remover duplicados)↓⍉↑
transpor lista de pares para par de listas (lit. misturar em tabela, transpor tabela, dividir em listas)mais, não faça nada
fonte
↓⍉↑
ainda me deixa um pouco confuso.CJam, 38 bytes
Entrada e saída são matrizes na pilha.
fonte
PHP (> = 7.1), 165 bytes
imprime
0
por outro conjunto associativo falso. Executar-r
ou testá-lo online .demolir
fonte
Output can be as an array or ...
, então eu diria que sim. A versão atual do PHP está implícita em todas as minhas postagens; mas se eu encontrar algo importante para editar, adicionarei a versão.array_unique($r)!=$r
for em todos os casosarray_unique($r)<$r
, votarei sua postagem sozinha para esse truque. No momento estou à procura de uma explicaçãoarray_unique($t)<$t
(teve que mudar isso porquecan
tocnn
é inválido) funciona, porque a comparação de array (diferente da comparação de string) compara comprimentos antes de qualquer outra coisa.can
paracnn
me custar 17 Bytes Esqueça a minha sugestão