¿Te diste cuenta de que esto es un palíndromo?
Ingrese
un número entero no negativo o una cadena que lo represente
Salida
4 salidas posibles, que representan dos propiedades de número:
- es palindrome
- complicado # 2
Propiedad difícil # 2
Si el número no es palíndromo, esta propiedad responde a la pregunta "¿El primer y el último dígito tienen la misma paridad?"
Si el número es palíndromo, esta propiedad responde a la pregunta "¿El primer dígito y el medio tienen la misma paridad?". Para longitudes pares, el dígito del medio es uno de los dos dígitos centrales.
Ejemplos
12345678 -> Falso Falso
No es palíndromo, el primer y el último dígito tienen paridad diferente12345679 -> Falso verdadero
No es palíndromo, el primer y el último dígito tienen la misma paridad12344321 -> Verdadero Falso
Es palíndromo, el primer dígito 1 y el dígito medio 4 tienen paridad diferente123454321 -> Verdadero Verdadero
Es palíndromo, el primer dígito 1 y el dígito medio 5 tienen la misma paridad
PD
Usted puede decidir el tipo y formato de salida. Podría ser cualquier 4 valores distintos. Solo mencionalo en tu respuesta.
fuente
Respuestas:
05AB1E,
15,1413 bytes (Gracias a Riley y carusocomputing)Probar en línea
Devuelve con paréntesis si es un palíndromo
Devuelve con 0 si la paridad es diferente, 1 si es la misma
Ð
Agregar entrada, de modo que tenga suficiente entrada para trabajar conR
Invierte el último elemento de la pilaQ
Mire si es lo mismo (toma los dos elementos superiores y realiza ==)i
Si la declaración, solo pasa cuando es un palíndromo2
Empuja el número 2ä
Dividir la entrada en 2 partes iguales¨
Empuje el primer elemento de la división (1264621 resulta en 1264)}
Terminara siÈ
Compruebe si el último elemento es par¹
Empuje la primera entrada nuevamenteR
Invierta esa entradaÈ
Comprueba si es incluso ahoraQ
Compruebe si esos resultados pares son los mismos e imprima implícitamentefuente
¨
lugar de1£
.,
salida final , implícita. También en lugar de2ä
que puede utilizar bifurcado:Â
; ahorro de 2 bytes para 12:ÐRQi¨}ȹRÈQ
,
debería empujarte a la cabeza;).PHP,
5552 bytestoma entrada de STDIN; correr con
-R
.salida:
10
para palíndromo y misma paridad11
para palíndromo y paridad diferente0
para no palíndromo y la misma paridad1
para no palíndromo y paridad diferentenotas:
strlen($n)/2
==log($n,10)/2
==log($n,100)
$n[1*log($n,100)]
$n[0*log($n,100)]
fuente
<?=
lugar deecho
sandbox.onlinephpfunctions.com/code/…$argn
solo se define con-R
, y eso no permite etiquetas.$argn
también está disponible con-F
. Pero nm.Jalea ,
1614 bytesPruébalo en línea!
Salidas dos líneas:
1
para palíndromo,0
para no0
para complicado # 2 ,1
para noExplicación
fuente
Python 2 ,
706866 bytesPruébalo en línea!
fuente
PowerShell ,
11499 bytesPruébalo en línea!
Guardado 15 bytes gracias a @Sinusoid.
Entradas como una cadena. Emite una matriz de tipo
(0|1) (True|False)
, con la0
indicación "no es un palíndromo" y la1
indicación "palíndromo", y laTrue
paridad indicadora coincide y de loFalse
contrario.Esto se hace mediante el uso de un pseudoternario e indexación en el lugar apropiado
(a,b)[index]
. El índice($n-eq-join$n[$n.length..0])
verifica si la entrada es un palíndromo. Si no es así, tomamos laa
porción, que se0
combina con si la paridad del primer dígito$n[0]
es-eq
ual a la paridad del último dígito$n[-1]
. De lo contrario, estamos en lab
parte, que se1
combina con si$z
(la paridad del primer dígito) es-eq
ual a la paridad del dígito del medio$n[$n.length/2]
.Anteriormente, tenía
"$($n[0])"
que obtener el primer dígito para emitir correctamente como un entero, ya que los$n[0]
resultados en achar
y el operador de módulo se%
unen enchar
función del valor ASCII, no del valor literal, mientras que astring
hace el valor literal. Sin embargo, @Sinusoid me ayudó a ver que,0,1,2,...,9
como valores literales, todos tienen la misma paridad que48,49,50,...,57
, por lo que si usa el valor ASCII, obtendremos el mismo resultado.Esa matriz se deja en la tubería, y la salida es implícita.
fuente
$
cuando moduló%2
un número? Lo intenté yo mismo y no fue necesario si hice cada paso individualmente, pero ¿es cuando lo pones dentro de una matriz? ¿Powershell lo trata como un tipo de variable diferente?$n[0]
indexa, sale como achar
. El reparto dechar
alint
forzada por el%
operador no ir de'1'
a1
, sino a la ASCII valor, por lo que es49
. En su lugar,"$( )"
realiza una conversión explícita a cadena, que lo convierte correctamente a1
. ... Aunque, ahora que lo mencionas, la paridad de0..9
es la misma que ASCII48..57
, por lo que es probable que pueda golf que hacia abajo. ¡Gracias!VBA,
11799 bytesGuardado 18 bytes gracias a Titus
No se expande mucho una vez formateado:
Estos son los resultados del caso de prueba:
fuente
&1
lugar demod 2
. También puede deshacerse deIf/Then
conr=r+2-2*(left(s,1)-b &1)
o incluso mejorIf s = StrReverse(s) then r=2
yr=r+1-(left(s,1)-b &1)
... y 2 bytes desactivados invirtiendo el Tricky # 2r=r+(left(s,1)-b &1)
:; ahorrar más con la impresión directamente:Debug.Print r+(left(s,1)-b &1)
. Debería ser 95 bytes entonces; 98 si&1
no funciona.And
lugar de solo&
. Descubrí cómo implementar tu primera sugerencia, pero no pude entender cómo querías cambiar la tercera líneaStrReverse
.Sub p(s);b=s;If s=StrReverse(s)Then r=2:b=Mid(s,Len(s)/2+.1,1);Debug.?r+(Left(s,1)-b&1);End Sub
-> 0/2 para palíndromos, 1/0 para Tricky # 2Mid()
con másLeft(s,Len(s)/2+1)
o menos.Len(s)/2
= a4.5
qué VBA se redondeará4
. Si tiene 7 caracteres de longitud, entoncesLen(s)/2
= a3.5
qué VBA también se redondeará4
. Agregar0.1
corrige la locura.Perl 6 , 48 bytes
Intentalo
resultados en
(True True)
(True False)
(False True)
o(False False)
Expandido:
fuente
Java 8,
205197182168134 bytesSalidas:
1
para falso-falso;2
para falso-verdadero;3
para verdadero-falso;4
por verdadero-verdadero.Explicación:
Pruébalo aquí.
fuente
Haskell , 89 bytes
Pruébalo en línea! Uso:
f "12345"
. Devuelve0
para Verdadero Verdadero,1
para Verdadero Falso,2
para Falso Verdadero y3
para Falso Falso.La función
#
convierte ambos caracteres de dígitos en sus códigos de caracteres ascii y los suma. Si ambos son pares o ambos son impares, la suma será par; de lo contrario, si uno es par y el otro impar, la suma será impar. Calculando el módulo dos, se#
obtiene0
una paridad igual y de lo1
contrario.f
comprueba si la cadena de entradax
es un palíndromo. Si no#
es así, se llama conx
y el último carácter dex
y dos se agrega al resultado; de lo contrario, six
se llama palindrómica#
con el carácter medio de en sux
lugar y deja el resultado como está.fuente
Kotlin , 142 bytes
Pruébalo en línea!
fuente
REXX,
104100bytesDevuelve valor par lógico
0 0
,0 1
,1 0
o1 1
.fuente
R,
115109105 bytesToma entrada de stdin. Devuelve
FALSE FALSE
para Falso Falso,FALSE TRUE
Falso Verdadero,TRUE FALSE
Verdadero Falso yTRUE TRUE
Verdadero Verdadero.fuente
AWK,
9796 bytesEl uso más simple es colocar el código en el archivo:
OddEven
luego hacer:La salida es esencialmente la suma de bits de las comparaciones en la pregunta, p. Ej.
He intentado quitar la
()
de(s?0:2)
, pero esta meta la pata de precedencia de los operadores de alguna manera.fuente
CJam, 32 bytes
La entrada es un número en la parte superior de la pila.
Explicación:
fuente
Rubí , 60 + 1 = 61 bytes
Usa la
-n
bandera.Pruébalo en línea!
fuente
Groovy,
326303bytesCódigo encogido:
Código original (con explicación):
Código original (sin explicación):
Entrada:
Salida:
fuente