Czy jestem dodatkowym taksówką?

13

tło

Numer Ramanujana, 1729, jest nazywany numerem taksówki z powodu (prawdopodobnie apokryficznej) opowieści o tym, jak Hardy wsiada do taksówki i odwiedza Ramanujana w szpitalu o tym numerze, co wydawało mu się mdłe.

Od tego czasu znany jest jako najbardziej znany z klasy liczb całkowitych zwanych „liczbami taksówek”, które można wyrazić jako sumę dwóch n-tych potęg (dodatnich liczb całkowitych) na dwa (lub czasami „k”) różne sposoby.

1729 jest najmniejszą liczbą naturalną wyrażaną jako suma 2 kostek na 2 różne sposoby, co czyni ją pierwszą liczbą taksówek „3,2” („n, k” jest ogólna).

Wyzwanie

Biorąc pod uwagę liczbę, zdecyduj, czy jest to wtórna liczba taksówek „3,2” - co oznacza, że ​​spełnia to samo ograniczenie co 1729 (2 unikalne sumy kostek), ale nie musi być najmniejszą taką liczbą całkowitą z „3 , Klasa 2 "(oczywiście 1729).

Przykładowe przypadki:

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

Jak również 20683, 32832, 39312 ...

Punktacja

To jest , więc wygrywa najkrótsza odpowiedź w każdym języku.

Szorstki kod Matlab, aby znaleźć inne przypadki brutalną siłą:

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
DrQuarius
źródło
Witamy w PPCG! Zredagowałem trochę twoje pytanie, aby było bardziej jasne. Czy byłbyś skłonny dodać kilka przypadków testowych?
musicman523
Tak, walczyłem, ponieważ jestem w pracy i nie mam Matlaba, ale udało mi się uruchomić Octave online do pracy i znalazłem 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius
2
A001235
Kudłaty
1
Czy muszą istnieć dokładnie dwa sposoby wpisania numeru, czy przynajmniej dwa?
John Dvorak
2
ktoś powinien napisać odpowiedź w Taxi bigzaphod.github.io/Taxi
SaggingRufus

Odpowiedzi:

4

05AB1E , 9 bajtów

Kod (bardzo wolny)

L3mãOQO3›


Kod (znacznie szybciej), 12 bajtów

tL3mDδ+˜QO3›

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Wyjaśnienie

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.
Adnan
źródło
2
Z pewnością możesz zapisać bajt, usuwając pierwiastek kwadratowy. To jest kod-golf, a nie najszybszy kod.
rozproszyć
@Christian Dodałem powolną wersję kodu.
Adnan
6

Galaretka , 9 bajtów

Kredyty dla Erika the Outgolfer.

Œċ*3S€ċ>1

Wypróbuj online!

Jest to zbyt wolne, aby nawet nie działało w 1729trybie online.

Znacznie szybciej, 12 bajtów

Kredyty dla Dennisa.

R*3fRŒċS€ċ>1

Wypróbuj online!

Leaky Nun
źródło
Właśnie przetestowałem to z „4104” i przeszło pomyślnie. :) Nie znalazłem jeszcze nic poza tym, ale to było błyskawiczne!
DrQuarius
Ðf⁸może zostać fR. Drugi można usunąć.
Dennis
Drugie ⁸ można rzeczywiście usunąć, ale zamiana fR prowadzi do awarii.
DrQuarius
Nawiasem mówiąc, jest to kod-golf, więc nie dbamy o szybkość;), ale nadal możesz dołączyć szybką wersję do linku TIO.
user41805
1
Nie musisz dbać o szybkość, po prostu zrób to Œċ*3S€ċ>1.
Erik the Outgolfer
5

Mathematica, 35 bajtów

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

Czysta funkcja przyjmująca dodatnią liczbę całkowitą i zwracająca Truelub False.

