회문 반전 추가
반전 추가 과정은 생성 된 숫자가 회문이 될 때까지 숫자가 추가되는 곳입니다. 예를 들어 68로 시작하면 프로세스는 다음과 같습니다.
68 + 86 => 154 + 451 => 605 + 506 => 1111
보시다시피, 회문 번호에 도달하기 위해 3 번의 추가가 필요했습니다. 로 시작 89
하려면 24 단계가 필요합니다 ( 여기서 세부 사항 참조 ).
회문에 도달하기 전에 수행 된 대부분의 단계에 대한 세계 기록은 261이며,이 1186060307891929990
수는 10 118 보다 큰 수 를 생성합니다 . 그러나 회문을 얻을 수 없었던 숫자가 상당히 많았습니다. 이것을 라이 클렐 번호 라고 합니다 .
우리는 10 진법으로 일하고 있기 때문에 후보자라고 부를 수 있습니다. 왜냐하면이 숫자는 회문에 도달하지 않았다는 증거가 없기 때문입니다. 예를 들어, 가장 작은 10 진법 Lychrel 후보는 196 개이며 10 억 회 이상 반복되었습니다. 회문이 존재하면 10 10 8.77 보다 훨씬 큽니다 . 이에 비해, 많은 1이 원자에 새겨 져 있다면, 그것을 쓰기 위해서는 2.26772 × 10 588843575 원자의 가치가있는 원자가 필요합니다.
당신의 작업
정수 입력을 받고 회문에 도달하는 데 필요한 단계 수를 리턴하거나 인쇄하는 프로그램 또는 함수를 작성하십시오. 귀하는 Lychrel 후보를 다룰 필요가 없습니다 (즉, 귀하의 프로그램은 Lychrel 후보가 주어지면 오류를 발생 시키거나 영원히 실행될 수 있습니다).
테스트 사례 :
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
규칙
보너스
- 형식화 된 각 추가 단계를 인쇄
n + rev(n) = m
하면 점수에 0.75를 곱할 수 있습니다 . 단계 수보다 먼저 합계를 인쇄해야합니다. - 코드가 숫자가 리 크렐 후보인지 감지 할 수 있으면 점수에 0.85를 곱할 수 있습니다 . 이 경우 261 회 이상 반복되는 것이 라이 클렐 후보라고 가정하면 충분합니다. 아무 것도 반환하지 않거나 정답으로 오인 할 수없는 숫자 (예 : 0-261 범위에없는 문자열 또는 숫자)는 반환하지 마십시오. 오류는 유효한 출력으로 계산되지 않으며 (예 : 최대 재귀 깊이 초과) 감지에 사용할 수 없습니다.
- 두 보너스를 모두 완료하면 0.6을 곱하십시오 .
이것은 code-golf 이므로 바이트 수가 가장 적습니다.
이 코드 스 니펫은 Python 3에서 두 가지 보너스가 모두 포함 된 예제 솔루션을 보여줍니다.
def do(n,c=0,s=''):
m = str(n)
o = m[::-1]
if c > 261:
return "Lychrel candidate"
if m == o:
print(s)
return c
else:
d = int(m)+int(o)
s+="%s + %s = %s"%(m,o,str(d))
return do(d,c+1,s)
*0.6
보너스 위에 다른 사람은? 아니면 그냥?
10 + 01 = 11
하거나 10 + 1 = 11
아니면 우리에게 무엇입니까?
262
있습니까?