배경
여기에있는 대부분의 사람들은 소수, 소수, 이진수, 16 진수, 8 진수와 같은 몇 가지 정수 기본 시스템에 익숙해야합니다. 예를 들어 16 진수 시스템에서 숫자 abc.de 16 은 다음을 나타냅니다.
a*16^2 + b*16^1 + c*16^0 + d*16^-1 + e*16^-2
그러나 비이성적 인 숫자와 같이 정수가 아닌 기본을 사용할 수도 있습니다. 그러한 기초가 황금비 φ = (1 + √5) / 2 ≈ 1.618 ...을 사용하면 . 이들은 정수 염기와 유사하게 정의됩니다. 따라서 숫자 abc.de φ (여기서 a 에서 e 는 정수)입니다.
a*φ^2 + b*φ^1 + c*φ^0 + d*φ^-1 + e*φ^-2
원칙적으로 모든 숫자는 음수가 될 수 있습니다 (우리는 그것에 익숙하지는 않지만)-선행으로 음수를 나타냅니다 ~
. 이 질문의 목적을 위해 우리는에서 ~9
~ 까지의 숫자로 제한 9
하므로 숫자를 하나의 문자열로 분명하게 쓸 수 있습니다 (사이에 물결표가 있음). 그래서
-2*φ^2 + 9*φ^1 + 0*φ^0 + -4*φ^-1 + 3*φ^-2
로 작성됩니다 ~290.~43
. 우리는 그러한 숫자를 인수 라고 부릅니다 .
phinary 수는 항상 표현 될 수 표준 양식 표현은 숫자를 사용하는 수단 1
과 0
포함하지 않고, 11
어디서나, 그리고 선택적 빼기 기호 전체 번호가 부정적임을 나타냅니다. 흥미롭게도 모든 정수는 표준 형식으로 고유 한 유한 표현을 갖습니다.
표준 형식이 아닌 표현은 다음 관찰을 사용하여 항상 표준 형식으로 변환 할 수 있습니다.
- 011 φ = 100 φ (φ 2 = φ + 1 이므로 )
- 0200 φ = 1001 φ (φ 2 + 1 / φ = 2φ이므로)
- 0 ~ 10 φ = ~ 101 φ (φ-1 / φ = 1이므로)
게다가:
- 가장 중요한 자리 인 경우
~1
(숫자의 나머지 부분은 표준 양식 인 상태), 수는 음, 우리는 모두 교환하여 표준 형태로 변환 할 수 있습니다1
와~1
, 마이너스 부호를 붙이는, 우리까지 다시 위의 세 가지 규칙을 적용 표준 양식을 얻습니다.
다음은 이러한 정규화의 예입니다 (각 숫자 위치를 정렬하기 위해 양수에 추가 공백을 사용하고 있습니다).
1~3.2~1φ
1~3. 2~1φ Rule:
= 0~2. 3~1φ (3)
= ~1~1. 4~1φ (3)
= ~1 0 0. 4~1φ (3)
= ~1 0 0. 3 0 1φ (3)
= ~1 0 1. 1 0 2φ (2)
= ~1 1 0. 0 0 2φ (1)
= ~1 1 0. 0 1 0 0 1φ (2)
= - 1~1 0. 0~1 0 0~1φ (4)
= - 0 0 1. 0~1 0 0~1φ (3)
= - 0 0 1.~1 0 1 0~1φ (3)
= - 0 0 0. 0 1 1 0~1φ (3)
= - 0 0 0. 0 1 1~1 0 1φ (3)
= - 0 0 0. 0 1 0 0 1 1φ (3)
= - 0 0 0. 0 1 0 1 0 0φ (1)
항복 .-0.0101φ
더 자세히 읽으 려면 Wikipedia 에 주제에 대한 유익한 기사 가 있습니다.
도전
따라서 또는 다른 방법으로, (위에서 설명한 것처럼) 9 진수를 나타내는 문자열이 주어지면 선행 또는 후행 0없이 표준 형식을 출력하는 프로그램 또는 함수를 작성하십시오. 입력에 반드시 피닌 포인트가 포함되어 있지는 않지만 항상 왼쪽에있는 숫자가 포함됩니다 (그래서 no .123
). 출력은 항상 피닌 포인트와 그 왼쪽에 적어도 하나의 숫자를 포함해야합니다.
STDIN, ARGV 또는 함수 인수를 통해 입력을 받아 결과를 리턴하거나 STDOUT에 인쇄 할 수 있습니다.
임의의 (유효한) 입력에 대해 원칙적으로 정확하고 정확한 한, 즉 구현을 중단시킬 수있는 유일한 한계는 내장 된 크기와 같은 기술적 한계 여야합니다 데이터 유형 또는 사용 가능한 RAM. 예를 들어, 부동 소수점 숫자로 입력을 평가 한 다음 탐욕적으로 숫자를 선택하는 것은 허용되지 않습니다. 부동 소수점 부정확성이 잘못된 결과를 초래하는 입력을 찾을 수 있기 때문입니다.
이것은 코드 골프이며, 가장 짧은 대답 (바이트)이 이깁니다.
테스트 사례
Input Output
1 1.
9 10010.0101
1.618 10000.0000101
1~3.2~1 -0.0101
0.~1021 0. (or -0.)
105.~2 1010.0101
~31~5.~1 -100000.1001