Houve algumas tentativas anteriores de fazer essa pergunta, mas nenhuma delas está em conformidade com os padrões modernos deste site. Por discussão sobre o Meta , estou reposicionando-o de uma maneira que permita uma concorrência justa de acordo com nossos modernos conjuntos de regras.
fundo
Um palíndromo é uma sequência que "lê o mesmo para a frente e para trás", ou seja, o reverso da sequência é o mesmo que a própria sequência. Não estamos falando de "palíndromos convenientes" aqui, mas de uma estrita inversão caractere a caractere; por exemplo, ()()
não é um palíndromo, mas ())(
é.
A tarefa
Escreva um programa ou função que use uma string S (ou o equivalente apropriado no seu idioma) como entrada e tenha uma saída Q (de um tipo de sua escolha). Você pode usar qualquer meio razoável para receber a entrada e fornecer a saída.
- Quando a entrada S é um palíndromo, a saída Q deve ter um valor A (que é o mesmo para qualquer palíndromo S ).
- Quando a entrada S não é um palíndromo, a saída Q deve ter um valor B (que é o mesmo para qualquer S não palíndrico ).
- A e B devem ser distintos um do outro.
Ou seja: mapeie todos os palíndromos para um valor e todos os não palíndromos para outro.
Além disso, o programa ou função que você escreve deve ser um palíndromo em si (ou seja, seu código-fonte deve ser palíndrico), tornando este um desafio de fonte restrita .
Esclarecimentos
- Embora
true
efalse
são escolhas óbvias para A e B , você pode usar quaisquer dois valores distintos para o seu "é um palíndromo" e "não é um palíndromo" saídas, que não precisa ser booleans. - Estamos definindo a reversão de cadeia no nível do caractere aqui;
éé
é palíndrico, independentemente de o programa estar codificado em UTF-8 ou Latin-1, mesmo que não seja uma sequência palindrômica de octetos após a codificação UTF-8. - No entanto, mesmo que seu programa contenha caracteres não ASCII, ele precisará trabalhar apenas para entrada ASCII. Especificamente, a entrada S conterá apenas caracteres ASCII imprimíveis (incluindo espaço, mas não incluindo nova linha). Entre outras coisas, isso significa que, se você tratar a entrada como uma sequência de bytes, e não como uma sequência de caracteres, seu programa provavelmente ainda estará em conformidade com a especificação (a menos que a codificação de E / S do seu idioma seja muito estranha). Como tal, a definição de um palíndromo no item anterior realmente importa apenas quando se verifica se o programa possui a forma correta.
- Ocultar metade do programa em um comentário ou literal de string, apesar de não ser criativo, é legal; você está sendo pontuado no comprimento, não na criatividade; portanto, sinta-se à vontade para usar métodos "chatos" para garantir que seu programa seja um palíndromo. É claro que, como você está sendo pontuado no comprimento, partes do seu programa que não fazem nada pioram sua pontuação; portanto, poder usar as duas partes do seu programa provavelmente será útil se você puder gerenciá-lo. .
- Como o critério de vitória é medido em bytes, você precisará especificar a codificação na qual seu programa foi gravado para poder pontuá-lo (embora em muitos casos seja óbvio qual codificação você está usando).
Critério de vitória
Mesmo que o programa precise ser um palíndromo no nível do personagem, estamos usando bytes para ver quem ganha. Especificamente, quanto mais curto for o seu programa, medido em bytes, melhor; este é um desafio do código-golfe . Para permitir a comparação de envios (especialmente envios no mesmo idioma), coloque uma contagem de bytes para o seu programa no cabeçalho do envio (mais uma contagem de caracteres, se for diferente do número de bytes).
(
por a
e )
com b
. É abab
um palíndromo? Não, teria que ser abba
. Então ()()
também não é um palíndromo; teria que ser ())(
.
()() is not a palindrome, but ())( is.
Parabéns, você chegou ao reddit!