Atenção: este NÃO é um desafio "ei, vamos desenhar um bolo na arte ASCII"! Por favor, continue lendo;)
Algum tempo atrás, era meu aniversário, agora tenho 33 anos.
Portanto, existe essa tradição social embaraçosa que consiste em convidar familiares e amigos, colocar velas numéricas em um bolo, cantar músicas e abrir presentes.
33
--------
Em vez de números, posso usar o sistema binário para colocar velas comuns: coloco 6 delas no bolo e acendo duas delas.
100001
--------
Eu posso ver que os números decimais e binários da minha idade são palindrômicos!
Desafio
Quero saber se qualquer outro número pode ser colocado em um bolo com velas e ser palindrômico, decimal e binário.
Escrever uma função / programa para testar se um número é palíndromo em ambos decimal e binário. Mas espere, há mais: em zeros binários e principais contam para o teste!
Entrada
Um número decimal x que eu quero testar se for aniversário palindrômico com 0 <x <2 32 -1 (sim, as pessoas da minha dimensão vivem muito tempo)
Saída
Na verdade, se atender exatamente a essas duas condições, Falsey mais:
- A representação decimal do número é um palíndromo padrão
- A representação binária do número é um palíndromo padrão e a adição de zeros à esquerda pode ajudar com isso
Casos de teste
1 > 1 => Truthy
6 > 110 (0110) => Truthy
9 > 1001 => Truthy
10 > 1010 (01010) => Falsey, 10 is not palindromic
12 => 1100 (001100) => Falsey, 12 is not palindromic
13 => 1101 (...01101) => Falsey, neither 13 nor 1101 are palindromic
14 => 1110 (01110) => Falsey, 14 is not palindromic
33 > 100001 => Truthy
44 > 101100 (..0101100) => Falsey, 101100 is not palindromic
1342177280 > 1010000000000000000000000000000 (00000000000000000000000000001010000000000000000000000000000) => Falsey, 1342177280 is not palindromic (but the binary representation is)
297515792 > 10001101110111011101100010000 (000010001101110111011101100010000) => Truthy
Regras
- As brechas padrão não são permitidas
- Conversões e testes internos da biblioteca são permitidos
- Este é o código-golfe , o menor ganho de código!
Boa sorte e, finalmente, feliz aniversário!
fonte
0b01010000000000000000000000000000
não é palindrômico, pois exigiria que mais zeros fossem adicionados e, portanto, excedesse 2 ^ 32-1? Nesse caso, ajudaria a adicionar algo como1342177280
um caso de teste de Falsey.1342177280
não é palindrômico decimal, então Falsey. EdiçãoRespostas:
05AB1E , 7 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
Python 3 , 59 bytes
Experimente online!
-3 bytes graças a Rod
-3 bytes graças a Connor Johnston
fonte
JavaScript (ES6), 65 bytes
Retorna
0
ou1
.Quão?
A função auxiliar g () pega um número inteiro b como entrada e testa se n é um palíndromo na base b . Se b não for especificado, ele apenas converte n em uma string antes de testá-la.
Nós se livrar dos zeros finais na representação binária de n isolando o menos significativo 1 com
n&-n
e dividindo n pela quantidade resultante.Curiosidade: é verdade
0
porque(0/0).toString(2)
é igual"NaN"
, que é um palíndromo. (Mas0
não é uma entrada válida de qualquer maneira.)Casos de teste
Mostrar snippet de código
fonte
Mathematica,
5249 bytesExperimente na Wolfram Sandbox
Uso
Explicação
Versão com builtin
PalindromeQ
fonte
Pitão - 13 bytes
Conjunto de Teste .
fonte
_MI
ejQ2
salvar 2 bytes:_MI,.sjQ2Z`
Japonês , 14 bytes
Teste online!
Explicação
fonte
sêQ *(¢w)sêQ
esêQ &¢w n sêQ
297515792
(o binário invertida convertido em decimal é apenas grande demais para JS ao punho) ...Próton , 57 bytes
Experimente online!
fonte
APL,
2731 bytesComo é que isso funciona? Usando 6 como argumento ...
Experimente no TryAPL.org
fonte
{(⌽¨≡⊢)⍕¨⍵,⊂(⌽↓⍨~⊥~)2⊥⍣¯1⊢⍵}
(é boa forma de fornecer um link para executar toda a suíte de teste)Gelatina , 8 bytes
Experimente online!
fonte
ȧ
oua
não,µ
porque, caso contrário, isso sempre será verdadeiro.Braquilog , 7 bytes
Experimente online!
Isso é um monte de
↔
...Explicação
Com a entrada e saída implícitas, o código é:
?↔?ḃc↔.↔.
fonte
APL (Dyalog Classic) , 26 bytes
Explicação
Experimente online!
fonte
Perl, 53 +3 (-pal) bytes
experimente online
fonte
Pyt , 10 bytes
Retorna [1] se verdadeiro, [0] se falso
Experimente online!
Explicação:
fonte
Retina , 72 bytes
Experimente online! O link inclui casos de teste. Funciona criando uma duplicata unária do número original, mas usando
_
s para que não seja confundido com, por exemplo, uma entrada de11
. O número unário é então convertido em "binário" e os zeros à direita são removidos. Os palíndromos são truncados sucessivamente e o último estágio testa se resta alguma coisa.fonte
Mathematica, 70 bytes
fonte
Casca , 14 bytes
Experimente online!
Ungolfed / Explicação
fonte
Gaia , 10 bytes
Experimente online!
Explicação
Em vez de verificar com zeros à esquerda em binário, verifico sem os zeros à direita.
fonte
C (gcc) , 105 bytes
Experimente online!
fonte
return
porn=
. ( 95 bytes ) .C # (.NET Core) ,
130 129 179173 + 23 bytesalgumas coisas, obrigado a Ed Marty por apontar que preciso verificar o número de 0 preenchido na frente por um palíndromo. E eu preciso ter certeza de que posso verificar até x ^ 32 -1.
Experimente online!
fonte
return
e(
para 129 bytesusing System;
eusing System.Linq
Python 2 , 56 bytes
Experimente online!
Usa o
strip
método Python para remover os zeros iniciais dabin(..)
saída0b
e os zeros finais do número binário (pois eles sempre terão um bit correspondente).fonte
Pitão ,
2522191817 bytes-
3678 bytes, aprendendo mais o idiomaExplicação:
Estou certo de que isso pode ser resolvido, vou trabalhar nisso.
Suíte de teste
fonte
PHP, 69 + 1 bytes
Executar como tubo com
-nR
Echoes a entrada original para truthy / nothing for falsey
Experimente online!
fonte
Oitava ,
6866 bytesExperimente online!
Oferta inicial da Octave.
Basicamente, criamos uma matriz que contém o número como uma string decimal e o número como uma string binária com os 0's removidos. Em seguida, criamos uma matriz com as mesmas strings, mas com os números binários e decimais invertidos. Finalmente, as duas matrizes são comparadas e o resultado é verdadeiro se corresponderem (ambos os palíndromos) ou falso se não corresponderem (um ou ambos não palíndromos).
flip
vez defliplr
.fonte
APL2 (não Dyalog), 36 bytes
Primeiro, seja B a representação de 32 bits de N:
Então espelhe B e encontre a posição do 1º 1:
Em seguida, descarte muitas posições de B. Isso preservará o número correto de 0s iniciais.
Em seguida, execute FIND e OR-REDUCTION para ver se o B recortado contém seu próprio espelho.
Agora vamos olhar para N, o decimal. A expressão entre colchetes mais à esquerda converte N em um vetor de caracteres e verifica se corresponde ao seu próprio espelho.
Finalmente, um AND une as duas verificações.
No APL2, não posso criar uma lambda elegante, então escrevi uma linha e incluí a seta de atribuição. Espero que isso não seja trapaça.
fonte
⎕
) para torná-lo um programa completo? Além disso, você é capaz de reduzir para(N≡⌽N←⍕N)^∨/(B↓⍨1⍳⍨⌽B)⍷B←(32⍴2)⊤N←⎕
?Java 8,
105104 bytesExplicação:
Experimente aqui.
fonte