#^3+#2^3&~Array~{#,#}zestawia wszystkie sumy kostek dwóch liczb całkowitych od 1 do wejścia. (Byłoby to znacznie szybsze, gdyby rozsądne ograniczenie na liczbach całkowitych, które mają być pokrojone w kostki, podobnie jak pierwiastek sześcienny wejścia, ale zajęłoby to cenne bajty. W tej chwili kod zajmuje około 30 sekund na wejściu 13832i skaluje się co najmniej kwadratowo w danych wejściowych.) Count[...,#,2]zlicza, ile razy dane wejściowe pojawiają się na tej liście na poziomie gniazda 2; jeżeli liczba ta jest większa niż 2, wówczas wejściem jest liczba pół-taksówek (większa niż 2, a nie większa niż 1, ponieważ ^ 3 + b ^ 3 i b ^ 3 + a ^ 3 są liczone osobno).

Greg Martin
źródło
3

Mathematica, 38 37 bajtów

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

-1 bajt dzięki @GregMartin

Jak zawsze we wszystkim jest wbudowana Mathematica.

JungHwan Min
źródło
1
Zakładając, że PO jest w porządku z więcej niż 2 reprezentacjami, to wierzę, że Tr[1^...]działa zamiast Length@.
Greg Martin
2

JavaScript (ES7), 63 bajty

Stosunkowo szybka funkcja rekurencyjna, która ostatecznie zwraca wartość logiczną.

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

Próbny

Arnauld
źródło
2

Mathematica, 48 bajtów

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

Wejście

[4104]

wynik

Prawdziwe

J42161217
źródło
Pamiętaj, #!=1729&&że po wyjaśnieniu specyfikacji nie jest już konieczne.
Greg Martin
Czy mógłbyś użyć Solvezamiast Reduce?
Ian Miller
oczywiście ... 1 bajt to 1 bajt!
J42161217
Można zapisać jeden bajt z Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&która zastępuje &&się -i trochę przegrupowanie.
Ian Miller
1

Python, 71 bajtów

Wypróbuj online

lambda x:len([i for i in range(x)for j in range(i,x)if i**3+j**3==x])>1
Dead Possum
źródło
1

MATL ( 16 15 bajtów) ( idealnie 13 12)

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

Wypróbuj online!

Wyjaśnienie:

Oparty na galaretowym rozwiązaniu „Leaky Nun”, właśnie przekonwertowany na MATL, prawdopodobnie w niektórych częściach zbędny i można go ulepszyć:

.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.

Uwaga: Falsy zawiera 0 i -1, a prawda to 1. Dzięki Luisowi Mendo za zaoszczędzenie tutaj dodatkowego bajtu i zastąpienie „s1>” „sq”.

Idealnie ( 13 12 bajtów):

:3^2XN!sG=sq

... wystarczy, ale przy większych liczbach ulega awarii na stronie tio.run.

DrQuarius
źródło
Oryginał: MATL (19 bajtów) =============== XH.34 ^: 3 ^ 2XN! SH = s1>
DrQuarius
1
Jeżeli którykolwiek wyjście truthy jest ważny, można zastąpić 1>przez q. HZamiast tego masz Gwyjaśnienie. Fakt, że program ulega awarii dla dużych liczb, jest zwykle nieistotny dla oceny. Jeśli działa, biorąc pod uwagę wystarczającą ilość czasu i pamięci, jest to dopuszczalne, chyba że wyzwanie stanowi inaczej
Luis Mendo
1
Dzięki, Luis! Jestem nowy w „prawdziwych” wyjściach, ale teraz działa to dobrze. Edytowane w celu zmiany. Dziękujemy również za stworzenie tak przyjemnego i łatwego w użyciu esolangu!
DrQuarius
0

Ruby , 52 bajty

->n{r=*1..n;r.product(r).count{|i,j|i**3+j**3==n}>1}

Wypróbuj online!

Ponieważ ta wersja tworzy ogromną tablicę wielkości n 2 , nie powiedzie się na wszystkich prawdziwych testach wyższych niż 1729, tutaj jest zmodyfikowana wersja, która ma mniejszą wielkość tablicy około n 2/3 , która z powodzeniem sprawdza co najmniej do 31392.

Wypróbuj online! (zmodyfikowany)

Wartość tuszu
źródło