Write a full program to find whether the binary representation of a number is palindrome or not?
Sample Input
5
Sample Output
YES
Print YES
if binary representation is palindrome and NO
otherwise.
Write a full program to find whether the binary representation of a number is palindrome or not?
Sample Input
5
Sample Output
YES
Print YES
if binary representation is palindrome and NO
otherwise.
n=bin(input())[2:]
print'YNEOS'[n!=n[::-1]::2]
[n!=n[::-1]::2]
do?
\$\endgroup\$
-6 bits thanks to @lyxal
-3 bits thanks to @the-thonnu
bḂ≠`∨ȯno`½iN
b # binary of input
Ḃ≠ # is not equal to its reverse (essentially: is not a palindrome?)
`∨ȯno` # compressed string `yesno`
½ # split into two strings of equal length
i # index that inequality (0/1) into that
N # case swapped to uppercase
$><<%w(YES NO)[(n="%b"%$*)<=>n.reverse]
Thanks to Michael Kohl's "%b"%gets trick.
C 84 81 74 Characters
r;main(v,x){for(scanf("%d",&v),x=v;v;v/=2)r=r*2|v&1;puts(r-x?"NO":"YES");}
It does not use any function like string reverse.
r<<=1
into r*=2
, v>>=1
into v/=2
and {}
into ;
?
\$\endgroup\$
alert((a=(prompt()*1).toString(2))-a.split("").reverse().join("")?"NO":"YES")
More information
prompt()*1
: Quick trick to convert string to number.
.toString(2)
: That's how you convert to binary in javascript.
a.split("").reverse().join("")
: There is no native support to reverse string, so you have to convert string to array and array to string.
("[part1]" - "[part 2]")?"YES":"NO"
: -
is a replacement for !=
to save 1 char.
<?=strrev($n=decbin(`cat`))==$n?@YES:@NO;
Test:
php 713.php <<< 5
YES
php 713.php <<< 6
NO
m4
instead of cat
to save one. There's also pg
and dd
(which writes some bytes to stderr).
\$\endgroup\$
$_=sprintf'%b',shift;
print reverse==$_?YES:NO
Ruby, 43 characters
puts((n="%b"%gets)==n.reverse ? "YES":"NO")
puts (n="%b"%gets)==n.reverse ? :YES: :NO
\$\endgroup\$
('NO','YES')[($a=[Convert]::ToString("$input",2))-eq-join$a[64..0]]
‘NO…Ü‘#EbÂQè
:).
\$\endgroup\$
bin()
existed
\$\endgroup\$
alert((a=[...(+prompt()).toString(2)]).some(x=>x-a.pop())?"NO":"YES")
A different approach from HoLyVieR's solution
Explanation
+prompt()
: Converts string to number
[...s]
: converts a string s
to an array of chars
.some((x) => x - a.pop())
: checks whether there is one element in the array that does not equal the last element of the array
Edit
69 chars, thanks to the suggestions by Shaggy
n=bin(input())[2:]
print'YES'if n==n[::-1]else'NO'
['NO','YES'][n==n[::-1]]
\$\endgroup\$
Commented
Nov 3, 2016 at 15:35
No string reverse:
print f(split//,sprintf'%b',shift);
sub f{@_<=1?YES:shift!=pop()?NO:f(@_)}
This one constructs all palindromes up to 2^32.
sub f{
my($x,$l)=@_;
$l+=2,f(($x<<$_)+1+(1<<$l-1),$l)?return 1:0 for 1..15-$l/2;
$x-$ARGV[0]?0:1
}
print f(0,1)+f(0,0)+f(1,1)?YES:NO
C=`dc<<<$1\ 2op`;[ $C = `rev<<<$C` ]&&echo YES||echo NO
bash
and dc
and rev
:-)
\$\endgroup\$
((-:|.)#:x){2 3$'NO YES'
eg:
((-:|.)#:5){2 3$'NO YES'
YES
((-:|.)#:12){2 3$'NO YES'
NO
((-:|.)#:125){2 3$'NO YES'
NO
((-:|.)#:63){2 3$'NO YES'
YES
0?k=n;n?k=div n 2?(n`mod`2+k*2);f x|x==x?0="YES"|True="No";main=interact$f.read
%2>"YNEOS"!qJ.BQ_J
Also 18 bytes:
@,"NO""YES"qJ.BQ_J
I wanted to do it without using strings at all.
iterative solution, 78 bytes
for($x=log($n=$argv[1],2);$i<$x&($n>>$i^$n>>$x-$i^1);$i++);echo$i<$x/2?NO:YES;
recursive solution, 113 bytes
function p($n,$x=0){return$n<2?$n:is_pal(($n&(1<<$x=log($n,2)/2)-1)^$n>>$x+!is_int($x));}echo p($argv[1])?YES:NO;
If n
is a binary palindrome, the upper half xor the lower half is also a binary palindrome and vice versa.
a port of the excellent C answer from fR0DDY, 58 bytes
for($x=2*$v=$argv[1];$x/=2;$r=$r*2|$x&1);echo$r-$v?NO:YES;
a binary reverse. Columbus´ egg.
BṚ⁼Bị“YES“NO
Explanation:
BṚ⁼Bị“YES“NO Main link. Arguments: z.
B Binary representation of z.
Ṛ Reversed.
B Binary representation of z.
⁼ Check if x is equal to y.
“YES“NO [['Y', 'E', 'S'], ['N', 'O']]
ị xth element of y (1-indexed).
Before printing, Python's str
function is mapped through a list, and then the elements are concatenated, so you see YES
or NO
.
If[PalindromeQ@IntegerDigits[#,2],"YES","NO"]&
±î«Áýãf©¯tvf–ɉ2
Unpacked: "YES"^(=\|:;b)||"NO
. Man that yes/no required output really killed my byte count
"YES" String
^ Repeated
( Begin expression
\ Fold with...
= ...equality
|: Bifurcate
_ Variable initialized to STDIN; implied
;b Binary representation
) End expression
|| Boolean OR
"NO String, ending quote implied
This works because empty strings are falsey.
?q_K.BQK"YES""NO
?q_K.BQK"YES""NO
K.BQ // Assign binary input to K
?q_K K // Evaluate whether K and reversed K are equal
"YES""NO // Ternary output.
'NO' 'YES'⊃⍨≡∘⌽⍨2⊥⍣¯1⊢⎕
-3 bytes from Bubbler, after fitting the question requirements.
Instead of performing an if-else like below, this program uses APL's representation of true as 1 and false as 0 to select from an array, where 'NO' is in the 0th index and 'YES' is in the first index.
{(⌽≡⊢)2(⊥⍣¯1)⍵:'YES'⋄'NO'}
{(⌽≡⊢)2(⊥⍣¯1)⍵:'YES'⋄'NO'}
{ } function wrapper
⍵ take the right argument
2(⊥⍣¯1) convert to base 2, and split into -1 groups(gets all digits)
(⌽≡⊢) reverse equals right expression?
:'YES'⋄'NO'} if the above is true, display 'YES', otherwise 'NO'
⎕
at the end solves the problem.
\$\endgroup\$
Byte count assumes ISO 8859-1 encoding.
.+
$*
+`(1+)\1
${1}0
01
1
^((.)*?).??((?<-2>.)*$)
$1¶$3
O$^`.(?=.*¶)
^(.*)¶\1
Convert to unary. Convert that to binary. Cut the number in half and remove a middle digit if there is one. Reverse the first half. Match if both halves are equal.