Escreva um programa curto para o algoritmo 196 . O algoritmo inicia a partir de um número inteiro e adiciona seu reverso até que um palíndromo seja atingido.
por exemplo
input = 5280
5280 + 0825 = 6105
6105 + 5016 = 11121
11121 + 12111 = 23232
output = 23232
Entrada
um número inteiro, que não é um número lyrchrel (ou seja, acaba produzindo um palíndromo sob esse algoritmo, em vez de continuar infinitamente)
Saída
o palíndromo chegou.
code-golf
palindrome
Eelvex
fonte
fonte
Respostas:
APL (22 caracteres)
Isso funciona no Dyalog APL. Aqui está uma explicação, da direita para a esquerda:
{ ... }⍞
: Obtenha a entrada do usuário como caracteres (⍞
) e alimente-a em nossa função ({ ... }
).⋄
separa as instruções, então as olhamos da esquerda para a direita):a≡⌽a←⍕(⍎⍵)+⍎⌽⍵ : a
: Avalie (⍎
) o argumento correto (⍵
) reverse (⌽
) e adicione-o à versão avaliada do próprio argumento correto. Em seguida, formate o resultado (⍕
; ou seja, forneça sua representação de caractere), atribua (←
) isso à variávela
e finalmente teste sea
o inverso é equivalente aa
(ou seja, éa
um palíndromo?). Se verdadeiro, retornea
; de outra forma...∇a
: Retroalimentaa
nossa função (∇
é auto-referência implícita).Exemplo:
fonte
{⍵=A←⍎⌽⍕⍵:⍵⋄∇A+⍵}⎕
. Você salva os aparelhos, um reverso e um eval.GolfScript, 29 caracteres
Comentário selecionado
A carne do programa é o
do
laço, é claro. Então, eu vou cobrir isso..`
copia o número e o estrita..-1%
copia essa versão da string e a reverte..@
copia a versão invertida e traz a versão não invertida original para a frente.Assim, por exemplo, o número é 5280. Nesta fase, a pilha é:
5280 "0825" "0825" "5280"
. O cenário está pronto para a comparação. (Após a comparação, a pilha será deixada,5280 "0825"
independentemente do que --- os itens a serem comparados foram removidos.);
) e retorne 0 (para finalizar odo
loop).~
) a string invertida (para torná-la um número), adicione (+
) isso ao número original e retorne 1 (para continuar odo
loop).fonte
Python 2, 55 bytes
Seguindo a sugestão do JPvdMerwe:
Python 2, 62:
fonte
n
como um int você pode encurtar por 6 caracteres, para verificar o código: meta.codegolf.stackexchange.com/q/75/62Ruby - 56 caracteres
fonte
Apenas exercitando minhas habilidades de Pyth, não um candidato sério.
Pitão, 16 bytes
Equivalente ao Python 3:
fonte
J 25
2731fonte
CJam,
2221 bytesO CJam foi criado depois que essa pergunta foi feita, portanto, tecnicamente, é um envio inválido. Mas achei a pergunta interessante, então aqui vai:
Explicação:
A lógica principal é que, em cada iteração while-do, verifique primeiro se o palíndromo foi atingido ou não. Caso contrário, adicione o inverso ao número. Praticamente qual é o algoritmo!
Experimente online aqui
fonte
Este é um candidato real, já que J existe há décadas.
J (16 bytes)
Este é um verbo, portanto pode ser atribuído a uma variável em uma sessão J e usado da seguinte forma:
Como funciona:
fonte
Python: 66
fonte
Perl, 40 caracteres
fonte
Scala 82
fonte
JAGL Alpha 1.2 - 19, 21 com stdin
Não contendo , apenas obtendo alguma experiência com meu idioma
Espera um número de stdin
Explicação
fonte
05AB1E , 7 bytes (não concorrente)
Não concorrente , uma vez que o idioma adia o desafio.
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online! .
fonte
hello
. A bifurcação manterá a sequência original e empurra a sequência invertida. É a abreviação de duplicado e reverso .Braquilog , 8 bytes
Experimente online!
Um pouco semelhante a um dos primeiros programas Brachylog que eu vi e fiquei intrigado com, no vídeo de introdução do Brachylog .
fonte
PHP -
5448 caracteresTeste:
fonte
$str =
coisa do gato para o futuro golfe. Parreira muito melhor do que usarSTDIN
e ainda melhor do que$argv[0]
.Festança (64)
Ligue com: bash <nome do arquivo> <número>
fonte
C # -
10399 caracteresC # nunca se sai muito bem no golfe. Elegante, mas detalhado.
fonte
Em Q (39 caracteres)
Uso da amostra:
Editar:
Até 34 agora, o mesmo uso:
fonte
fonte
Geléia , 9 bytes (não competindo)
Uma resposta muito simples, apenas para o desafio de codificação e linguagem esotérica.
ṚḌ+µŒḂ¬$¿
Experimente online!
Se esta resposta não estiver clara ou errada em qualquer nível, fique à vontade para apontá-la.
Agradeço ao Dennis por me ajudar com este primeiro pequeno pedaço de código.
fonte
Python. 85 caracteres:
Se você não deseja saída em cada iteração:
(menos um caractere)
fonte
Windows PowerShell (63)
Eu ainda odeio que não haja uma maneira fácil de reverter uma string.
fonte
long
também para o qual é o maior tipo integral suportado pelo PowerShell, mas ainda assim, desperdiço dois caracteres.Haskell
8987 charsVersão um pouco legível:
A versão para golfe foi criada inserindo manualmente e renomeando as funções restantes para nomes de caracteres únicos.
fonte
until
do Prelude, além de extrair o padrão de aplicação de um operador binário emx
er x
. Além disso, use emreadLn
vez degetLine
eread
. O resultado salva 20 caracteres:f%x=f x$read.reverse.show$x;main=readLn>>=print.until((==)%)((+)%)
r=(=<<read.reverse.show)
e use apenasr(==)`until`r(+)
. Além dessa economia, ele não precisa ser um programa completo, um envio válido pode ser apenas a função sem nome de antes. Isso reduz a 41 bytes: Experimente online!befunge, 57 bytes
embora o código esteja em uma grade 4x19, pode chamá-lo de 76.
fonte
C ++ TMP (256 caracteres)
Esta versão pode ser um pouco reduzida, mas é difícil deixar uma resposta de 256 caracteres. Aqui está uma versão sem golfe:
fonte
Pyke, 13 bytes (não-competitivo)
Experimente aqui!
fonte
Adicionar ++ , 57 bytes
Experimente online!
Como funciona
fonte
Powershell,
6362 bytes-1 byte graças a @AdmBorkBork
Script de teste:
fonte
;
meioparam($m)
efor
.GNU dc, 46 bytes
Requer GNU dc, versão mínima 1.4 (para
R
comando).Entrada e saída estão no topo da pilha, como de costume. É preciso uma quantidade surpreendente de código para inverter dígitos em dc (a menos que esteja faltando alguma coisa, o que está longe de ser impossível). Ele possui o intervalo numérico para se comportar bem com entradas como essas (que excederão a aritmética não assinada de 32 bits, por exemplo):
Explicação
fonte
R
comando. Boa solução, no entanto!R
era novo. Ansioso para ver o seu método!R ,
193109105 bytes-84 bytes graças a Giuseppe! -4 byes graças a JayCe!
Experimente online!
fonte
strsplit(x,"")
é menor questrsplit(x,NULL)
eel(L)
menor queL[[1]]
.as.double
é mais curto queas.numeric
estrtoi
é mais curto que ambos; em vez de configurar,t
use-o diretamente em suaif
declaração. Além disso, essa é uma função recursiva, se não me engano, por isso você deve colocarf=
como parte do seu envio.utf8ToInt
converter em dígitos eintToUtf8
converter novamente. Isso economiza muito em bytes!while
laço-
no lugar deU
. Eu também substituídorev
com!
mas não guardar qualquer byte ...