(Primeiro desafio, informe-me se houver algum problema.)
Um heterograma é uma palavra em que nenhuma letra do alfabeto ocorre mais de uma vez e um palíndromo é uma frase que é a mesma para trás e para a frente.
O desafio aqui é escrever um pedaço de código que considere uma palavra (apenas letras) como entrada e produza se é ou não um heterograma (verdade / falsidade). O problema é que o programa deve ser um palíndromo - lê o mesmo para trás e para a frente. A capitalização não importa aqui, portanto, para o heterograma ser válido, ele não pode ter q e Q, por exemplo. Nenhum comentário é permitido e você não pode colocar seqüências que contenham seu código (ou uma parte significativa do seu código) para tentar facilitar a parte do palíndromo: P
Isso é código-golfe, então o código mais curto vence. Boa sorte!
EDIT: Parens, colchetes ou outros símbolos que tenham formas esquerda e direita devem ser revertidos adequadamente para a parte do palíndromo. Então (helloolleh) é um palíndromo, mas (helloolleh (não é. Aparentemente, isso é chamado de palíndromo conveniente).
EDIT 2: Você não receberá nenhuma entrada vazia, entrada com várias palavras ou entrada com caracteres que não sejam letras. Então não se preocupe com isso :)
fonte
(hellolleh)
um palíndromo válido? Semelhante para[]
,{}
e<>
(quando apropriado).asdsa
consideradas iguaisasd\nsa
?Respostas:
Pitão - 11 bytes
(Espaços à direita e à esquerda necessários e contados).
Conjunto de Teste .
fonte
Pitão, 17 bytes
Experimente online aqui.
O espaço principal é necessário. Eu contei isso e o espaço à direita na contagem de bytes.
Aqui está o detalhamento:
fonte
.q
em seus comentários, mas um.w
em seu programa.Python 3, 125
O principal problema é tornar o inverso do código analisável. Em seguida, podemos deixar erros de identificadores indefinidos.
fonte
<
para um>
!Perl, 43 bytes
Exemplo de uso:
fonte
> <> ,
137131 BytesQuando vi esse desafio, pensei que> <> finalmente seria uma boa escolha de linguagem, pois, ao usá-lo, você pode ignorar palíndromos; é simples garantir que o ponteiro permaneça apenas onde deveria. Embora isso seja verdade,> <> infelizmente torna as condições do golfe excruciantes (ou apenas o golfe em geral). Espero usar alguns truques estranhos que pensei em compensar isso, mas aqui está uma resposta "rápida" (na verdade não, tanto em termos de programa quanto de criação). Você pode experimentá-lo online aqui .
Retorna 1 para true e -1 para false (eu poderia alterá-lo para 0, mas o comprimento permaneceria o mesmo, infelizmente)
Como sempre, deixe-me saber se isso não funciona e se você tem alguma idéia de como jogar golfe. Eu testei em alguns casos de teste, mas sempre poderia haver uma exceção.
Aqui está outra versão, que eu acho que é um pouco mais inteligente, mas, infelizmente, são dez bytes a mais. Os valores de Truthy / Falsey neste momento são 1 e um erro (
something smells fishy...
):Explicação:
Aqui está o código sem a parte adicionada para torná-lo um palíndromo. Este não usa os truques "mais inteligentes" que tentei usar para a versão alternativa, por isso é um pouco mais fácil de explicar (se alguém estiver interessado em uma explicação para os "truques", ficaria feliz em dar um , Apesar).
Linha 1:
Aqui está como a troca complicada (
:{:@=?v$
) funciona - usarei um caso de teste dessa pilha:[5,1,8,1]
onde o último caractere é o topo.:{
A parte superior da pilha é duplicada:[5,1,8,1,1]
e a pilha deslocada para a esquerda:[1,8,1,1,5]
:@
A parte superior é duplicada:; em[1,8,1,1,5,5]
seguida, os três principais valores são deslocados para a direita:[1,8,1,5,1,5]
=?v
Desnecessário para esta parte da explicação$
O valor superior é trocado mais uma vez[1,8,1,5]
, o que, se você notar, é a pilha original deslocada mais uma vez (como se{
tivesse sido o único comando).Então, o que isso faz em inglês ("Graças a Deus, ele está realmente explicando as coisas") é verificar a pilha inteira em relação ao valor superior e passar para um ponto na segunda linha, se algum valor for igual ao topo. Essa verificação é feita proporcionalmente a quantos valores existem na pilha (
l - 1
, ondel
está o comprimento da pilha), para que todos os valores sejam verificados um contra o outro.Linha 2:
fonte
><>
é um palíndromo em si (mas não conveniente)PHP, 126 bytes
Você precisa executar isso com a
short_tags
diretiva ini desativada na 5.4 ou superior.Primeiro golfe de todos os tempos. Duas cópias, a primeira imprime um monte de lixo com o resultado falso / verdadeiro:
Esta versão não imprime nenhum jargão (162 bytes):
Execute a partir da linha de comandos com
Provavelmente pode ser jogado um pouco mais longe
fonte
?><?
, você pode usar//\\
. Isso deve remover esse requisito. E em vez de__halt_compiler()
usoreturn;
return;
ainda é válido.05AB1E, 9 bytes
Experimente online.
* insira algo sobre voltar ao meu primeiro desafio *
Não competir desde 05AB1E foi feito após esse desafio.
Explicação
fonte
Brachylog , 3 bytes, desafio de pós-datas de idiomas
Experimente online!
Este é um dos poucos programas que funciona no Brachylog 1 e no Brachylog 2. O link do TIO é para o Brachylog 1 pelos velhos tempos. Também não usual para o Brachylog, este é um programa completo, não uma função. (Os programas completos no Brachylog emitem implicitamente booleanos, que é exatamente o que queremos para esta pergunta.)
O princípio geral aqui é que colocar um predicado entre um par de letras maiúsculas idênticas é uma afirmação de que o valor atual é invariável nesse predicado. Então você costuma ver coisas como
AoA
"é classificado" ("invariante sob classificação");A↔A
significaria (em Brachylog 2) significaria "é um palíndromo" ("invariante sob reversão") e assim por diante. Este programa é "invariável ao remover duplicatas", ou seja, "não contém duplicatas". É realmente conveniente que esse método de especificar invariância seja um palíndromo.fonte
Braquilog , 3 bytes
Experimente online!
O predicado será bem-sucedido se a entrada for um heterograma e falhará se não for.
fonte
MATL , 7 bytes
Experimente online!
Retorna a lista [1, 1] se a entrada for um heterograma e [0, 0] se não.
Explicação:
fonte