Representasi biner dari angka adalah palindrome atau bukan?


16

Tulis program lengkap untuk mengetahui apakah representasi biner dari angka tersebut adalah palindrome atau bukan?

Sample Input
5

Sample Output
YES

Cetak YESjika representasi biner adalah palindrom dan NOsebaliknya.


Apa yang harus menjadi output ketika itu bukan palindrome?
Dogbert

@dogbert Seharusnya 'TIDAK' tanpa tanda kutip.
fR0DDY

Bagaimana Anda tahu itu palindrom? Karena nilai dari nol pertama sampai akhir "string" adalah palindromic? Ini baunya sangat buruk bagi saya, sebagai tantangan.
jcolebrand

1
Sama seperti saya menjawab <3 gnibbler, itu sebenarnya bukan solusi terpendek, dan setiap pertanyaan yang ditandai [kode-golf] harus memilih solusi terpendek sebagai pemenang.
Chris Jester-Young

Masukan diberikan bagaimana?
Joey

Jawaban:


5

Golfscript - 22 karakter

~2base.-1%="YES""NO"if

24

Python - 46 karakter

n=bin(input())[2:]
print'YNEOS'[n!=n[::-1]::2]

Wow. Apa yang [n!=n[::-1]::2]harus dilakukan
Dogbert

2
@Dogbert, n [:: - 1] adalah slice. Indeks awal dan akhir kosong, jadi artinya seluruh string. Stepsize adalah -1, jadi ketika Anda melihat [:: - 1] ini adalah cara singkat untuk membalikkan string / daftar dll. Jadi n! = N [:: - 1] Benar (yaitu 1) ketika n tidak sebuah palindrome. Karenanya ketika n adalah palindrom, Anda mendapatkan 'YNEOS' [0 :: 2] - mulai dari 0 dan ambil setiap karakter ke-2. Ketika n bukan palindrome, Anda mendapatkan 'YNEOS' [1 :: 2] - mulai dari 1 dan ambil setiap karakter kedua :)
gnibbler

Saya pikir orang-orang memberikan suara untuk trik slice :), memang demikian. : P +1
st0le

4

Ruby, 41 39

$><<%w(YES NO)[(n="%b"%$*)<=>n.reverse]

Berkat "% b"% Michael Kohl mendapat trik.


Sangat bagus, saya sangat suka ini! +1 untuk menggunakan pesawat ruang angkasa dengan cara yang kreatif :-)
Michael Kohl

4

C 84 81 74 Karakter

r;main(v,x){for(scanf("%d",&v),x=v;v;v/=2)r=r*2|v&1;puts(r-x?"NO":"YES");}

Itu tidak menggunakan fungsi seperti string terbalik.


Tidak bisakah Anda menyimpan beberapa karakter berubah r<<=1menjadi r*=2, v>>=1menjadi v/=2dan {}ke dalam ;?

@paxdiablo Memang. Berubah Terima kasih banyak.
fR0DDY

r*=2,r|=v&1-> r=r*2|v&1(-2)
Titus

dan memindahkan istilah itu ke badan loop menghemat byte lain.
Titus

3

Javascript - 79 77 karakter

alert((a=(prompt()*1).toString(2))-a.split("").reverse().join("")?"NO":"YES")

Informasi lebih lanjut

prompt()*1 : Trik cepat untuk mengonversi string menjadi angka.

.toString(2) : Begitulah cara Anda mengkonversi ke biner di javascript.

a.split("").reverse().join("") : Tidak ada dukungan asli untuk membalikkan string, jadi Anda harus mengkonversi string ke array dan array ke string.

("[part1]" - "[part 2]")?"YES":"NO": -adalah pengganti untuk !=menghemat 1 char.


1
Penjelasan yang bagus.
TehShrike

2

PHP - 41

<?=strrev($n=decbin(`cat`))==$n?@YES:@NO;

Uji:

php 713.php <<< 5
YES
php 713.php <<< 6
NO

4
Jika Anda akan menggunakan panggilan shell untuk mendapatkan input, lebih baik gunakan m4alih-alih catmenyimpannya. Ada juga pgdan dd(yang menulis beberapa byte ke stderr).
Nabb

Sudahkah Anda mencobanya di Windows? ;)
Titus

2

Perl, 45 karakter

$_=sprintf'%b',shift;
print reverse==$_?YES:NO

2

Ruby, 43 karakter

puts((n="%b"%gets)==n.reverse ? "YES":"NO")

Hemat 2:puts (n="%b"%gets)==n.reverse ? :YES: :NO
Phrogz

