Desafio
Inspirado por este vídeo
Como você deve saber, um palíndromo é uma palavra que está escrita da mesma forma para a frente e para trás. A palavra "PULP" não é um palíndromo, mas quando traduzida para o Código Morse (com o espaçamento entre as letras removidas), "PULP" se torna ". - ...-.-...--." que é um palíndromo. Sua tarefa é escrever um programa ou função que use uma string e retorne se essa palavra é um palíndromo no Código Morse Internacional.
A: .-
B: -...
C: -.-.
D: -..
E: .
F: ..-.
G: --.
H: ....
I: ..
J: .---
K: -.-
L: .-..
M: --
N: -.
O: ---
P: .--.
Q: --.-
R: .-.
S: ...
T: -
U: ..-
V: ...-
W: .--
X: -..-
Y: -.--
Z: --..
Regras
Entrada
A entrada pode ser obtida em qualquer formato razoável. A sequência de entrada conterá apenas letras nos casos que você preferir. A sequência não conterá espaços, números ou pontuação.
Resultado
Seu programa deve gerar 1 de 2 resultados distintos constantes com base no fato de a entrada ser um palíndromo, por exemplo, Verdadeiro / Falso, 1/0, HOTDOG / NOTHOTDOG
Pontuação
Este é o código-golfe, pelo que a resposta mais curta em bytes vence. As brechas padrão são proibidas.
Casos de teste
Entrada => Saída
"PULP" => True
"RESEARCHER" => True
"HOTDOGS" => True
"" => True
"A" => False
"RACECAR" => False
"PROGRAMMING"=> False
"PUZZLES" => False
fonte
Respostas:
Gelatina , 28 bytes
Experimente online!
Eu escrevi esta resposta olhando para uma delas (leia as linhas da direita para a esquerda e você receberá minha sequência mágica!):
fonte
73,540,211,105,102,870,315,464,559,332nd
... o que?! Como você encontrou esse número? Além disso, como isso não leva uma eternidade para ser executado?00ABCDEFGHIJKLMNOPQRSTUVWXYZ
. A Jelly possui built-ins para converter uma permutação em um número e esse número de volta na permutação. Veja a base numérica fatorial na Wikipedia.00ABCDEFGHIJKLMNOPQRSTUVWXYZ
Geléia ,
35 32 2725 bytes-2 graças a Dennis (mude a permutação para evitar
%32
)Recebe entrada em maiúsculas; a saída é
1
verdadeira,0
falsa.Experimente online! Ou veja a suíte de testes .
Quão?
Solução anterior de 35 bytes (também recebe entrada em maiúsculas) ...
fonte
Dyalog APL , 24 bytes
Experimente online!
dfns
nunca deixa de surpreenderfonte
MBASIC , 325 bytes
Primeira tentativa, antes que as grandes armas cheguem aqui :-)
Resultado
fonte
JavaScript (Node.js) , 111 bytes
Experimente online!
fonte
Perl 6 , 87 bytes
Experimente online!
Converte a palavra em uma série de 1s e 0s e verifica se é palindrômica.
Explicação:
fonte
Python 3 ,
172148104 bytesPrimeiro código de golfe de todos os tempos. Por favor, seja gentil e ofereça qualquer ajuda :)
Isso é baseado na resposta do C #: /codegolf//a/175126/83877 . Tomei as mesmas idéias e apliquei-as no Python 3. Tentei o melhor possível para jogar o código, mas tenho certeza de que há muito mais que posso fazer.
EDIÇÃO 1: Obrigado @ Stephen e @ Cowabunghole por me ajudarem a remover alguns espaços em branco e códigos desnecessários.
EDIT 2: Obrigado @JoKing pela sugestão de fazê-lo em binário. Esse é um truque muito legal, onde '-' e '.' nem são necessários. Isso levou a uma enorme diminuição de bytes.
Solução
Experimente online!
fonte
while i > 0:
parawhile i>0:
salvar 2 bytes. Além disso, eu posso estar errado, mas acho que você pode acabar com> 0
tudo e apenas usá-lowhile i:
. Segundo, a instrução no loop while pode seguir a mesma linha do while, salvando a nova linha e o recuo. Por último, este é um péssimo conselho em todos os lugares, exceto no código de golfe, mas se você usar o Python 2 em vez do Python 3, poderá economizar 1 byte ao/
invés de//
divisão.~-i
vez dei-1
. Esse é o mesmo número de bytes, mas você pode omitir os parênteses que economizam 2 bytes.-
e.
. 105 bytesPyth,
3533 bytesO código contém caracteres não imprimíveis, então aqui está um hexdump.
Experimente online. Suíte de teste.
Explicação
A partir
."
do final do código, gera o alfabeto Morse, com pontos como\x08
e traços como\x07
, e separados por tabulações.c
divide a string pelas guias.XzG
converte (X
) a entrada (z
) do alfabeto (G
) para este "alfabeto Morse".s
soma (une) os símbolos de Morse. Para entradas vazias, retorna 0, mas isso não é um problema._I
verifica se o resultado não muda (I
) quando invertido (_
). Para entrada vazia, verifica se 0 não muda quando negado.fonte
Retina 0.8.2 , 87 bytes
Experimente online! O link inclui casos de teste. Explicação:
Todos os códigos Morse das letras deste conjunto terminam com
.
.Todos os códigos Morse das letras deste conjunto terminam com
-
.Substitua cada letra pela letra cujo código Morse é o prefixo dessa letra (aqui
E
eT
são simplesmente excluídos através do escape_
sem escape , mas normalmente eles seriam transformados em espaços). Por exemplo,P
é o código Morse paraW
um extra.
no final; nós adicionamos o que foi dito.
acima, agora tudo o que resta é decodificar o arquivoW
.Repita as etapas acima até que não haja mais letras.
Se o primeiro e o último caracteres forem iguais, exclua os dois.
Repita o procedimento para quantos caracteres corresponderem.
Se este era um palíndromo, resta no máximo um caractere.
fonte
Wolfram Language (Mathematica) , 107 bytes
Experimente online!
Semelhante a esta resposta Jelly: pensamos em código Morse como binário, e escrever uma corda
" ETIANMSURWDKGOHVF L PJBXCYZQ"
onde a posição de um personagem, em binário, dá-nos o seu código Morse. Mas com um 1 extra acrescentado porque queremos distinguirS = 000
eH = 0000
, por exemplo. Então, ao##2&@@@
mesmo tempo, elimina esse principal 1 e nivela.fonte
05AB1E , 37 bytes
Experimente online!
Codifica o alfabeto na base 3, convertido na base 255:
Base 255:
Então, basicamente, eu o divido nos 0s, construo a string pela posição e verifico o palíndromo.
fonte
C # (.NET Core) , 191 bytes
Experimente online!
Parte desta resposta foi adaptada do código de morse de Nick Larsen . Com base nos comentários da resposta, isso pode ser potencialmente mais prejudicado.
Ungolfed:
fonte
PowerShell ,
204187 bytesExperimente online!
Erros na cadeia nula ... Alguém pode ajudar com isso?
Código de teste (depois de agrupar o código em um bloco de scripts e atribuído à variável $ Z ...):
Resultado:
fonte