整数のデジタル硬さを見つけるには、そのバイナリ表現を取得し、先頭と末尾
1
がで始まるか終わるまで削除できる回数をカウントし0
ます。削除されたビットの総数は、デジタル硬度です。
これは非常に冗長な説明です。実際の例で説明しましょう。
この例では、番号3167を使用します。バイナリでは、これは次のとおりです。
110001011111
(バイナリへの変換中に、先行ゼロを必ず削除する必要があることに注意してください)
で始まったり終わったりしない0
ため、1ペアのビットを削除します。
1 1000101111 1
そしてもう一つ:
11 00010111 11
しかし、最初は0であるため、もう1
ペアを削除することはできません。合計で4ビットが削除されたため、4は3167のデジタル硬度です。
ただし、正のnに対して2 n -1(つまり、バイナリ表現のみを含む)として記述できる数値の場合、0には到達しないため、すべてのビットを削除できます。これは、硬度が単に整数のビット長であることを意味します。1
チャレンジ
あなたの仕事は、負でない整数を与えられてn >= 0
そのデジタル硬度を決定するプログラムまたは関数を書くことです。
I / Oを実行する完全なプログラム、または結果を返す関数を送信できます。送信はn
、言語の標準整数範囲内の値に対して機能する必要があります。
テストケース
これらのいずれかが正しくない場合、または追加するエッジケースを提案する場合は、私に通知してください。
0 -> 0
1 -> 1
8 -> 0
23 -> 2
31 -> 5
103 -> 4
127 -> 7
1877 -> 2
2015 -> 10
以下は、これらのテストケースを生成するために使用した、バグのないPythonソリューションです(バグがないことは保証されていません)。
def hardness(num) -> int:
binary = bin(num)[2:]
if binary.count('0') == 0:
return num.bit_length()
revbin = binary[::-1]
return min(revbin.find('0'), binary.find('0')) * 2
1
ない場合、どのように1を返し0
ますか?つまり、文字列から1を十分に削除して、開始または終了させることはできません0
。