2

Windows PowerShell, 67

('NO','YES')[($a=[Convert]::ToString("$input",2))-eq-join$a[64..0]]

2

05AB1E, 17 12 byte (tidak bersaing)

‘NO…Ü‘#EbÂQè

-5 byte terima kasih kepada Adnan.

Cobalah online!


Hai bagus! Saya mencoba sedikit golf dan datang ke 12 byte ‘NO…Ü‘#EbÂQè:).
Adnan

Bagus! Saya masih tidak tahu cara menggunakan / membuat string terkompresi. Juga, saya tidak tahu fungsi itu bin()ada
acrolith

2
Sebenarnya ada contoh terperinci di sini , jika Anda tertarik :).
Adnan

Jawaban ini tidak bersaing karena pertanyaan mendahului bahasa.
Okx


1

Perl (73)

Tidak ada string terbalik:

print f(split//,sprintf'%b',shift);
sub f{@_<=1?YES:shift!=pop()?NO:f(@_)}

1

Perl (127)

Yang ini membangun semua palindrom hingga 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

1

Bash, 55 karakter

C=`dc<<<$1\ 2op`;[ $C = `rev<<<$C` ]&&echo YES||echo NO

Nah, secara teknis itu bash dan dc dan rev :-)


1

J: 24

((-:|.)#:x){2 3$'NO YES'

misalnya:

   ((-:|.)#:5){2 3$'NO YES'
YES
   ((-:|.)#:12){2 3$'NO YES'
NO
   ((-:|.)#:125){2 3$'NO YES'
NO
   ((-:|.)#:63){2 3$'NO YES'
YES

1

Haskell (79)

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

Jangan lupa: Di Haskell, ini akan bekerja dengan angka yang sangat besar.
FUZxxl

2
Ahm, itu sebenarnya 79 karakter. ;-)
Michael Kohl

1

C (77 byte)

r,t;main(n){for(t=n=atoi(gets(&n));n;r*=2,r|=n%2,n/=2);puts(r-t?"NO":"YES");}

UJI


1

Pyth, 18 byte

%2>"YNEOS"!qJ.BQ_J

Juga 18 byte:

@,"NO""YES"qJ.BQ_J

1

PHP, tidak bersaing

Saya ingin melakukannya tanpa menggunakan string sama sekali.

solusi berulang, 78 byte

for($x=log($n=$argv[1],2);$i<$x&($n>>$i^$n>>$x-$i^1);$i++);echo$i<$x/2?NO:YES;

solusi rekursif, 113 byte

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;

Jika npalindrom biner, bagian atas x atau bagian bawah juga merupakan palindrom biner dan sebaliknya.


port jawaban C yang sangat baik dari fR0DDY , 58 byte

for($x=2*$v=$argv[1];$x/=2;$r=$r*2|$x&1);echo$r-$v?NO:YES;

pembalikan biner. Telur Columbus.


1

Retina , 80 78 byte (tidak bersaing)

Hitungan byte mengasumsikan penyandian ISO 8859-1.

.+
$*
+`(1+)\1
${1}0
01
1
^((.)*?).??((?<-2>.)*$)
$1¶$3
O$^`.(?=.*¶)

^(.*)¶\1

Cobalah online

Konversikan ke unary. Ubah itu menjadi biner. Potong jumlahnya menjadi dua dan hapus digit tengah jika ada. Membalik babak pertama. Cocokkan jika kedua bagiannya sama.


1

Jelly , 12 byte (tidak bersaing)

BṚ⁼Bị“YES“NO

Cobalah online!

Penjelasan:

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).

Sebelum mencetak, strfungsi Python dipetakan melalui daftar, dan kemudian elemen-elemen digabungkan, sehingga Anda melihat YESatau NO.


0

Haxe, 164 byte

Hanya berfungsi dengan platform sistem (php, neko, cpp, dll.). Mengambil input melalui argumen baris perintah.

class T{static function main(){var r:Dynamic=Std.parseInt(Sys.args()[0]);var s=r.toString(2);trace(s==[for(i in-s.length+1...1)s.charAt(-i)].join('')?"YES":"NO");}}


-1

Java, 97 85 karakter

return Integer.toBinaryString(i).equals(new StringBuffer(s).reverse()+"")?"YES":"NO";
    String s = Integer.toBinaryString (i);
    return s.equals (StringBuffer baru .reverse () + "")? "YA": "TIDAK";

2
Tugas memanggil program lengkap.
Joey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.