Escreva um programa que leia a partir de stdin dois números inteiros, cada nova linha terminada, a seguir denominada "number" e "radix" e:
- Imprime qualquer mensagem fixa que quiser, se o número é um palíndromo em que radix (por exemplo
true
,t
,1
) - Imprime qualquer mensagem fixa diferente você quiser se o número não é um palíndromo em que radix (por exemplo
false
,f
,0
, etc.) - Essas mensagens devem ser as mesmas a cada corrida, mas não há regras sobre o que devem ser (o que é melhor para o golfe).
- Você pode assumir que a entrada é válida, dois números inteiros positivos. "number" não excederá
2147483647
, "radix" não excederá32767
. - Você não pode usar recursos externos, mas pode usar qualquer função matemática incluída por padrão no seu idioma.
Nota: uma raiz é apenas a base do número.
Amostras de execuções:
16
10
false
16
3
true
16
20
true
121
10
true
5
5
false
12346
12345
true
16781313
64
true
16781313
16
true
code-golf
decision-problem
base-conversion
palindrome
durron597
fonte
fonte
Respostas:
Recurso duplo J (23 caracteres) e K (19)
As duas línguas são muito semelhantes, tanto em geral como neste golfe específico. Aqui está o J:
,~1
- Anexe o número 1 a si mesmo, criando a matriz1 1
.1!:1
- Leia em duas seqüências de caracteres do teclado (1!:1
é para ler e1
é o identificador / número do arquivo para entrada do teclado).".
- Converta cada string em um número.#.^:_1~/
-F~/ x,y
significa encontrary F x
. NossoF
é#.^:_1
, que realiza a expansão da base.(-:|.)
- O argumento corresponde (-:
) ao seu reverso (|.
)?1
para sim,0
para não.E aqui está o K:
0::'``
- Leia (0::
) uma string para cada ('
) linha do console (`
é o identificador de arquivo para isso)..:'
- Converter (.:
) cada'
sequência ( ) em um número._vs/|
- Inverta o par de números, para que a raiz fique na frente do número e insira (/
) a função de expansão base_vs
("vetor do escalar") entre eles.a~|a:
- Atribua essa expansão resultante aa
e verifique sea
corresponde (~
) ao seu reverso (|
). Novamente,1
para sim,0
para não.fonte
GolfScript, 10 caracteres
Isso é fácil para o GolfScript, se o fizermos da maneira direta. A saída é
0
/1
para false / true.fonte
APL (20)
Saídas
0
ou1
, por exemplo:Explicação:
⎕{
...}⎕
: leia dois números, passe-os para a função.⍵
é o primeiro número e⍺
é o segundo número.⌊1+⍺⍟⍵
:floor(1+⍺ log ⍵)
, número de dígitos necessários para representar⍵
na base⍺
.⍺/⍨
: a base para cada dígito,⍺
replicada pelo número que acabamos de calcular.⍵⊤⍨
: representa⍵
na base fornecida (usando números, portanto, funciona para todos os valores de⍺
).≡∘⌽⍨
: veja se o resultado é igual ao seu reverso.fonte
Perl,
82777369 bytesOs números de entrada são esperados como linhas de entrada do STDIN e o resultado é escrito como
1
ou0
, o primeiro significa que o primeiro número é um palíndromo em sua representação da base fornecida.Editar 1: Usar
$=
salva alguns bytes, devido à sua conversão interna em int.Edit 2: O operador smartmatch
~~
compara os elementos da matriz diretamente, portanto, a conversão para uma string não é necessária.Edit 3: Otimização removendo uma variável desnecessária.
65 bytes : se a sequência vazia for permitida como saída
false
, os últimos quatro bytes poderão ser removidos.Versão ungolfed
O algoritmo armazena os dígitos do número convertido em uma matriz
@a
. Em seguida, a representação de string dessa matriz é comparada com a matriz na ordem inversa. Espaços separa os dígitos.fonte
$=
deixá-lo whipeint
passo ... E estande questão paraanything you want
então nada poderia ser o que você quer ;-)$=
também é fornecido como dica nesta resposta à pergunta "Dicas para jogar golfe no Perl" . Retornar0
custa 6 bytes extras, mas fiquei com a impressão de que uma mensagem fixa não deve estar vazia.silence
Javascript 87
n
argumento é o número,b
argumento é a raiz.fonte
Sálvia, 45
Executa no prompt interativo
Imprime
True
quando é um palíndromo, imprime deFalse
outra formafonte
Perl
54 5662Para ser testado:
darei:
Portanto, essa saída é
1
paratrue
quando um palíndromo é encontrado e nada mais.Ungolfing:
Nota :
$_
é o buffer de linha atual e está vazio no início.$=
é uma variável reservada , originalmente usada para impressão em linha, este é um contador de linha. Portanto, essa variável é um número inteiro , qualquer cálculo sobre isso resultaria em um número inteiro truncado como seint()
fosse usado.$-
foi usado para se divertir, só para não usar letras tradicionais ... (um pouco mais ofuscação) ...fonte
Mathematica
7743IntegerDigits[n,b]
representa n como uma lista de dígitos na base b. Cada dígito da base-b é expresso decimalmente.Por exemplo, 16781313 não é um palíndromo na base 17:
No entanto, é um palíndromo na base 16:
Se os pares ordenados nos exemplos acima foram inseridos,
retornaria
fonte
Integer
Haskell (80 caracteres)
Ligue com
pali $number $radix
. Verdadeiro, quando número é um palíndromo, Falso, se não.fonte
Ruby - 76 caracteres
fonte
Perl 6 , 27 bytes (22 sem stdin / out)
Experimente online!
Perl6, rei dos golfe legíveis (giros?) (E também alguns não tão legíveis).
Função Perl 6 (não stdin / stdout), 22 bytes
Experimente online!
fonte
base
na minha resposta é quebase
só suporta até base 36, e a pergunta pede para apoio radixes até32767
dg - 97 bytes
Experimentando dg :
Explicado:
fonte
C,
140132fonte
puts(m)
funcionaria certo?printf("%d",m);
terá 8 caracteres a menos.Haskell - 59
Poucas alterações na resposta de Max Ried.
fonte
Pitão , 4 bytes
Experimente aqui ou confira uma suíte de testes (leva de 10 a 15 segundos).
fonte
dc, 39 bytes
O comprimento é um palíndromo, é claro (
33₁₂
).O número e a raiz devem estar no topo da pilha (na base numérica atual); número deve ser pelo menos 0 e raiz deve ser pelo menos 2. Saída é
t
se for um palíndromo ef
se não for. Como não está especificado no desafio, presumi que os números nunca tenham zeros à esquerda (portanto, qualquer número terminado em0
não pode ser um palíndromo).Explicação
Como um programa completo:
fonte
LaTeX, 165 bytes
Exemplo em desmos.com
k
, o radical, é uma entrada ajustávelSe
f(x)=0
,x
é um palíndromo na basek
.fonte
Perl 6 , 34 bytes
-4 bytes graças a PhilH
Experimente online!
fonte
05AB1E ,
43 bytesExperimente online ou verifique todos os casos de teste .
Explicação:
fonte
C (gcc) , 79 bytes
Experimente online!
Atropelar
Com base no fato de que para um palíndromo, o reverso do número deve ser igual ao próprio número.
Suponha que você tenha o número de três dígitos ABC em alguma base. Multiplicá-lo pela base sempre resultará em ABC0 e dividi-lo pela base em AB com C como restante. Portanto, para reverter o número, selecionamos o dígito mais à direita do número original e o inserimos à direita no número invertido. Para abrir espaço para esse dígito, multiplicamos o reverso pela base com antecedência.
Basicamente:
fonte