Xuất trình tự Goodstein


18

(Điều này có thể khá cổ điển nhưng đây là bài viết đầu tiên của tôi ở đây, vì vậy tôi chưa sẵn sàng cho những thứ ưa thích)

Trình tự Goodstein được xác định cho một số đầu vào như sau:

Chọn một số bắt đầu n , đặt b = 2 và lặp lại:

  • viết n trong ký hiệu cơ sở b
  • thay thế tất cả ( b ) s thành ( b +1) s trong n và trừ 1
  • đưa ra đánh giá thập phân mới của n
  • tăng b

Ký hiệu cơ sở di truyền là một phân tách của một số trong đó cơ sở là số lớn hơn xuất hiện. Ví dụ:

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

Các chuỗi Goodstein luôn kết thúc ở mức 0 , nhưng trước tiên chúng có xu hướng khá lớn khá nhanh nên không được yêu cầu xuất chuỗi hoàn chỉnh.


Bài tập:

Đưa ra một số đầu vào ở bất kỳ định dạng hợp lý nào, công việc của bạn là xuất ra chuỗi Goodstein cho số này ít nhất cho đến khi nó đạt tới 10 ^ 25 hoặc 0

Ví dụ:

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

Chi tiết:

  • Số đầu vào có thể là một mảng, một chuỗi, một số nguyên, miễn là nó nằm trong cơ sở thập phân
  • Đầu ra tuân theo quy tắc tương tự
  • Tách các thuật ngữ trong đầu ra có thể là khoảng trắng, dòng mới hoặc bất kỳ phân tách hợp lý nào
  • Ngay khi chuỗi trở nên lớn hơn 10 ^ 25, chương trình của bạn có thể thoát bình thường, đưa ra lỗi / ngoại lệ hoặc tiếp tục (không hạn chế)
  • Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng
  • Tất nhiên, sơ hở tiêu chuẩn bị cấm
  • Python không làm việc ví dụ ở đây

2
Bạn có thể thêm từng bước của một trường hợp thử nghiệm không?
Rod

5
Chào mừng đến với PPCG! Thử thách đầu tiên tốt đẹp!
FantaC


2
@ RjanJohansen Vâng, lỗi là int(q/base.b), q%base.bcần phải q//base.b, q%base.b(hoặc đơn giản divmod(q, base.b)) để tránh các lỗi dấu phẩy động.
Anders Kaseorg

2
Có phải ít nhất cho đến khi nó đạt đến 10 ^ 25 hoặc 0 không có nghĩa là chương trình được phép tiếp tục sau khi nó đạt 0 (có lẽ với −1, 2, −3, lỗi)?
Anders Kaseorg

Câu trả lời:


3

Bình thường , 28 26 byte

.V2JbL&bs.e*^hJykb_jbJ=ty

Các dòng mới theo dõi là đáng kể.

Hãy thử trực tuyến! (Liên kết này bao gồm một phần bổ sung Qkhông cần thiết cho phiên bản hiện tại của Pyth.)

Làm thế nào nó hoạt động

.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

Điều quan trọng ylà được xác định lại trong mỗi lần lặp lặp để ngăn việc ghi nhớ qua các thay đổi đối với biến toàn cục J.


3

Haskell , 77 byte

(&2)là một hàm ẩn danh lấy Integervà trả về một danh sách (có khả năng rất dài) của Integers, sử dụng như (&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)

Hãy thử trực tuyến! (cắt ở 10^25.)

Làm thế nào nó hoạt động

  • (&2)bắt đầu trình tự với cơ sở 2.
  • n&btính toán sau đó bắt đầu với số lượng nvà cơ sở b.
    • Nó dừng lại với một danh sách trống nếu n<0, thường xảy ra bước sau n==0.
    • Mặt khác, nó nchuẩn bị cho danh sách được trả về đệ quy bằng biểu thức (0?n-1)&(b+1).
  • ?là một toán tử hàm cục bộ. 0?nđưa ra kết quả của việc chuyển đổi nsang cơ sở di truyền b, sau đó tăng cơ sở ở mọi nơi.
    • Chuyển đổi đệ quy với etheo dõi biến số của số mũ hiện tại. e?nchuyển đổi số n*b^e.
    • Đệ quy dừng lại 0khi n==0.
    • Nếu không, nó chia ntheo cơ sở b.
      • (e+1)?div n b xử lý đệ quy cho thương số và số mũ cao hơn tiếp theo.
      • mod n b*(b+1)^0?exử lý phần còn lại (là chữ số tương ứng với số mũ hiện tại e), mức tăng của cơ sở và chuyển đổi theo số mũ hiện tại theo hướng 0?e.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.