Escriba un programa que lea de stdin dos enteros, cada línea nueva terminada, en lo sucesivo denominada "número" y "raíz", y:
- Imprime cualquier mensaje fijo que desea si el número es un palíndromo en el que la base (por ejemplo
true
,t
,1
) - Imprime cualquier mensaje fijo diferente que desea si el número no es un palíndromo en el que la base (por ejemplo
false
,f
,0
, etc.) - Estos mensajes deben ser los mismos para cada carrera, pero no hay reglas sobre lo que deben ser (lo que sea mejor para jugar al golf).
- Puede suponer que la entrada es válida, dos enteros positivos. "número" no excederá
2147483647
, "radix" no excederá32767
. - No puede usar recursos externos, pero puede usar cualquier función matemática incluida por defecto en su idioma.
Nota: una raíz es solo la base del número.
Ejecuciones de muestra:
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
fuente
fuente
Respuestas:
J (23 caracteres) y K (19) doble función
Los dos idiomas son muy similares, tanto en general como en este golf específico. Aquí está la J:
,~1
- Agregue el número 1 a sí mismo, haciendo la matriz1 1
.1!:1
- Leer en dos cadenas desde el teclado (1!:1
es para leer, y1
es el identificador / número de archivo para la entrada del teclado).".
- Convierte cada cadena en un número.#.^:_1~/
-F~/ x,y
significa encontrary F x
. NuestroF
es#.^:_1
, que realiza la expansión de base.(-:|.)
- ¿El argumento coincide (-:
) con su reverso (|.
)?1
por si,0
por no.Y aquí está la K:
0::'``
- Lea en (0::
) una cadena para cada ('
) línea de la consola (`
es el identificador de archivo para esto)..:'
- Convierta (.:
) cada ('
) cadena en un número._vs/|
- Invierta el par de números, de modo que la raíz esté delante del número, y luego inserte (/
) la función de expansión de base_vs
("vector de escalar") entre ellos.a~|a:
- Asigne esta expansión resultante aa
, y luego verifique sia
coincide (~
) con su inverso (|
). De nuevo,1
por sí,0
por no.fuente
GolfScript, 10 caracteres
Es fácil para GolfScript si lo hacemos de manera directa. La salida es
0
/1
para falso / verdadero.fuente
APL (20)
Salidas
0
o1
, por ejemplo:Explicación:
⎕{
...}⎕
: lee dos números, pásalos a la función.⍵
es el primer número y⍺
es el segundo número.⌊1+⍺⍟⍵
:floor(1+⍺ log ⍵)
, número de dígitos necesarios para representar⍵
en la base⍺
.⍺/⍨
: la base para cada dígito,⍺
replicado por el número que acabamos de calcular.⍵⊤⍨
: representa⍵
en la base dada (usando números, por lo que funciona para todos los valores de⍺
).≡∘⌽⍨
: ver si el resultado es igual a su reverso.fuente
Perl,
82777369 bytesLos números de entrada se esperan como líneas de entrada de STDIN y el resultado se escribe como
1
o0
, el primero significa que el primer número es un palíndromo en su representación de la base dada.Edición 1: el uso
$=
guarda algunos bytes, debido a su conversión interna a int.Edición 2: el operador smartmatch
~~
compara los elementos de la matriz directamente, por lo que no es necesaria la conversión a una cadena.Edición 3: optimización mediante la eliminación de una variable innecesaria.
65 bytes : si la cadena vacía se permite como salida para
false
, los últimos cuatro bytes se pueden eliminar.Versión sin golf
El algoritmo almacena los dígitos del número convertido en una matriz
@a
. Luego, la representación de cadena de esta matriz se compara con la matriz en orden inverso. Los espacios separan los dígitos.fuente
$=
dejarte pasar elint
paso ... Y la pregunta representa paraanything you want
que nada pueda ser lo que quieres ;-)$=
También se da como consejo en esta respuesta a la pregunta "Consejos para jugar al golf en Perl" . La devolución0
cuesta 6 bytes adicionales, pero tuve la impresión de que un mensaje fijo no está vacío.silence
Javascript 87
n
argumento es el número,b
argumento es la raíz.fuente
Sabio, 45
Se ejecuta en el mensaje interactivo
Imprime
True
cuando es un palíndromo, imprime loFalse
contrariofuente
Perl
54 5662Para ser probado:
daré:
Entonces esta salida
1
paratrue
cuando se encuentra un palíndromo y nada más.No golfista:
Nota :
$_
es el búfer de línea actual y está vacío al comienzo.$=
es una variable reservada , utilizada originalmente para la impresión de líneas, es un contador de líneas. Entonces, esta variable es un número entero , cualquier cálculo en esto daría como resultado un número entero truncado como siint()
se usara.$-
se usaba por diversión, solo para no usar letras tradicionales ... (algo más de ofuscación) ...fuente
Mathematica
7743IntegerDigits[n,b]
representa n como una lista de dígitos en la base b. Cada dígito base-b se expresa decimalmente.Por ejemplo, 16781313 no es un palíndromo en la base 17:
Sin embargo, es un palíndromo en la base 16:
Si se introdujeron los pares ordenados en los ejemplos anteriores,
volvería
fuente
Integer
Haskell (80 caracteres)
Llámalo con
pali $number $radix
. Es cierto, cuando el número es un palíndromo, falso si no.fuente
Ruby - 76 caracteres
fuente
Perl 6 , 27 bytes (22 sin stdin / out)
Pruébalo en línea!
Perl6, rey de los campos de golf legibles (¿golves?) (Y también algunos no tan legibles).
Función Perl 6 (no stdin / stdout), 22 bytes
Pruébalo en línea!
fuente
base
en mi respuesta es quebase
solo admite hasta la base 36, y la pregunta pide que se admitan radixes hasta32767
dg - 97 bytes
Probar dg :
Explicado:
fuente
C,
140132fuente
puts(m)
funcionaría ¿verdad?printf("%d",m);
será de 8 caracteres más corto.Haskell - 59
Pocos cambios en la respuesta de Max Ried.
fuente
Pyth , 4 bytes
Pruébelo aquí o eche un vistazo a un conjunto de pruebas (tarda unos 10-15 segundos).
fuente
cc, 39 bytes
La longitud es un palíndromo, por supuesto (
33₁₂
).El número y la raíz deben estar en la parte superior de la pila (en la base de números actual); el número debe ser al menos 0 y la raíz debe ser al menos 2. La salida es
t
si es un palíndromo yf
si no. Como no se especifica en el desafío, asumí que los números nunca tienen ceros a la izquierda (por lo que cualquier número que termine en0
no puede ser un palíndromo).Explicación
Como un programa completo:
fuente
LaTeX, 165 bytes
Ejemplo en desmos.com
k
, la raíz, es una entrada ajustableSi
f(x)=0
,x
es un palíndromo en la basek
.fuente
Perl 6 , 34 bytes
-4 bytes gracias a PhilH
Pruébalo en línea!
fuente
05AB1E ,
43 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
C (gcc) , 79 bytes
Pruébalo en línea!
En mal estado
Basado en el hecho de que para un palíndromo, el reverso del número debe ser igual al número mismo.
Suponga que tiene el número ABC de tres dígitos en alguna base. Multiplicarlo por base siempre dará como resultado ABC0, y dividirlo por base en AB con C como resto. Entonces, para invertir el número, seleccionamos el dígito más a la derecha del número original y lo insertamos a la derecha en el número invertido. Para hacer espacio para ese dígito, multiplicamos el reverso por la base de antemano.
Básicamente:
fuente