Bir sayının ikili gösterimi palindrom mu, değil mi?


16

Bir sayının ikili gösteriminin palindrom olup olmadığını bulmak için tam bir program yazın?

Sample Input
5

Sample Output
YES

YESİkili gösterim palindrom ise veya NObaşka bir şekilde yazdırın .


Palindrom olmadığında çıktı ne olmalıdır ?
— Dogbert

@dogbert Tırnaklar olmadan 'HAYIR' olmalıdır.
— fR0DDY

Bunun bir palindrom olduğunu nereden biliyorsun? Çünkü ilk sıfırdan "string" in sonuna kadar olan değerler palindromik mi? Bu bir meydan okuma olarak benim için gerçekten kötü kokuyor.
— jcolebrand

1
Ben <3 gnibbler'ın cevabı, aslında en kısa çözüm değil ve [code-golf] etiketli herhangi bir soru kazanan olarak en kısa çözümü seçmelidir.
— Chris Jester-Young

Girdi nasıl verilir?
— Joey

Yanıtlar:


5

Golfscript - 22 karakter

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

24

Python - 46 karakter

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

Vay. Ne yapar [n!=n[::-1]::2]?
— Dogbert

2
@Dogbert, n [:: - 1] bir dilimdir. Başlangıç ​​ve bitiş dizinleri boş olduğundan tüm dizeyi ifade eder. Adım boyutu -1'dir, bu nedenle [:: - 1] öğesini gördüğünüzde, bir dizeyi / listeyi tersine çevirmenin kısa bir yoludur. Bu nedenle n! = N [:: - 1], n olmadığında True'dur (yani 1). bir palindrom. Bu nedenle n bir palindrom olduğunda, 'YNEOS' [0 :: 2] elde edersiniz - 0'dan başlayın ve her 2 karakteri alın. N bir palindrom olmadığında 'YNEOS' alırsınız [1 :: 2] - 1'den başlayın ve her ikinci karakteri alın :)
— gnibbler

Sanırım insanlar dilim hilesi için oy veriyor :) Doğru. : P +1
— st0le

4

Yakut, 41 39

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

Michael Kohl sayesinde "% b"% aldatıyor.


Çok hoş, bunu çok beğendim! Uzay gemisini yaratıcı bir şekilde kullanmak için +1 :-)
— Michael Kohl

4

C 84 81 74 Karakterler

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

Ters dize gibi bir işlev kullanmaz.


Bir kaç karakteri r<<=1içine r*=2, v>>=1içine v/=2ve {}içine girerek kaydedemez misiniz ;?

@paxdiablo Gerçekten. Değiştirildi. Çok teşekkürler.
— fR0DDY

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

ve bu terimi döngü gövdesine taşımak başka bir bayt kazandırır.
— Titus

3

Javascript - 79 77 karakter

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

Daha fazla bilgi

prompt()*1 : Dizeyi sayıya dönüştürmek için hızlı hile.

.toString(2) : Javascript'te ikiliye bu şekilde dönüşürsünüz.

a.split("").reverse().join("") : Dizeyi tersine çevirmek için yerel bir destek yoktur, bu nedenle dizeyi diziye ve dizeyi dizeye dönüştürmeniz gerekir.

("[part1]" - "[part 2]")?"YES":"NO": -Yerine geçer !=1 kömürü kaydedin.


1
Mükemmel açıklama.
— TehShrike

2

PHP - 41

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

Ölçek:

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

4
Eğer giriş almak için kabuk çağrıları kullanmak gidiyoruz, hem de kullanabilir m4yerine catbirini kurtarmak için. Ayrıca vardır pgve dd(stderr'a bazı baytlar yazar).
— Nabb

Bunu Windows'ta denediniz mi? ;)
— Titus

2

Perl, 45 karakter

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

2

Ruby, 43 karakter

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

2 Tasarruf: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 bayt (rakip olmayan)

‘NO…Ü‘#EbÂQè

-Adnan sayesinde 5 byte.

Çevrimiçi deneyin!


Hey güzel! Biraz golf yapmaya çalıştım ve 12 byte'a geldim ‘NO…Ü‘#EbÂQè:).
— Adnan

Harika! Sıkıştırılmış dizeleri nasıl kullanacağımı / hazırlayacağımı hala bilmiyorum. Ayrıca, işlevin bin()var olduğunu bilmiyordum
— acrolith

2
Eğer ilgileniyorsanız, burada detaylı bir örnek var :).
— Adnan

Soru dilden önce geldiği için bu cevap rekabet etmiyor.
— Okx


1

Perl (73)

Ters dize yok:

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

1

Perl (127)

Bu, 2 ^ 32'ye kadar tüm palindromları oluşturur.

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

Peki, teknik olarak bu bash ve dc ve rev :-)


1

J: 24

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

Örneğin:

   ((-:|.)#: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

Unutmayın: Haskell'de bu çok büyük rakamlarla çalışacaktır.
— FUZxxl

2
Ahm, aslında 79 karakter. ;-)
— Michael Kohl


1

Pyth, 18 bayt

%2>"YNEOS"!qJ.BQ_J

Ayrıca 18 bayt:

@,"NO""YES"qJ.BQ_J

1

PHP, rakip değil

Dizeleri kullanmadan yapmak istedim.

yinelemeli çözüm, 78 bayt

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

özyinelemeli çözüm, 113 bayt

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;

Eğer nikili palindrom, üst yan XOR alt yarısı, aynı zamanda tam tersi bir ikili palindrom ve yardımcısı olup.


fR0DDY'den gelen mükemmel C cevabının bir portu , 58 bayt

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

ikili ters. Columbus´ yumurtası.


1

Retina , 80 78 bayt (rakip değil)

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

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

^(.*)¶\1

Çevrimiçi deneyin

Tekli'ye dönüştür. Bunu ikili dosyaya dönüştürün. Numarayı ikiye bölün ve varsa ortadaki bir rakamı kaldırın. İlk yarıyı ters çevirin. Her iki yarı da eşitse eşleşir.


1

Jöle , 12 bayt (rakip olmayan)

BṚ⁼Bị“YES“NO

Çevrimiçi deneyin!

Açıklama:

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

Yazdırmadan önce, Python'un strişlevi bir liste ile eşleştirilir ve ardından öğeler birleştirilir, böylece YESveya öğesini görürsünüz NO.


0

Haxe, 164 bayt

Yalnızca sistem platformlarıyla (php, neko, cpp vb.) Çalışır. Komut satırı bağımsız değişkenleri aracılığıyla girdi alır.

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";
    Dize s = Tamsayı.toBinaryString (i);
    return s.equals (yeni StringBuffer (s) .reverse () + "")? "EVET": "HAYIR";

2
Görev, tam bir program gerektirir.
— Joey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.