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.