Thay đổi cơ sở di truyền


9

Lý lịch

Trong thử thách này, biểu diễn cơ sởb của một số nguyên nlà một biểu thức ndưới dạng tổng lũy ​​thừa của b, trong đó mỗi thuật ngữ xảy ra tại hầu hết các b-1thời điểm. Ví dụ: 4đại diện cơ sở của 2015

4^5 + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3

Bây giờ, biểu diễn cơ sở di truyềnb của nthu được bằng cách chuyển đổi số mũ thành bbiểu diễn cơ sở của chúng , sau đó chuyển đổi số mũ của chúng, và cứ thế đệ quy. Do đó, cơ sở di truyền 4của đại diện 2015

4^(4 + 1) + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3

Như một ví dụ phức tạp hơn, cơ sở di truyền - 3đại diện của

7981676788374679859068493351144698070458

2*3^(3^(3 + 1) + 2) + 3 + 1

Các thay đổi cơ sở di truyền của ntừ bđểc , ký hiệu H(b, c, n), là số thu được bằng cách lấy cơ sở- cha truyền con nối bđại diện của n, thay thế tất cả các bbằng cvà đánh giá sự biểu hiện kết quả. Ví dụ: giá trị của

H(3, 2, 7981676788374679859068493351144698070458)

2*2^(2^(2 + 1) + 2) + 2 + 1 = 2051

Các thách thức

Bạn được cung cấp như là đầu vào ba số nguyên b, c, n, mà bạn có thể giả định n >= 0b, c > 1. Đầu ra của bạn là H(b, c, n). Số byte ngắn nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép. Bạn có thể viết một hàm hoặc một chương trình đầy đủ. Bạn phải có khả năng xử lý các đầu vào và đầu ra lớn tùy ý (bignums).

Các trường hợp thử nghiệm

4 2 3 -> 3
2 4 3 -> 5
2 4 10 -> 1028
4 4 40000 -> 40000
4 5 40000 -> 906375
5 4 40000 -> 3584
3 2 7981676788374679859068493351144698070458 -> 56761
2 3 2051 -> 35917545547686059365808220080151141317047

Sự thật thú vị

Đối với bất kỳ số nguyên nào n, chuỗi thu được bởi

n1 = n
n2 = H(2, 3, n1) - 1
n3 = H(3, 4, n2) - 1
n4 = H(4, 5, n3) - 1
....

cuối cùng đạt tới 0. Điều này được gọi là định lý của Goodstein .

Câu trả lời:


6

CJam, 60 58 45 43 41 38 36 byte

Cảm ơn Trình tối ưu hóa đã lưu hai byte.

l~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~

Kiểm tra nó ở đây.

Đưa đầu vào theo thứ tự n b c.

Bạn có thể sử dụng điều này để chạy thử tất cả các trường hợp thử nghiệm:

"3 4 2 
3 2 4 
10 2 4 
40000 4 4 
40000 4 5 
40000 5 4 
7981676788374679859068493351144698070458 3 2 
2051 2 3 "N/
{
~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~
p}/

Giải trình

Đây là một triển khai khá trực tiếp của quá trình được giải thích trong thử thách, ngoại trừ việc tôi xen kẽ mở rộng cơ sở đệ quy, thay thế cơ sở và tính toán kết quả cuối cùng:

l~:C;:B;{Bb)1$,,@f{1$~=C@)F#*+}~}:F~
l~:C;:B;                             "Read and evaluate input, store b and c in B and C.";
        {                       }:F  "Define a block F. This performs the required conversion.";
         Bb                          "Get digits of input number in base B.";
           )                         "Split off 0-power digit.";
            1$,                      "Copy remaining digits. Get their length n.";
               ,                     "Make array [0 1 ... n-1].";
                @                    "Pull up remaining digits.";
                 f{           }      "Map this block onto the range, passing in the digits
                                      as a second argument each time.";
                   1$~=              "Copy current i, bitwise complement, access digit array.
                                      This accesses the digits in reverse order.";
                       C             "Push the new base C.";
                        @)           "Pull up current i and increment to get power.";
                          F          "Apply F recursively.":
                           ~         "Raise C to the resulting power.";
                            *        "Multiply by digit.";
                             +       "Add to running total.";
                               ~     "The result will be in an array. Unwrap it.";
                                   ~ "Execute F on the input n.";

8

Con trăn 2, 55

H=lambda b,c,n,s=0:n and n%b*c**H(b,c,s)+H(b,c,n/b,s+1)

Một giải pháp đệ quy. Giống như thuật toán đệ quy để chuyển đổi giữa các cơ sở, ngoại trừ nó cũng đệ quy theo số mũ.

Chúng tôi chia nthành hai phần, chữ số hiện tại n%bvà tất cả các chữ số khác n/b. Giá trị địa điểm hiện tại được lưu trữ trong tham số tùy chọn s. Chữ số hiện tại được chuyển đổi thành cơ sở cvới c**và số mũ sđược chuyển đổi đệ quy. Phần còn lại sau đó được chuyển đổi theo cùng một cách, +H(b,c,n/b,s+1)nhưng giá trị địa điểm scao hơn một.

Không giống như chuyển đổi cơ sở, chuyển đổi cơ sở di truyền yêu cầu ghi nhớ giá trị địa điểm hiện tại trong đệ quy để chuyển đổi.

Để dễ đọc, đây là những gì nó trông giống như khi bclà hằng số toàn cầu cố định.

H=lambda n,s=0:n and n%b*c**H(s)+H(n/b,s+1)

Tôi đã đăng bài này chủ yếu là vì tôi không nhận ra bạn có thể sử dụng các đối số được đặt tên trong pyth : D(GHY=Z0)R&Y+*%YG^H(GHZ)(GH/YGhZ. Cảm thấy tự do để thêm nó nếu bạn muốn (tôi tắt để lời khuyên cho việc chơi golf trong pyth: D)
FryAmTheEggman
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.