Advertencia: ¡este NO es un desafío de "oye, dibujemos un pastel en el arte ASCII"! Por favor sigue leyendo;)
Hace algún tiempo era mi cumpleaños, ahora tengo 33 años.
Por lo tanto, existe esta incómoda tradición social que consiste en invitar a familiares y amigos, poner velas con números en un pastel, cantar canciones y abrir regalos.
33
--------
En lugar de números, puedo usar el sistema binario para poner velas estándar: coloco 6 de ellas en el pastel y enciendo dos.
100001
--------
¡Puedo ver que los números decimales y binarios de mi edad son palindrómicos!
Reto
Quiero saber si cualquier otro número se puede poner en un pastel con velas y ser palindrómico, decimal y binario.
Escriba un programa / función para probar si un número es palindrómico tanto en decimal como en binario. Pero espera, hay más: ¡ en binario, los ceros iniciales cuentan para la prueba!
Entrada
Un número decimal x que quiero probar si es un cumpleaños palindrómico con 0 <x <2 32 -1 (sí, las personas en mi dimensión viven mucho tiempo)
Salida
Verdad si cumple exactamente estas dos condiciones, Falsey más:
- La representación decimal del número es un palíndromo estándar.
- La representación binaria del número es un palíndromo estándar, y agregar ceros a la izquierda puede ayudar con esto
Casos de prueba
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
Reglas
- Las lagunas estándar no están permitidas
- Se permiten conversiones y pruebas de biblioteca incorporadas.
- Este es el código de golf , ¡el código más corto gana!
¡Buena suerte y, finalmente, feliz cumpleaños!
fuente
0b01010000000000000000000000000000
¿no es palindrómico ya que requeriría agregar más ceros y, por lo tanto, exceder 2 ^ 32-1? En este caso, sería útil agregar algo1342177280
como un caso de prueba de falsey.1342177280
no es decimal palindrómico, así que Falsey. EdiciónRespuestas:
05AB1E , 7 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Python 3 , 59 bytes
Pruébalo en línea!
-3 bytes gracias a Rod
-3 bytes gracias a Connor Johnston
fuente
JavaScript (ES6), 65 bytes
Devoluciones
0
o1
.¿Cómo?
La función auxiliar g () toma un entero b como entrada y prueba si n es un palíndromo en la base b . Si no se especifica b , solo convierte n en una cadena antes de probarlo.
Eliminamos los ceros finales en la representación binaria de n aislando el 1 menos significativo con
n&-n
y dividiendo n entre la cantidad resultante.Dato curioso: es cierto
0
porque(0/0).toString(2)
igual"NaN"
, que es un palíndromo. (Pero de0
todos modos no es una entrada válida).Casos de prueba
Mostrar fragmento de código
fuente
Mathematica,
5249 bytesPruébalo en Wolfram Sandbox
Uso
Explicación
Versión con incorporado
PalindromeQ
fuente
Pyth - 13 bytes
Test Suite .
fuente
_MI
yjQ2
guardar 2 bytes:_MI,.sjQ2Z`
Japt , 14 bytes
¡Pruébelo en línea!
Explicación
fuente
sêQ *(¢w)sêQ
ysêQ &¢w n sêQ
297515792
(el binario invertido convertido a decimal es demasiado grande para que JS lo maneje) ...Protón , 57 bytes
Pruébalo en línea!
fuente
APL,
2731 bytesComo funciona Usando 6 como argumento ...
Pruébalo en TryAPL.org
fuente
{(⌽¨≡⊢)⍕¨⍵,⊂(⌽↓⍨~⊥~)2⊥⍣¯1⊢⍵}
(es una buena forma de proporcionar un enlace para ejecutar todo el conjunto de pruebas)Jalea , 8 bytes
Pruébalo en línea!
fuente
ȧ
o ena
lugar deµ
porque de lo contrario esto siempre será verdad.Brachylog , 7 bytes
Pruébalo en línea!
Eso es un montón de
↔
...Explicación
Con la entrada y salida implícita, el código es:
?↔?ḃc↔.↔.
fuente
APL (Dyalog Classic) , 26 bytes
Explicación
Pruébalo en línea!
fuente
Perl, 53 +3 (-pal) bytes
pruébalo en línea
fuente
Pyt , 10 bytes
Devuelve [1] si es verdadero, [0] si es falso
Pruébalo en línea!
Explicación:
fuente
Retina , 72 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Funciona creando un duplicado unario del número original, pero usando
_
s para que no se confunda, por ejemplo, con una entrada de11
. El número unario se convierte en "binario" y se eliminan los ceros finales. Los palíndromos se truncan sucesivamente y la última etapa prueba si queda algo.fuente
Mathematica, 70 bytes
fuente
Casco , 14 bytes
Pruébalo en línea!
Ungolfed / Explicación
fuente
Gaia , 10 bytes
Pruébalo en línea!
Explicación
En lugar de verificar con ceros a la izquierda en binario, verifico sin los ceros finales.
fuente
C (gcc) , 105 bytes
Pruébalo en línea!
fuente
return
conn=
. ( 95 bytes. )C # (.NET Core) ,
130 129 179173 + 23 bytesUnas pocas cosas, gracias a Ed Marty por señalar que necesito verificar que haya 0 ceros delante para un palíndromo. Y necesito asegurarme de que puedo verificar hasta x ^ 32 -1.
Pruébalo en línea!
fuente
return
y(
para 129 bytesusing System;
yusing System.Linq
Python 2 , 56 bytes
Pruébalo en línea!
Usos de Python
strip
método para quitar el tantobin(..)
's de salida del líder0b
y ceros a la derecha del número binario (como siempre lo tendrán un poco de correspondencia).fuente
Pyth ,
2522191817 bytes-
3678 bytes aprendiendo más el idiomaExplicación:
Estoy seguro de que esto se puede reducir, estaré trabajando en eso.
Banco de pruebas
fuente
PHP, 69 + 1 bytes
Ejecutar como tubería con
-nR
Echoes la entrada original para la verdad / nada para falsey
Pruébalo en línea!
fuente
Octava ,
6866 bytesPruébalo en línea!
Oferta inicial de Octave.
Básicamente creamos una matriz que contiene el número como una cadena decimal y el número como una cadena binaria con los ceros finales eliminados. Luego creamos una matriz con las mismas cadenas pero con los números binarios y decimales invertidos. Finalmente, se comparan ambas matrices y el resultado es verdadero si coinciden (ambos palíndromos) o falso si no lo hacen (uno o ambos no son palíndromos).
flip
lugar defliplr
.fuente
APL2 (no Dyalog), 36 bytes
Primero dejemos que B sea la representación de 32 bits de N:
Luego espeje B y encuentre la posición del 1er 1:
Luego, elimine esa cantidad de posiciones de B. Esto preservará el número correcto de ceros iniciales.
Luego realice ENCONTRAR y una REDUCCIÓN OR para ver si el B recortado contiene su propio espejo.
Ahora veamos N, el decimal. La expresión entre corchetes más a la izquierda convierte N en un vector de caracteres y comprueba si coincide con su propio espejo.
Finalmente, un AND se une a los dos cheques.
En APL2 no puedo hacer una lambda ordenada, así que escribí una línea e incluí la flecha de asignación. Espero que esto no sea trampa.
fuente
⎕
) para que sea un programa completo? Además, ¿puedes acortar(N≡⌽N←⍕N)^∨/(B↓⍨1⍳⍨⌽B)⍷B←(32⍴2)⊤N←⎕
?Java 8,
105104 bytesExplicación:
Pruébalo aquí.
fuente