La rappresentazione binaria di un numero è palindromo o no?


16

Scrivi un programma completo per scoprire se la rappresentazione binaria di un numero è palindromo o no?

Sample Input
5

Sample Output
YES

Stampa YESse la rappresentazione binaria è palindromo e NOnon.


Quale dovrebbe essere l'output quando non è un palindromo?
Dogbert,

@dogbert Dovrebbe essere 'NO' senza virgolette.
fR0DDY,

Come fai a sapere che è un palindromo? Perché i valori dal primo diverso da zero alla fine della "stringa" sono palindromici? Questo ha un cattivo odore per me, come una sfida.
jcolebrand,

1
Proprio come la risposta di I <3 gnibbler, in realtà non è la soluzione più breve e qualsiasi domanda taggata [code-golf] dovrebbe scegliere la soluzione più corta come vincitore.
Chris Jester-Young,

Input è dato come?
Joey

Risposte:


5

Golfscript - 22 caratteri

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

24

Python - 46 caratteri

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

Wow. Cosa fa [n!=n[::-1]::2]?
Dogbert,

2
@Dogbert, n [:: - 1] è una sezione. Gli indici di inizio e fine sono vuoti, quindi significa l'intera stringa. Il passo è -1, quindi quando vedi [:: - 1] è un modo breve per invertire una stringa / lista ecc. Quindi n! = N [:: - 1] è True (cioè 1) quando n non è un palindromo. Pertanto, quando n è un palindromo, ottieni "YNEOS" [0 :: 2] - inizia da 0 e prendi ogni 2 ° carattere. Quando n non è un palindromo ottieni "YNEOS" [1 :: 2] - inizia da 1 e prendi ogni secondo carattere :)
gnibbler

Penso che le persone stiano votando per il trucco della fetta :), giustamente. : P +1
st0le

4

Ruby, 41 39

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

Grazie a "% b"% di Michael Kohl il trucco si fa.


Molto bello, mi piace molto! +1 per l'utilizzo dell'astronave in modo creativo :-)
Michael Kohl

4

C 84 81 74 personaggi

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

Non utilizza alcuna funzione come l'inverso della stringa.


Non potresti salvare alcuni personaggi cambiando r<<=1in r*=2, v>>=1in v/=2e {}in ;?

@paxdiablo Infatti. Cambiato. Molte grazie.
fR0DDY,

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

e spostando quel termine nel corpo del loop si salva un altro byte.
Tito,

3

Javascript - 79 77 caratteri

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

Maggiori informazioni

prompt()*1 : Trucco rapido per convertire la stringa in numero.

.toString(2) : Ecco come convertire in binario in javascript.

a.split("").reverse().join("") : Non esiste alcun supporto nativo per invertire la stringa, quindi è necessario convertire la stringa in array e array in string.

("[part1]" - "[part 2]")?"YES":"NO": -è un sostituto per !=salvare 1 carattere.


1
Spiegazione eccellente.
TehShrike

2

PHP - 41

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

Test:

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

4
Se hai intenzione di usare le chiamate shell per ottenere l'input, puoi anche usarlo m4invece di catsalvarne uno. C'è anche pge dd(che scrive alcuni byte su stderr).
Nabb,

L'hai provato su Windows? ;)
Tito,

2

Perl, 45 caratteri

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

2

Rubino, 43 caratteri

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

Salva 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 (non concorrenti)

‘NO…Ü‘#EbÂQè

-5 byte grazie ad Adnan.

Provalo online!


Ehi bello! Ho provato a golf un po 'e sono arrivato a 12 byte ‘NO…Ü‘#EbÂQè:).
Adnan,

Grande! Non so ancora come usare / creare stringhe compresse. Inoltre, non sapevo che bin()esistesse la funzione
acrolith,

2
In realtà c'è un esempio dettagliato qui , se sei interessato :).
Adnan,

Questa risposta non è competitiva poiché la domanda precede la lingua.
Okx,


1

Perl (73)

Nessuna stringa inversa:

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

1

Perl (127)

Questo costruisce tutti i palindromi fino a 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 caratteri

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

Beh, tecnicamente che di bash e dc e rev :-)


1

J: 24

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

per esempio:

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

Non dimenticare: in Haskell funzionerà con numeri davvero grandi.
FUZxxl,

2
Ah, in realtà sono 79 personaggi. ;-)
Michael Kohl


1

Pyth, 18 byte

%2>"YNEOS"!qJ.BQ_J

Anche 18 byte:

@,"NO""YES"qJ.BQ_J

1

PHP, non in competizione

Volevo farlo senza usare affatto le stringhe.

soluzione iterativa, 78 byte

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

soluzione ricorsiva, 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;

Se nè un palindromo binario, la metà superiore xo la metà inferiore è anche un palindromo binario e viceversa.


una porta della risposta C eccellente da fR0DDY , 58 byte

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

un rovescio binario. Uovo di Colombo.


1

Retina , 80 78 byte (non concorrenti)

Il conteggio dei byte presuppone la codifica ISO 8859-1.

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

^(.*)¶\1

Provalo online

Converti in unario. Converti quello in binario. Taglia il numero a metà e rimuovi una cifra centrale se ce n'è una. Invertire la prima metà. Abbina se entrambe le metà sono uguali.


1

Gelatina , 12 byte (non competitiva)

BṚ⁼Bị“YES“NO

Provalo online!

Spiegazione:

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

Prima di stampare, la strfunzione di Python viene mappata attraverso un elenco, quindi gli elementi vengono concatenati, in modo da vedere YESo NO.


0

Haxe, 164 byte

Funziona solo con piattaforme di sistema (php, neko, cpp, ecc.). Accetta input tramite argomenti della riga di comando.

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 caratteri

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

2
L'attività richiede un programma completo.
Joey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.