Goodstein 시퀀스 출력


18

(이것은 꽤 고전적이지만 여기의 첫 번째 게시물이므로 아직 멋진 것을 준비하지 못했습니다)

굿 스타 시퀀스는 다음과 같이 입력 된 숫자에 대해 정의된다 :

시작 번호 선택 N을 ,하자 B = 2, 반복 :

  • 기록 N heriditary베이스의 B의 표기
  • n 에서 모든 ( b )를 ( b +1)로 대체하고 1을 뺍니다.
  • n 의 새로운 소수 평가를 출력
  • 증가 b

유전 기준 표기법은 기준이 더 큰 숫자로 표시되는 숫자의 분해입니다. 예 :

  • 83 HB3에서 : 3^(3+1)+2
  • 226 HB2에서 : 2^(2^(2+1))+2^(2+1)+2

Goodstein 염기 서열은 항상 0으로 끝나지만 처음에는 상당히 빠른 경향이 있으므로 완전한 염기 서열을 출력하도록 요구되지 않습니다.


직무:

합리적인 형식의 입력 번호가 주어지면 적어도 10 ^ 25 또는 0에 도달 할 때까지이 번호에 대한 Goodstein 시퀀스를 출력해야합니다.

예 :

Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990

세부:

  • 입력 숫자는 십진법에 따라 배열, 문자열, 정수가 될 수 있습니다.
  • 출력은 동일한 규칙을 따릅니다
  • 출력에서 용어 분리는 공백, 줄 바꾸기 또는 합리적인 분리 일 수 있습니다.
  • 시퀀스가 10 ^ 25보다 커지면 프로그램이 정상적으로 종료되거나 오류 / 예외가 발생하거나 계속 될 수 있습니다 (제한 없음).
  • 이것은 이므로 가장 짧은 답변 (바이트)이 이깁니다.
  • 물론 표준 허점 은 금지되어 있습니다.
  • 여기에 파이썬 ungolfed 작업 예제

2
하나의 테스트 사례를 단계별로 추가 할 수 있습니까?
Rod

5
PPCG에 오신 것을 환영합니다! 좋은 첫 도전!
FantaC


2
@ ØrjanJohansen 그래, 버그는 부동 소수점 오류를 피하기 위해 (또는 간단히 ) int(q/base.b), q%base.b해야한다는 것 입니다. q//base.b, q%base.bdivmod(q, base.b)
Anders Kaseorg

2
“적어도 10 ^ 25 또는 0에 도달 할 때까지”는 프로그램이 0에 도달 한 후 (예 : -1, -2, -3,…) 계속 될 수 있음을 의미합니까?
Anders Kaseorg

답변:


3

Pyth , 28 26 바이트

.V2JbL&bs.e*^hJykb_jbJ=ty

후행 줄 바꿈이 중요합니다.

온라인으로 사용해보십시오! 이 링크에는 Q현재 버전의 Pyth에서 필요하지 않은 추가 링크가 포함되어 있습니다.

작동 원리

.V2JbL&bs.e*^hJykb_jbJ=ty
.V2                          for b in [2, 3, 4, ...]:
   Jb                          assign J = b
     L                         def y(b):
      &b                         b and
                   jbJ             convert b to base J
                  _                reverse
         .e                        enumerated map for values b and indices k:
             hJ                      J + 1
            ^  yk                    to the power y(k)
           *     b                   times b
(newline)                      print Q (autoinitialized to the input)
                        y      y(Q)
                       t       subtract 1
                      =        assign back to Q

y전역 변수 변경에 대한 메모가 방지되도록 각 루프 반복에서 재정의 하는 것이 중요 합니다 J.


3

하스켈 , 77 바이트

(&2)익명 함수는 복용 Integer과의 (잠재적으로 매우 긴)에서 복귀 Integer로서 사용들 (&2) 13.

(&2)
n&b|n<0=[]|let _?0=0;e?n=(e+1)?div n b+mod n b*(b+1)^0?e=n:(0?n-1)&(b+1)

온라인으로 사용해보십시오! (에서 차단됩니다 10^25.)

작동 원리

  • (&2)base로 시퀀스를 시작합니다 2.
  • n&bnumber n와 base로 시작하는 하위 시퀀스를 계산합니다 b.
    • 이 경우 빈 목록을 중단 n<0일반적으로 이후 단계를 발생, n==0.
    • 그렇지 않으면, n표현식이 재귀 적으로 리턴 한 목록 앞에 추가 됩니다 (0?n-1)&(b+1).
  • ?로컬 함수 연산자입니다. 유전 base 0?n로 변환 한 다음 어디에서나베이스를 증가 시키는 결과를 제공합니다 . nb
    • e현재 지수를 추적 하는 변수를 사용하여 변환이 반복됩니다 . e?n숫자를 변환합니다 n*b^e.
    • 로 재귀가 중단 0됩니다 n==0.
    • 그렇지 않으면 n밑 으로 나눕니다 b.
      • (e+1)?div n b 지수 및 다음으로 높은 지수에 대한 재귀를 처리합니다.
      • mod n b*(b+1)^0?e나머지 (현재 지수에 해당하는 숫자 e), 기본 증분, 및 현재 지수를 유 전적으로 변환하여를 처리 0?e합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.