정수 의 디지털 경도 를 찾으려면 이진 표현을 취하고으로 시작하거나 끝날 때까지 선행 및 후행
1
을 제거 할 수있는 횟수를 계산하십시오0
. 제거 된 총 비트 수는 디지털 경도입니다.
그것은 꽤 간결한 설명입니다. 잘 작동하는 예를 들어 보겠습니다.
이 예에서는 숫자 3167을 사용합니다. 이진수로 다음과 같습니다.
110001011111
(이진수로 변환하는 동안 선행 0을 제거해야합니다.)
로 시작하거나 끝나지 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
다음은 이러한 테스트 사례를 생성하는 데 사용 된 ungolfed 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
.