Tôi có phải là một Taxicab thứ cấp không?


13

Lý lịch

Số của Ramanujan, 1729, được gọi là số taxi do câu chuyện (có thể là tận thế) của Hardy lên một chiếc taxi đến thăm Ramanujan trong bệnh viện có số này, có vẻ nhạt nhẽo với anh ta.

Nó được biết đến như là một loại số nguyên nổi tiếng nhất được gọi là "số taxicab" có thể biểu thị bằng tổng của hai lũy thừa thứ n (của các số nguyên dương) theo hai cách khác nhau (hoặc đôi khi là 'k').

1729 là số tự nhiên nhỏ nhất có thể biểu thị bằng tổng 2 khối theo 2 cách khác nhau, làm cho nó trở thành số taxi "3,2" đầu tiên ("n, k" là chung).

Thử thách

Đưa ra một con số, quyết định xem đó có phải là "3,2" 'số taxi thứ cấp' hay không - có nghĩa là nó đáp ứng cùng một ràng buộc như 1729 (2 tổng khối duy nhất), nhưng không phải là số nguyên nhỏ nhất của "3 , Lớp 2 "(tất nhiên là năm 1729).

Ví dụ trường hợp:

1729 = 10 ^ 3 + 9 ^ 3 = 12 ^ 3 + 1 ^ 3

4104 = 15 ^ 3 + 9 ^ 3 = 16 ^ 3 + 2 ^ 3

13832 = 2 ^ 3 + 24 ^ 3 = 18 ^ 3 + 20 ^ 3

Cũng như 20683, 32832, 39312 ...

Chấm điểm

Đây là , vì vậy câu trả lời ngắn nhất trong mỗi ngôn ngữ sẽ thắng.

Mã Matlab thô để tìm các trường hợp khác bằng vũ lực:

for k = 1729:20000
    C = sum(round(mod(real((k-[1:ceil(k^(1/3))].^3).^(1/3)),1)*10000)/10000==1);
    if C > 1
        D = (mod(C,2)==0)*C/2 + (mod(C,2)==1)*((C+1)/2);
        disp([num2str(k),' has ',num2str(D),' solns'])
    end
end

Chào mừng đến với PPCG! Tôi đã chỉnh sửa câu hỏi của bạn một chút để làm cho nó rõ ràng hơn một chút. Bạn có sẵn sàng thêm một số trường hợp thử nghiệm?
sĩ523

Đúng, tôi đã vật lộn vì tôi đang làm việc và không có Matlab, nhưng đã tìm cách để Octave trực tuyến hoạt động và tìm thấy 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Có cần phải có chính xác hai cách để viết số, hoặc ít nhất hai?
John Dvorak

2
ai đó nên viết câu trả lời trên Taxi bigzaphod.github.io/Taxi
SaggingRufus

Câu trả lời:


4

05AB1E , 9 byte

Mã (rất chậm)

L3mãOQO3›


Mã (nhanh hơn nhiều), 12 byte

tL3mDδ+˜QO3›

Sử dụng mã hóa 05AB1E . Hãy thử trực tuyến!

Giải trình

t                # Square root (not necessary but added for speed)
 L               # Create a list [1 .. sqrt(input)]
  3m             # Raise to the power of 3
    D            # Duplicate
     δ+          # 2 dimensional addition
       ˜         # Deep-flatten the entire list
        Q        # Check which are equal to the input
         O       # Sum up to get the number of equalities
          3›     # Checks whether there are 4 or more equalities. In order for a number
                   to be a secondary taxicab number, there are at least two distinct
                   ways to get to that number and 4 ways when you also take reversed
                   arguments in account.

2
Chắc chắn bạn có thể lưu một byte bằng cách loại bỏ căn bậc hai. Đây là mã golf, không phải mã nhanh nhất.
phân tán

@Christian Tôi đã thêm một phiên bản mã chậm.
Ad Nam

6

Thạch , 9 byte

Tín dụng cho Erik the Outgolfer.

Œċ*3S€ċ>1

Hãy thử trực tuyến!

Điều này quá chậm đến nỗi nó thậm chí sẽ không hoạt động cho 1729trực tuyến.

Nhanh hơn nhiều, 12 byte

Tín dụng cho Dennis.

R*3fRŒċS€ċ>1

Hãy thử trực tuyến!


Tôi chỉ thử nghiệm điều này với "4104" và nó đã vượt qua. :) Không tìm thấy bất cứ điều gì ngoài điều này, nhưng đó là nhanh như chớp!
DrQuarius

Ðf⁸có thể trở thành fR. Thứ hai có thể được gỡ bỏ.
Dennis

Thứ hai thực sự có thể được loại bỏ, nhưng hoán đổi fR dẫn đến thất bại.
DrQuarius

