Um palíndromo é uma cadeia que é soletrada da mesma maneira para trás e para frente. Por exemplo, 'Eva, posso esfaquear morcegos em uma caverna?' é um palíndromo (EVACANISTAB | BATSINACAVE)
Para esse código de golfe, usando o idioma de sua escolha, determine se uma determinada sequência é um palíndromo ou não.
Casos de borda:
- A pontuação não é contada na palindrominess.
- Os caracteres de controle não são contados na palindrominess.
- Espaço em branco não é contado para palindrominess.
- Os números são contados para palindrominess.
- Caso neste desafio não é contado para palindrominess.
- Não há limite para o tamanho das strings a serem avaliadas, exceto o imposto pelo seu idioma de escolha.
- Para esse desafio, limite-se ao conjunto de caracteres ASCII.
Requerimentos técnicos:
- Somente corpos de métodos são necessários; coisas adicionais, como assinaturas de método, declarações de estrutura de dados, etc. não contam para o requisito de vitória.
- O código deve compilar ou interpretar sem erros ou exceções em tempo de compilação.
- O código não deve gerar exceções não tratadas ou travar. (Quase desnecessário dizer. Quase.)
- O código deve retornar algum valor indicando palindrominess. O tipo de dados depende do idioma que você usa (por exemplo, um usuário C # pode usar a
bool
, enquanto um usuário JavaScript pode usar avar
.) - Você não pode escrever seu próprio intérprete que executa essa tarefa como um recurso 'nativo' para poder 'jogar golfe' com uma pontuação quase vencedora. (Esperamos que seja desnecessário dizer.)
Condição da vitória:
- O código mais curto em caracteres vence.
Líder atual: tmartin (k, 25 caracteres)
... Deseja a marca de seleção verde mágica por sua resposta? Bata a resposta desse cara!
code-golf
palindrome
decision-problem
Andrew Gray
fonte
fonte
Respostas:
K, 25
.
fonte
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, onde 1 é verdadeiro e 2 é falsoPerl, 26 caracteres
Avalia como 1 quando
$_
é um palíndromo""
(um dos valores falsos de Perl) quando não é.Uso da amostra:
saída:
fonte
_
na cadeia, não é? E não requer nenhuma entrada, então você não precisará usar a-p
opção?\W
em regexes exclui sublinhado. Receio que você precise[^a-z\d]
do seu regex. Eu tenho medo de ser derrotado de qualquer maneira._|\W
vez de[_\W]
._|\W
para\Pl
: ideone.com/0ufdaQ . Devem ser apenas as letras Unicode.\Pl
não corresponderia a dígitos, então acho que_|\W
é o melhor que você poderia fazer.Somente C # 82 :)
Não resisti à tentação de escrever um programa sem clichês no meu idioma favorito.
Um teste está disponível aqui: http://ideone.com/8bwz7z
fonte
GolfScript,
36 34 3130 caracteresAlgoritmo semelhante ao da minha solução anterior (Javascript) .
0"0:A[a{"@{>^}+/
- Otimizado por Peter Taylor e Howard. Minha versão foi"/9@Z"{1$<},,2%\;
. Howard doou concatenação de funções e Peter Taylor doou XOR para o módulo-2. É basicamente um método genérico de comparar se o valor está em uma sequência de intervalos.{.96>32*-}%
(11 caracteres) não é realmente uma melhoria em relação ao Javascript.toUpperCase()
(14 caracteres), especialmente porque manipula algumas pontuações estranhas que se seguemz
na tabela ASCII (o que não importa aqui).como sugeriu Peter Taylor, no entanto, se filtrarmos os alfanuméricos primeiro, poderemos converter em letras minúsculas e dígitos apenas definindo um bit em cada caractere:
{32|}
.-1%=
faz todo o trabalho pesado palindrômico. Uma parte da qual não gosto muito é de quanto tempo levei para descobrir como reverter uma matriz. Eu deveria ter lido os documentos. Os outros dois caracteres realizam gerenciamento e comparação de pilhas.Teste: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVtheyJcez59KywsMiV9LHszMnx9JS4tMSU9
Além disso, se eu puder assumir que nenhum dos seguintes caracteres de controle está presente: (escape do link de dados, controle de dispositivo 1-4, reconhecimento negativo, ociosidade síncrona, fim do bloco de transmissão, cancelamento, fim do meio) (todos concordamos que estes são tudo bastante obscuro) ou se eu puder tratá-los como versões em maiúsculas dos dígitos de 0 a 9, podemos salvar outros dois caracteres:
GolfScript, 28 caracteres
Teste: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
fonte
{"0:A["\{>}+,,2%},
+
sobre blocos. Esse é um truque legal.a{
à lista de caracteres do filtro para incluir as letras minúsculas, mas pode usar maiúsculas apenas{32|}%
. O resultado final é{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
acontece com o trabalho.Javascript, 53 caracteres:
é uma expressão javascript avaliada como verdadeira se
x
for um palíndromo e falsa se não for. Assume quex
é uma string. Se isso não for garantido, adicione antesx+="",
Aqui está uma trilha de navegação: devido a como
reverse()
funciona,falha. Contudo,
está perfeitamente bem.
fonte
+""
lança para uma string,+
lança para um número|0
e~~
lança para um número inteiro,!!
lança para um booleano./[^\W_]/g
R: 66
Uso:
fonte
Bash:
524846 caracteresIsso leva a picada para verificar como primeiro parâmetro e define o código de saída como 0 para o palíndromo e 1 para não.
Exemplo de execução:
fonte
Python 2: 49 (sem contar a assinatura do método)
Um programa completo, com entrada e saída, pode ser escrito em 74 caracteres.
Exemplo de uso:
(
huge_palindrome.txt
contém este palíndromo de 17.826 palavras)Esta solução pode ser adaptada ao python 3, adicionando alguns caracteres:
Python 3: 55
fonte
sys.stdin.read
é basicamente o mesmo queraw_input
s
variável. Decidi fornecer a definição completa, mas, como de costume em 2013, não inclua a assinatura do método no comprimentoJAVA (ou a linguagem mais detalhada de todos os tempos),
1029695 caracteresUso (com código não protegido):
Encurtado com a ajuda do comentarista abaixo
fonte
if(s==null) return 1==0;
:? Ou o Java aplica curlies nasif
instruções?null
um bom hábito, mas não praticado no CodeGolf. Como posso dizer, ninguém mais fez isso nesta questão. Pule isso. 2) O espaço entre argumentos ajuda na legibilidade, mas não no golfe. Remova; 3) Em vez de explicitamente,toLowerCase()
a cadeia usaequalsIgnoreCase()
mais tarde, em vez deequals()
. Dessa forma, você precisa ajustar a expressão regular, mas ainda 1 caractere menor. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
para remover_
também => 95 caracteresMathematica
5453Um byte salvo graças ao CatsAreFluffy:
Para aqueles com versão 10.2 ou anterior:
Exemplo
fonte
PalindromeQ
é 1 byte menor que#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 caracteres
Uso:
fonte
k (
50 48 4538 caracteres)Suprime todos os erros, retornando um padrão de
0b
(false).Exemplo:
edit: raspou mais três caracteres, evitando a variável intermediária. H / T, CS. -7: Não há necessidade de suprimir erros.
fonte
Ruby:
4338 caracteresExemplo de execução:
fonte
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
métodos! Você continua me surpreendendo @ Howard com seus truques.tr
etr!
parece se comportar diferente quando eles não têm nada para transliterar: pastebin.com/4YThW2qN Isso faz com que op['757']
teste seja interrompido com “NoMethodError: método indefinido` upcase! ' para nil: NilClass ”.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(mal informado),100(citado), 81using namespace std;
.Usa
int
porque é mais curto quechar
ouauto
.fonte
Lua, 56
fonte
%W
houver algo como\W
em regex, também exclui caracteres como sublinhado. Isso não é desejado.%w
não inclui_
(%W
obviamente, inclui-lo, então)s=s:lower():gsub('%W','')return s:reverse()==s
46 caracteresfunction(s)
Python 3/2 59 caracteres:
fonte
Haskell, 43
Usando as bibliotecas padrão
Control.Monad
,Control.Monad.Instances
eData.Char
:fonte
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
nem faz isso com espaços adicionando ou tal, desculpe, eu não estou muito interessada com Haskell :)Control.Monad.Instances
também. (Eu estou usando o exemplo mônada Reader comap
, mas essa instância não é exportado porControl.Monad
.)Caracteres PHP 60.
Primeira tentativa no codegolf.
Exemplo:
fonte
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Caracteres Python 2 64:
fonte
77
versão de caracteres. Não faço ideia por que o abhiram postou a versão não-destruída.re.findall('[a-z0-9]+',input.lower())
caracteres da parte 3 mais curtos.Haskell 48
usado assim:
fonte
Smalltalk , Squeak / Pharo sabor
116 caracteres usando a formatação tradicional com guias
Você adiciona dois métodos ao String:
É claro que poderíamos eliminar alguns espaços ou usar nomes de métodos mais curtos, mas não vamos trair o espírito do Smalltalk.
Além disso, isso lidará com palíndromos franceses, como em http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais , poucas respostas nesta página podem.
fonte
Python 3 (51 caracteres)
e pode ser Python 2
com base na solução abhiram (com golfe mais agressivo)
pode ser reduzido para 46 caracteres, usando RE '\ w'
e variante com corpo de função extremamente reduzido (27 caracteres)
fonte
Windows PowerShell,
564745 caracteresAtualizado (consulte os comentários) e pode remover os colchetes ao redor da regex:
Original (56)
Original sem golfe:
fonte
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 bytes
Na verdade, esse código é realmente elegante e fácil de entender (quando formatado corretamente). Não acredito que seja possível diminuir o tempo em C ++ e ele não usa nenhuma função de biblioteca padrão.
Exemplo de uso:
Versão bem formatada:
fonte
error: ISO C++ forbids declaration of ‘p’ with no type
sua função deve ter um tipo de retorno.while(*++e);
vez dewhile(*e)++e;
. Mas, como Tito mencionou, esta resposta é inválida.PHP,
26 84 80 78 6263 bytesrecebe entrada do primeiro argumento da linha de comando; imprime
1
para cadeia de caracteres verdadeira e vazia para falsificação.I18n é um pouco expansivo, pois não há alternativa multibyte para
strrev
(110 bytes; execute com-r
):utf8_strrev flagrantemente roubado do manual do PHP . Você também pode dar uma olhada nesta postagem do blog .
fonte
-R
causaria problemas com quebras de linha na string para testar, não? Na especificação "-R <code> Execute o PHP <code> para cada linha de entrada". Além disso,<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
seria mais curto.$argn
sem-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Ruby, 48
Muito simples, e feito às pressas para não jogar muito golfe. Vou jogar mais tarde.
fonte
Pylongolf2 , 24 bytes
c
leva a entrada,╨2
para converter em minúsculas.Em seguida, empurro um regex para a pilha e o uso
-
para remover todos os caracteres não alfabéticos da entrada._
duplica a entrada.╨1
reverte e=
depois os compara.~
imprime a pilha no final que imprimetrue
oufalse
.fonte
PowerShell,
194190 bytesUma implementação recursiva para mostrar como um bloco de script do PowerShell sem nome pode se chamar.
ungolfed:
testes:
fonte
[^a-z0-9]
?05AB1E , 4 bytes (não concorrente)
Não concorrente , uma vez que o idioma pós o desafio. Código:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
Gelatina, 10 caracteres (não-concorrente)
Retorna 1 se verdadeiro, 0 se falso
Experimente Online!
fonte
fØBŒlŒḂ
:f
filtro para manterØB
o conjunto de [a-zA-Z0-9] eŒl
convertido para minúscula, entãoŒḂ
o teste se palindrome.