퍼즐
고등학교 때 들었던 작은 수수께끼는 이런 식으로 진행되었습니다.
- 질문자는 나에게 번호를 물어볼 것입니다.
- 숫자를 듣고 질문자는 결국 숫자 4에 도달 할 때까지 (예를 들어 10은 3 이라고 말할 수 있음) 반복적으로 변형을 수행합니다 ( 4로 끝나는 시점 은 마술입니다 ).
- 어떤 숫자라도 결국 4 개로 변환 될 수있는 것 같습니다.
목표는 변형 함수를 알아 내고이 퍼즐을 스스로 확실하게 감독 할 수 있도록하는 것이 었습니다.
해결책
모든 단계에서 변환 기능은
- 문제의 번호를 가지고
- 하이픈이나 공백 또는 "and"를 무시하고 영어 단어 표현의 문자 수를 계산합니다 (예 : "ten"에는 3 개의 문자가 있고, "thirty-four"에는 10 개의 문자가 있습니다. "1 백 사십 삼") 20 글자 포함).
- 그 수의 문자를 반환하십시오.
내가 테스트 해 본 모든 숫자에 대해, 이것은 4로 수렴됩니다. "four"도 그 안에 4 개의 문자가 있기 때문에 여기에 무한 루프가 있습니다. 대신 시퀀스를 끝내는 것은 관례 상 마법 이라고합니다 .
도전
당신의 도전은 사용자로부터 숫자를 읽을 코드 조각을 만들고 "four is magic"에 도달 할 때까지 반복적으로 적용되는 변환 함수를 보여주는 줄을 인쇄하는 것입니다.
구체적으로 특별히:
- 솔루션은 그 자체로 완전한 프로그램이어야합니다. 그것들은 단순히 숫자를 취하는 함수가 될 수 없습니다.
- 입력은 표준 입력에서 읽어야합니다. ( "echo"에서 파이핑하거나 입력 리디렉션을 사용하는 것은 stdin에서도 오기 때문에 괜찮습니다)
- 입력은 숫자 형식이어야합니다.
- 변환 함수를 적용 할 때마다 한 줄을 인쇄해야합니다.
a is b.
여기서 a와 b는 변환에서 숫자의 숫자 형식입니다. - 마침표 (마침표)가 필요합니다!
- 마지막 줄은 당연히
4 is magic.
. - 코드는 0에서 99 까지의 모든 숫자에 대해 올바른 출력을 생성해야합니다 .
예 :
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
우승자는 또한 정확한 소스 코드 문자 수에 의한 가장 짧은 제출 입니다.
보너스
변환 함수의 각 응용 프로그램과 함께 숫자에 대한 영어 이름을 인쇄하는 코드 버전을 작성할 수도 있습니다. 원래 입력은 여전히 숫자이지만 출력 행에는 숫자의 단어 형식이 있어야합니다.
(편집) 일부 설명 :
- 해당하는 모든 경우에 단어가 양쪽에 나타나기를 원합니다. 예 :
Nine is four. Four is magic.
- 하지만 대소 문자는 신경 쓰지 않습니다. 그리고 토큰이라는 단어를 분리하는 방법은 신경 쓰지 않습니다. 비록 분리되어야하지만 :
ninety-nine
괜찮아,ninety nine
괜찮아,ninetynine
괜찮지 않습니다.
도전과 관련하여 보너스 경쟁을위한 별도의 범주로 간주하고 있으므로,이 경우 코드가 숫자 버전보다 길다는 것에 대해 걱정하지 마십시오.
각 버전에 대해 하나의 솔루션을 자유롭게 제출하십시오.