数のバイナリ表現は回文であるかどうか?


16

完全なプログラムを書いて、数値のバイナリ表現が回文であるかどうかを調べますか?

Sample Input
5

Sample Output
YES

印刷YESバイナリ表現が回文とあればNOそうでありません。


回文ではない場合の出力はどうなりますか?
ドグバート

@dogbert引用符なしで「NO」にする必要があります。
fR0DDY

それが回文だとどうしてわかるの?最初の非ゼロから「文字列」の最後までの値は回文的であるためですか?これは、挑戦として、私にとって本当に悪臭がします。
jcolebrand

1
私が<3ニブラーの答えを出したように、それは実際には最短の解決策ではなく、[code-golf]とタグ付けされた質問は、最短の解決策を勝者として選ぶべきです。
クリスジェスターヤング

入力はどのように与えられますか?
ジョーイ

回答:



24

Python-46文字

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

ワオ。何を[n!=n[::-1]::2]するの?
ドグバート

2
@ Dogbert、n [::-1]はスライスです。開始インデックスと終了インデックスは空なので、文字列全体を意味します。ステップサイズは-1なので、[::-1]を見ると、文字列/リストなどを逆にするための短い方法です。したがって、nがそうでない場合、n!= n [::-1]はTrue(つまり1)です回文。したがって、nが回文の場合、「YNEOS」[0 :: 2]が得られます-0から開始して、2文字ごとに取得します。nが回文ではない場合、「YNEOS」[1 :: 2]が表示されます-1から開始して2文字ごとに取得します:)
ニブラー

私は人々がスライストリックに投票していると思う:)、そうです。:P +1
st0le

4

ルビー、41 39

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

Michael Kohlの "%b"%getsトリックに感謝します。


とても素敵です、私はこれがとても好きです!宇宙船を創造的に使用するための+1 :
マイケルコール

4

C 84 81 74文字

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

文字列リバースのような関数は使用しません。


r<<=1r*=2v>>=1v/=2、そして{}に変化するいくつかの文字を保存できませんでした;か?

@paxdiablo確かに。かわった。どうもありがとう。
fR0DDY

r*=2,r|=v&1-> r=r*2|v&1(- 2)
タイタス

その用語をループの本体に移動すると、もう1バイト節約されます。
タイタス

3

Javascript- 79 77文字

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

詳しくは

prompt()*1 :文字列を数値に変換するクイックトリック。

.toString(2) :それがjavascriptでバイナリに変換する方法です。

a.split("").reverse().join("") :文字列を逆にするネイティブサポートがないため、文字列を配列に、配列を文字列に変換する必要があります。

("[part1]" - "[part 2]")?"YES":"NO":1文字を節約するための-代替です!=


1
素晴らしい説明。
TehShrike

2

PHP-41

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

テスト:

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

4
シェル呼び出しを使用して入力を取得する場合は、入力を保存するm4代わりに使用することもできますcat。またpg、and dd(stderrにいくつかのバイトを書き込みます)もあります。
ナブ

Windowsで試しましたか?;)
タイタス

2

Perl、45文字

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


2

Windows PowerShell、67

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

2

05AB1E、17 12バイト(非競合)

‘NO…Ü‘#EbÂQè

アドナンのおかげで-5バイト。

オンラインでお試しください!


いいね!私はそれを少しゴルフしようとすると、12バイトになりました‘NO…Ü‘#EbÂQè:)。
アドナン

すごい!圧縮文字列の使用方法や作成方法はまだわかりません。また、機能がbin()存在することも知りませんでした
アクロリス

2
興味があるなら、実際にはここに詳細な例があります:)。
アドナン

質問が言語より前にあるため、この答えは競合しません。
Okx


1

Perl(73)

文字列の反転なし:

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

1

Perl(127)

これは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

バッシュ、55文字

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

まあ、技術的にその者bash dc して rev :-)


1

J:24

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

例えば:

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

ハスケル(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

忘れないでください:Haskellでは、これは非常に大きな数で動作します。
-FUZxxl

2
ああ、それは実際には79文字です。;-)
マイケルコール



1

PHP、競合しない

文字列をまったく使わずにそれをやりたかった。

反復ソリューション、78バイト

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

再帰的ソリューション、113バイト

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;

もしnバイナリ回文、上半分XOR下半分は、また、その逆バイナリパリンドロームと副です。


fR0DDYからの優れたC回答のポート、58バイト

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

バイナリリバース。コロンブスの卵。


1

網膜80 78バイト(非競合)

バイトカウントはISO 8859-1エンコードを前提としています。

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

^(.*)¶\1

オンラインで試す

単項に変換します。それをバイナリに変換します。数字を半分に切り、中間の数字がある場合は削除します。前半を逆にします。両方が等しい場合に一致します。


1

ゼリー、12バイト(非競合)

BṚ⁼Bị“YES“NO

オンラインでお試しください!

説明:

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

印刷する前に、Pythonのstr関数はリストを介してマッピングされ、要素が連結されるため、YESまたはが表示されますNO


0

Haxe、164バイト

システムプラットフォーム(php、neko、cppなど)でのみ動作します。コマンドライン引数を介して入力を受け取ります。

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文字

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

2
タスクは完全なプログラムを必要とします。
ジョーイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.