이것은 재미 있었다! 그러나 세 자리 숫자만으로도 재미는 너무 빨리지나 갔다. 이 도전은 비슷하지만, 우리는 재미를 계속할 것입니다.
도전
가능한 한 Golden Ratio φ의 자릿수를 인쇄 하십시오. 황금 비율은 φ = (φ + 1) / φ를 만족하는 숫자로 정의되며 처음 100 자리 숫자는 다음과 같이 지정됩니다.
1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375 ...
이 도전은 φ 계산에 관한 것이 아닙니다 ! 두 번 수행하는 방법을 사용하지 않고 가능한 한 많은 자릿수를 인쇄하는 것입니다. 따라서 가능한 한 많은 창의적인 방법으로 숫자를 얻으십시오!
제한 사항
그 자체로 φ의 숫자를 인쇄하는 것은 약간 간단하므로 다음 규칙이 있습니다.
- 당신은 번호를 구성해야 순서를 왼쪽에서 오른쪽으로 , 하나 그것을 조각으로 조각을 인쇄 또는 왼쪽에서 오른쪽으로 문자열을 구성하고 마지막에 인쇄하여 - 당신은 심지어 가입 후 자리 문자의 배열을 생성 할 수 및 순서대로 인쇄하는 한 인쇄하십시오. 다음 규칙에서 "print"및 "output"은 해당 프로세스 중 하나를 참조 할 수 있습니다 (예 : 문자열을 작성하고 있고 문자열에 이미 인쇄 된
1.6
것으로 계산 된 문자열이 포함1.6
된 경우). - 코드의 경우 숫자 당 15 문자 의 예산을 얻습니다 . 기간은 해당 예산에 포함되지 않지만 인쇄되어야합니다. 제한은 총 코드 크기에만 적용됩니다. 평균을 더 많이 사용하지 않는 한 모든 숫자에 15자를 초과 할 수 있습니다. 실제로, 당신은 문자로 "부채"를 쌓고 나중에 "지불"할 수 있습니다. 예를 들어 60 자를 인쇄
1.618
할 수 있습니다 . - 표준 라이브러리 포함 / 가져 오기는 코드 크기에 포함되지 않습니다. 그러나 이러한 속기 별칭을 무료로 제공 할 수는 없습니다!
- 현재 생성중인 숫자 나 이미 인쇄 한 숫자를 사용해서는 안됩니다. 예를 들어
1
소스 코드의 첫 번째 자리이기 때문에 소스 코드의 아무 곳에도 표시되지 않을 수 있습니다. 상기 출력 코드8
의1.618
숫자 중 임의의 것 또는 모두를 사용할 수[0234579]
있지만 없음[168]
. 이를 위해 단일 숫자 와 동일한 모든 리터럴이 해당 숫자로 처리 됩니다 . 그래서 언어를 대표 할 수있는 경우9
로'\t'
당신은 당신이 사용하지 수있는 어디서든 사용 할 수 없습니다9
대신합니다. - 한 번에 여러 자리 숫자를 생성해서는 안됩니다. 한 번에 한 자리 숫자를 생성하는 청크로 코드를 명확하게 분할 할 수 있어야합니다.
내장 함수, 수학 / 부울 / 비트 단위 / 문자열 연산자, 이전 숫자를 생성 한 코드에서 사용한 변수 또는 상수를 참조하면 안됩니다 . 정수에서 문자열로의 변환, 문자열 연결 및 인쇄 기능은 모든 자릿수에 필요할 수 있습니다. 이되는 중요하지 않습니다 이름 이 참조하는 모든 내장 : 당신 때문에 별명 A의 내장
PI
모두p
와q
사용할 수 의미하지 않는다p
번과q
번. 마찬가지로, 당신이 하는 이 문자열과 같은 두 가지 내장 기능을 참조하는 경우에 두 번 이름을 사용할 수length
와 배열length
.프로그래밍 언어에 함수가없는 경우 bash 스크립팅의 경우 그와 동등한 것이 무엇인지에 대한 최선의 판단을 사용하십시오. 다른 프로그램을 호출하면 함수에 부과 된 규칙을 따라야합니다.
- 제출물은 단일 언어로 작성해야합니다. 따라서 해당 언어의 내장 기능에 액세스하기 위해 다른 언어의 통역사를 실행하지 않습니다.
시사점
위의 규칙은 다음 사항을 모두 암시하지만 샌드 박스에서 이미 발생한 질문을 피하기 위해 여기에 추가합니다.
'\b'
사이에 일부 백 스페이스 (일반적으로 )를 인쇄하여 출력의 일부를 덮어 쓸 수 없습니다 .- 여러 자릿수를 생성 / 출력하는 루프는 금지되어 있습니다. (단 한 자리를 계산하는 루프는 괜찮습니다.)
- 난독 처리 된 버전을 사용
(1 + √5)/2
하거나 피보나치 수를 두 자리 이상으로 나누는 것은 금지되어 있습니다. - 10 자리를 미리 계산하고 10 개의 변수에 저장 한 다음 변수를 참조 하면 숫자를 생성 하지 않으므로 변수를 채우는 코드는 숫자 6을 위반하므로 규칙 6을 위반합니다.
- 실제로 이전 (또는 중간 결과)을 재사용 할 수 없습니다. 두 자리수가 생성 되는 코드를 공유한다는 의미이기 때문입니다 .
- 그렇지 않으면, 숫자를 생성하기 위해 어떤 수단을 사용해도됩니다 (순수하게 수학 할 필요는 없음). (그리고 당신은해야합니다!)
- 표준 라이브러리를 사용하여 여러 곳에서 올바른 자리를 뽑을 수 있다면 실제로 아무것도 계산할 필요가 없습니다.
- 당신은 할 수 있습니다 하나의 숫자를 생성하는 동안 그래서, 연산자를 여러 번 사용하는
2+2+2
첫 번째를 생성하는 공정한 게임이다6
(이 짧은 같지도 않지만). - 리터럴은 내장 상수가 아니기 때문에 원하는만큼 리터럴을 사용할 수 있습니다 . 따라서 인쇄 할 필요가없는 한 코드에서 원하는
5
만큼 을 인쇄 할 수 있습니다5
. - 출력하는 숫자를 사용하기 때문에 출력을 하드 코딩 할 수 없습니다.
간단히 말해서 : 숫자를 두 번 생성하는 방법을 사용하지 말고 현재 출력하거나 이미 인쇄 한 숫자를 사용하지 마십시오.
만약 당신이 무한한 점수를 얻을 수있는 허점을 발견한다면, 그것을 이용하여 도전을 망치지 말고, 허점을 수정하지 않고 허점을 고칠 수 있는지 알려주십시오.
채점
가장 높은 자릿수를 올바르게 인쇄하는 프로그램이 이깁니다. 동점 인 경우 짧은 코드는 동점을 끊습니다.
코드의 어느 부분이 어떤 숫자를 생성하는지 식별하는 주석이없는 주석 처리 된 버전을 추가하십시오.
추신 : 누군가 100 위의 숫자를 초과하면 여기에 더 있습니다.
x = (x+1)/x
(또는 x^2 = x+1
) (또는 x^2-x+1
) 에 2 차 공식을 사용하고 있습니다.