Você notou que este é um palíndromo?
Introduza
um número inteiro não negativo ou sequência que o represente
Saída
4 saídas possíveis, representando duas propriedades do número:
- é palíndromo
- complicado # 2
Propriedade complicada nº 2
Se number não for palíndromo, essa propriedade responde à pergunta "O primeiro e o último dígito têm a mesma paridade?"
Se number for palíndromo, essa propriedade responde à pergunta "O primeiro e o dígito médio têm a mesma paridade?". Para comprimentos pares, o dígito do meio é um dos dois dígitos centrais.
Exemplos
12345678 -> Falso Falso
Não é palíndromo, o primeiro e o último dígito têm paridade diferente12345679 -> False True
Não é um palíndromo, o primeiro e o último dígitos têm a mesma paridade12344321 -> Verdadeiro Falso
É palíndromo, o primeiro dígito 1 e o dígito médio 4 têm paridade diferente123454321 -> Verdadeiro Verdadeiro
É palíndromo, o primeiro dígito 1 e o dígito médio 5 têm a mesma paridade
PS
Você decide o tipo e formato de saída. Pode haver 4 valores distintos. Apenas mencione isso na sua resposta.
fonte
Respostas:
05AB1E,
15,1413 bytes (Agradecimentos a Riley e carusocomputing)Experimente on-line
Retorna entre colchetes se for um palíndromo
Retorna com 0 se a paridade for diferente, 1 se for a mesma
Ð
Adicionar entrada, de modo que eu tenha entrada suficiente para trabalhar comR
Inverta o último elemento da pilhaQ
Veja se é o mesmo (pega os dois elementos principais e executa ==)i
If, então só passa quando é um palíndromo2
Empurre o número 2ä
Divida a entrada em 2 fatias iguais¨
Empurre o primeiro elemento da divisão (1264621 resultados em 1264)}
Fim seÈ
Verifique se o último elemento é par¹
Empurre a primeira entrada novamenteR
Inverta essa entradaÈ
Verifique se é mesmo agoraQ
Verifique se esses resultados são iguais e imprima implicitamentefonte
¨
vez de1£
.,
saída implícita final . Além disso, em vez de2ä
você pode usar bifurcado:Â
; economia de 2 bytes para 12:ÐRQi¨}ȹRÈQ
,
deve levá-lo à liderança;).PHP,
5552 bytesrecebe entrada do STDIN; corra com
-R
.resultado:
10
para palíndromo e mesma paridade11
para palíndromo e paridade diferente0
para não palíndromo e mesma paridade1
para não palíndromo e paridade diferentenotas:
strlen($n)/2
==log($n,10)/2
==log($n,100)
$n[1*log($n,100)]
$n[0*log($n,100)]
fonte
<?=
em vez deecho
sandbox.onlinephpfunctions.com/code/...$argn
é definido apenas com-R
, e isso não permite tags.$argn
também está disponível com-F
. Mas nm.Geléia ,
1614 bytesExperimente online!
Produz duas linhas:
1
para palíndromo,0
para não0
para complicado # 2 ,1
para nãoExplicação
fonte
Python 2 ,
706866 bytesExperimente online!
fonte
PowerShell ,
11499 bytesExperimente online!
Economizou 15 bytes graças a @Sinusoid.
Entradas como uma sequência. Gera uma matriz do tipo
(0|1) (True|False)
, com a0
indicação "não é um palíndromo" e a1
"palíndromo" indicadora, e aTrue
paridade de indicação corresponde eFalse
caso contrário.Isso é feito usando um pseudo-ternário e indexando no local apropriado
(a,b)[index]
. O índice($n-eq-join$n[$n.length..0])
verifica se a entrada é um palíndromo. Caso contrário, tomamos aa
parte, que é um0
acoplado a se a paridade do primeiro dígito$n[0]
é-eq
igual à paridade do último dígito$n[-1]
. Caso contrário, estamos nab
parte, que é um1
acoplado a se$z
(a paridade do primeiro dígito) é-eq
igual à paridade do dígito do meio$n[$n.length/2]
.Anteriormente, eu precisava
"$($n[0])"
obter o primeiro dígito para converter corretamente como um número inteiro, pois os$n[0]
resultados em umchar
e no operador de módulo%
coalescemchar
s com base no valor ASCII, não no valor literal, enquanto astring
faz o valor literal. No entanto, o @Sinusoid me ajudou a ver que,0,1,2,...,9
como valores literais, todos têm a mesma paridade que48,49,50,...,57
, portanto, se ele usar o valor ASCII, ainda obteremos o mesmo resultado.Essa matriz é deixada no pipeline e a saída é implícita.
fonte
$
quando modulou%2
um número? Eu mesmo tentei isso e não era necessário se eu fizesse cada etapa individualmente, mas é quando você a coloca dentro de uma matriz? O powershell o trata como um tipo de variável diferente?$n[0]
indexa, sai como achar
. O elenco dechar
paraint
forçado pelo%
operador não ir de'1'
para1
, mas para o ASCII valor, por isso é49
. Em"$( )"
vez disso, faz uma conversão explícita em string, que a converte corretamente em1
. ... Embora, agora que você mencionou, a paridade de0..9
seja a mesma que ASCII48..57
, então eu provavelmente posso resolver isso. Obrigado!VBA,
11799 bytesEconomizou 18 bytes graças a Titus
Ele não se expande muito depois de formatado:
Aqui estão os resultados dos casos de teste fornecidos:
fonte
&1
vez demod 2
. Você também pode se livrar doIf/Then
comr=r+2-2*(left(s,1)-b &1)
ou ainda melhorIf s = StrReverse(s) then r=2
er=r+1-(left(s,1)-b &1)
... e 2 bytes com revertendo o Tricky # 2:r=r+(left(s,1)-b &1)
; economizar mais com imprimi-lo diretamente:Debug.Print r+(left(s,1)-b &1)
. Deve ter 95 bytes então; 98 se&1
não funcionar.And
vez de apenas&
. Eu descobri como implementar sua primeira sugestão, mas não consegui descobrir como você pretendia alterar a terceira linhaStrReverse
.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()
porLeft(s,Len(s)/2+1)
ou mais.Len(s)/2
= para4.5
qual VBA será arredondado4
. Se tiver 7 caracteres, entãoLen(s)/2
= para3.5
qual VBA também será arredondado4
. A adição0.1
corrige a loucura.Perl 6 , 48 bytes
Tente
resulta em
(True True)
(True False)
(False True)
ou(False False)
Expandido:
fonte
Java 8,
205197182168134 bytesSaídas:
1
para falso-falso;2
para falso-verdadeiro;3
para verdadeiro-falso;4
para verdadeiro-verdadeiro.Explicação:
Experimente aqui.
fonte
Haskell , 89 bytes
Experimente online! Uso:
f "12345"
. Retorna0
para Verdadeiro Verdadeiro,1
Verdadeiro Falso,2
Falso Verdadeiro e3
Falso Falso.A função
#
converte os dois caracteres de dígito em seus códigos de caracteres ASCII e os soma. Se ambos são pares ou ambos são ímpares, a soma será par; caso contrário, se um for par e o outro ímpar, a soma será ímpar. Calculando o módulo dois,#
retorna0
para igual paridade e1
caso contrário.f
verifica se a sequência de entradax
é um palíndromo. Se não, então#
é chamado comx
e o último caractere dex
e dois é adicionado ao resultado, caso contrário, sex
é chamada palindrômica#
com o caractere do meio emx
vez disso e deixa o resultado como está.fonte
Kotlin , 142 bytes
Experimente online!
fonte
REXX,
104100 bytesRetorna o valor par lógica
0 0
,0 1
,1 0
ou1 1
.fonte
R,
115109105 bytesRecebe entrada de stdin. Retorna
FALSE FALSE
para Falso Falso,FALSE TRUE
para Falso Verdadeiro,TRUE FALSE
para Verdadeiro Falso eTRUE TRUE
para Verdadeiro Verdadeiro.fonte
AWK,
9796 bytesO uso mais simples é colocar o código no arquivo:
OddEven
faça:A saída é essencialmente a soma de bits das comparações na Questão, por exemplo,
Eu tentei remover o
()
de,(s?0:2)
mas isso atrapalha a precedência do operador de alguma forma.fonte
CJam, 32 bytes
Entrada é um número no topo da pilha.
Explicação:
fonte
Ruby , 60 + 1 = 61 bytes
Usa a
-n
bandeira.Experimente online!
fonte
Groovy,
326303 bytesCódigo Encolhido:
Código original (com explicação):
Código original (sem explicação):
Entrada:
Resultado:
fonte