Apakah Anda memperhatikan, bahwa ini adalah palindrome?
Input
angka integer non-negatif atau string yang mewakilinya
Keluaran
4 kemungkinan keluaran, mewakili dua sifat nomor:
- apakah itu palindrome
- rumit # 2
Properti Tricky # 2
Jika angka bukan palindrome, properti ini menjawab pertanyaan "Apakah angka pertama dan terakhir memiliki paritas yang sama?"
Jika angka adalah palindrom, properti ini menjawab pertanyaan "Apakah digit pertama dan tengah memiliki paritas yang sama?". Untuk panjang genap, digit tengah adalah salah satu dari dua digit tengah.
Contohnya
12345678 -> False False
Itu bukan palindrome, digit pertama dan terakhir memiliki paritas yang berbeda12345679 -> False True
Itu bukan palindrome, digit pertama dan terakhir memiliki paritas yang sama12344321 -> Benar Salah
Ini adalah palindrom, digit pertama 1 dan digit tengah 4 memiliki paritas yang berbeda123454321 -> True True
Ini adalah palindrome, digit pertama 1 dan digit tengah 5 memiliki paritas yang sama
PS
Anda bebas menentukan jenis dan format keluaran. Ini bisa berupa 4 nilai berbeda. Sebut saja dalam jawaban Anda.
sumber
Jawaban:
05AB1E,
15,1413 byte (Terima kasih kepada Riley dan carusocomputing)Coba online
Kembali dengan tanda kurung jika itu adalah palindrome
Kembali dengan 0 jika paritasnya berbeda, 1 jika sama
Ð
Tambahkan input, sehingga saya memiliki input yang cukup untuk bekerjaR
Membalikkan elemen terakhir dari tumpukanQ
Lihat apakah itu sama (ambil dua elemen teratas dan lakukan ==)i
Jika pernyataan, maka hanya melewati ketika itu adalah palindrome2
Tekan angka 2ä
Bagi input menjadi 2 irisan yang sama¨
Dorong elemen pertama dari pemecahan (126462 hasil dalam 1264)}
Berakhir jikaÈ
Periksa apakah elemen terakhir genap¹
Tekan kembali input pertamaR
Balikkan input ituÈ
Periksa apakah sekarangQ
Periksa apakah hasil tersebut sama dan secara implisit dicetaksumber
¨
bukan1£
.,
, keluaran tersirat. Juga bukan2ä
Anda dapat menggunakan membagi dlm dua cabang:Â
; penghematan 2 byte untuk 12:ÐRQi¨}ȹRÈQ
,
akan mendorong Anda untuk memimpin;).PHP,
5552 bytemenerima input dari STDIN; jalankan bersama
-R
.keluaran:
10
untuk palindrom dan paritas yang sama11
untuk palindrome dan paritas yang berbeda0
untuk non-palindrome dan paritas yang sama1
untuk non-palindrome dan paritas yang berbedacatatan:
strlen($n)/2
==log($n,10)/2
==log($n,100)
$n[1*log($n,100)]
$n[0*log($n,100)]
sumber
<?=
alih-alihecho
sandbox.onlinephpfunctions.com/code/…$argn
hanya didefinisikan dengan-R
, dan itu tidak mengizinkan tag.$argn
juga tersedia dengan-F
. Tapi nm.Jelly ,
1614 byteCobalah online!
Menghasilkan dua baris:
1
untuk palindrome,0
untuk tidak0
untuk tricky # 2 ,1
untuk tidakPenjelasan
sumber
Python 2 ,
706866 byteCobalah online!
sumber
PowerShell ,
11499 byteCobalah online!
Disimpan 15 byte berkat @Sinusoid.
Inputs as a string. Outputs an array of type
(0|1) (True|False)
, with the0
indicating "not a palindrome" and the1
indicating "palindrome", and theTrue
indicating parity matches andFalse
otherwise.This is done by using a pseudo-ternary and indexing into the appropriate place
(a,b)[index]
. The index($n-eq-join$n[$n.length..0])
checks whether the input is a palindrome. If it is not, we take thea
portion, which is a0
coupled with whether the parity of the first digit$n[0]
is-eq
ual to the parity of the last digit$n[-1]
. Otherwise, we're in theb
portion, which is a1
coupled with whether$z
(the parity of the first digit) is-eq
ual to the parity of the middle digit$n[$n.length/2]
.Previously, I had
"$($n[0])"
to get the first digit to cast correctly as an integer, since$n[0]
results in achar
and the modulo operator%
coalesceschar
s based on the ASCII value, not the literal value, whereas astring
does the literal value. However, @Sinusoid helped me to see that0,1,2,...,9
as literal values all have the same parity as48,49,50,...,57
, so if it uses the ASCII value we still get the same result.That array is left on the pipeline, and output is implicit.
sumber
$
when you did modulus%2
to a number? I tried this myself and it wasn't necessary if I individually did each step, but it is when you put it inside an array? Does powershell treat it as a different variable type?$n[0]
indexes, it comes out as achar
. The cast fromchar
toint
forced by the%
operator doesn't go from'1'
to1
, but to the ASCII value, so it's49
. The"$( )"
does an explicit cast to string instead, which properly converts it to1
. ... Although, now that you mention it, the parity of0..9
is the same as ASCII48..57
, so I can probably golf that down. Thanks!VBA,
11799 bytesSaved 18 bytes thanks to Titus
It doesn't expand much once formatted:
Here are the given test case results:
sumber
&1
instead ofmod 2
. You might also get rid of theIf/Then
withr=r+2-2*(left(s,1)-b &1)
or even betterIf s = StrReverse(s) then r=2
andr=r+1-(left(s,1)-b &1)
... and 2 bytes off with reversing the Tricky#2:r=r+(left(s,1)-b &1)
; save more with printing it directly:Debug.Print r+(left(s,1)-b &1)
. Should be 95 bytes then; 98 if&1
does not work.And
instead of just&
. I figured out how to implement your first suggestion but I couldn't figure out how you meant to change the 3rd line withStrReverse
.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 for palindromes, 1/0 for Tricky#2Mid()
withLeft(s,Len(s)/2+1)
or so.Len(s)/2
=4.5
which VBA will round to4
. If it's 7 characters long, thenLen(s)/2
=3.5
which VBA will also round to4
. Adding0.1
corrects the lunacy.Perl 6, 48 bytes
Try it
results in
(True True)
(True False)
(False True)
or(False False)
Expanded:
sumber
Java 8,
205197182168134 bytesOutputs:
1
for false-false;2
for false-true;3
for true-false;4
for true-true.Explanation:
Try it here.
sumber
Haskell, 89 bytes
Try it online! Usage:
f "12345"
. Returns0
for True True,1
for True False,2
for False True and3
for False False.The function
#
converts both digit characters into their ascii character codes and sums them. If both are even or both are odd the sum will be even, otherwise if one is even and the other odd the sum will be odd. Calculating modulo two,#
returns0
for equal parity and1
otherwise.f
checks if the input stringx
is a palindrome. If not then#
is called withx
and the last character ofx
and two is added to the result, otherwise ifx
is palindromic call#
with the middle character ofx
instead and leave the result as is.sumber
Kotlin, 142 bytes
Try it online!
sumber
REXX,
104100 bytesReturns logical value pair
0 0
,0 1
,1 0
or1 1
.sumber
R,
115109105 bytesTakes input from stdin. Returns
FALSE FALSE
for False False,FALSE TRUE
for False True,TRUE FALSE
for True False, andTRUE TRUE
for True True.sumber
AWK,
9796 bytesSimplest usage is to place the code into file:
OddEven
then do:Output is essentially the bit-sum of the comparisons in the Question, e.g.
I tried removing the
()
from(s?0:2)
but this messes up operator precedence somehow.sumber
CJam, 32 bytes
Input is a number on top of the stack.
Explanation:
sumber
Ruby, 60 + 1 = 61 bytes
Uses the
-n
flag.Try it online!
sumber
Groovy,
326303 bytesShrunk Code:
Original Code (with Explanation):
Original Code (without Explanation):
Input:
Output:
sumber