Nhân tiện, đây là môn đánh gôn, vì vậy chúng tôi không quan tâm đến tốc độ;) nhưng bạn vẫn có thể đưa phiên bản nhanh vào liên kết TIO.
Kritixi Lithos

1
Bạn không cần quan tâm đến tốc độ, chỉ cần làm Œċ*3S€ċ>1.
Erik the Outgolfer

5

Toán học, 35 byte

Count[#^3+#2^3&~Array~{#,#},#,2]>2&

Hàm thuần túy lấy một số nguyên dương và trả về Truehoặc False.

#^3+#2^3&~Array~{#,#}lập bảng tổng hợp tất cả các khối của hai số nguyên giữa 1 và đầu vào. (Điều này sẽ nhanh hơn nhiều với một ràng buộc hợp lý trên các số nguyên được lập phương, giống như khối lập phương của đầu vào; nhưng sẽ mất các byte quý giá. Như vậy, mã mất khoảng 30 giây trên đầu vào 13832và chia tỷ lệ ít nhất theo phương pháp bậc hai trong đầu vào.) Count[...,#,2]đếm số lần đầu vào xuất hiện trong danh sách này ở cấp độ 2; nếu con số này lớn hơn 2, thì đầu vào là số bán thuế (lớn hơn 2, thay vì lớn hơn 1, vì a ^ 3 + b ^ 3 và b ^ 3 + a ^ 3 đang được tính riêng).


3

Toán học, 38 37 byte

Tr[1^PowersRepresentations[#,2,3]]>1&

-1 byte nhờ @GregMartin

Như mọi khi, có một Mathicala tích hợp sẵn cho mọi thứ.


1
Giả sử rằng OP ổn với hơn 2 đại diện, thì tôi tin rằng Tr[1^...]hoạt động thay thế Length@.
Greg Martin

2

JavaScript (ES7), 63 byte

Một hàm đệ quy tương đối nhanh mà cuối cùng trả về một boolean.

f=(n,k,r=0,x=n-k**3)=>x<0?r>3:f(n,-~k,r+=(x**(1/3)+.5|0)**3==x)

Bản giới thiệu


2

Toán học, 48 byte

Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&

đầu vào

[4104]

đầu ra

Thật


Lưu ý rằng #!=1729&&bây giờ không còn cần thiết nữa mà thông số kỹ thuật đã được làm rõ.
Greg Martin

Bạn có thể sử dụng Solvechứ không phải Reduce?
Ian Miller

tất nhiên ... 1 byte là 1 byte!
J42161217

Có thể lưu thêm một byte Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&mà thay thế &&bằng -và một chút sắp xếp lại.
Ian Miller


1

MATL ( 16 15 byte) ( 13 12 lý tưởng)

.4^:3^2XN!sG=sq

Hãy thử trực tuyến!

Giải trình:

Dựa trên giải pháp Jelly của 'Leaky Nun', chỉ cần chuyển đổi thành MATL, có thể là dư thừa ở một số phần và có thể được cải thiện:

.4^  % rough cube root of input, as maximum potential integer N.
:3^   % create array of all cubes from 1^3 up to N^3.
2XN   % do nchoosek on cube array, creating all possible pairs (k=2) to add.
!s    % transpose array and add all pairs to find sums.
G=    % find all pairs that equal the original input.
sq   % if there is more than one solution, then pass the test.

Lưu ý: đầu ra giả bao gồm 0 và -1, trong khi đầu ra trung thực là 1. Cảm ơn Luis Mendo vì đã lưu thêm một byte ở đây thay thế "s1>" bằng "sq".

Lý tưởng nhất ( 13 12 byte):

:3^2XN!sG=sq

... là đủ, nhưng đối với số lượng lớn hơn, sự cố này xảy ra trên trang của tio.run.


Bản gốc: MATL (19 byte) =============== XH.34 ^: 3 ^ 2XN! SU = s1>
DrQuarius

1
Nếu bất kỳ đầu ra trung thực là hợp lệ, bạn có thể thay thế 1>bằng q. Ngoài ra, bạn có Hthay vì Gtrong lời giải thích. Thực tế là chương trình gặp sự cố với số lượng lớn thường không liên quan để ghi điểm. Nếu nó hoạt động đủ thời gian và bộ nhớ có thể chấp nhận được, trừ khi thử thách chỉ định khác
Luis Mendo

1
Cảm ơn Luis! Tôi chưa quen với các kết quả đầu ra "trung thực", nhưng hiện tại nó hoạt động tốt. Chỉnh sửa để sửa đổi. Ngoài ra, cảm ơn vì đã tạo ra một esolang thú vị và dễ sử dụng!
DrQuarius


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.