Sono un taxi secondario?


13

sfondo

Il numero di Ramanujan, 1729, è chiamato un numero di taxi causa della storia (forse apocrifa) di Hardy che sale su un taxi per visitare Ramanujan in ospedale con questo numero, che gli sembrava insignificante.

Da allora è noto come il più famoso di una classe di numeri interi noti come "numeri di taxi" che sono espressi come la somma di due ennesimi poteri (di numeri interi positivi) in due (o talvolta "k") modi diversi.

1729 è il più piccolo numero naturale esprimibile come la somma di 2 cubi in 2 modi diversi, rendendolo il primo numero di taxi "3,2" ("n, k" è generale).

Sfida

Dato un numero, decidi se si tratta di un "numero di taxi" secondario "3,2" - nel senso che soddisfa lo stesso vincolo del 1729 (2 somme univoche di cubi), ma non deve essere il numero intero più piccolo del "3 , Classe 2 "(essendo questo il 1729, ovviamente).

Casi di esempio:

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

Oltre a 20683, 32832, 39312 ...

punteggio

Questo è , quindi vince la risposta più breve in ogni lingua.

Codice Matlab approssimativo per trovare altri casi con forza bruta:

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

Benvenuti in PPCG! Ho modificato un po 'la tua domanda per renderla un po' più chiara. Saresti disposto ad aggiungere alcuni casi di test?
musicman523

Sì, stavo lottando perché sono al lavoro e non ho Matlab, ma sono riuscito a far funzionare Octave online e ho trovato 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Devono esserci esattamente due modi per scrivere il numero, o almeno due?
John Dvorak,

2
qualcuno dovrebbe scrivere una risposta in Taxi bigzaphod.github.io/Taxi
SaggingRufus

Risposte:


4

05AB1E , 9 byte

Codice (molto lento)

L3mãOQO3›


Codice (molto più veloce), 12 byte

tL3mDδ+˜QO3›

Utilizza la codifica 05AB1E .Provalo online!

Spiegazione

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
Sicuramente potresti salvare un byte rimuovendo la radice quadrata. Questo è code-golf, non il codice più veloce.
disperde il

@Christian Ho aggiunto una versione lenta del codice.
Adnan,

6

Gelatina , 9 byte

Crediti a Erik the Outgolfer.

Œċ*3S€ċ>1

Provalo online!

È troppo lento per non funzionare nemmeno 1729online.

Molto più veloce, 12 byte

Crediti a Dennis.

R*3fRŒċS€ċ>1

Provalo online!


Ho appena provato questo con "4104" ed è passato. :) Non ne ho ancora trovato oltre, ma è stato velocissimo!
DrQuarius,

Ðf⁸può diventare fR. Il secondo può essere rimosso.
Dennis,

Il secondo ⁸ può essere effettivamente rimosso, ma lo scambio fR porta al fallimento.
DrQuarius,

A proposito, questo è code-golf quindi non ci interessa la velocità;) ma puoi comunque includere la versione veloce nel link TIO.
user41805

1
Non devi preoccuparti della velocità, fallo e basta Œċ*3S€ċ>1.
Erik the Outgolfer,

5

Mathematica, 35 byte

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

Funzione pura che prende un numero intero positivo e ritorna Trueo False.

#^3+#2^3&~Array~{#,#}tabula tutte le somme di cubi di due numeri interi tra 1 e l'input. (Questo sarebbe molto più veloce con un limite sensibile sugli interi da cubare, come la radice cubica dell'input; ma ciò richiederebbe preziosi byte. Così com'è, il codice impiega circa 30 secondi sull'input 13832e si ridimensiona almeno quadraticamente nell'input.) Count[...,#,2]conta quante volte l'input appare in questo elenco a livello di nido 2; se questo numero è maggiore di 2, allora l'ingresso è un numero semi-taxi (maggiore di 2, anziché maggiore di 1, poiché a ^ 3 + b ^ 3 e b ^ 3 + a ^ 3 vengono contati separatamente).


3

Mathematica, 38 37 byte

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

-1 byte grazie a @GregMartin

Come sempre, c'è una Mathematica integrata in tutto.


1
Supponendo che l'OP sia ok con più di 2 rappresentazioni, allora credo che Tr[1^...]funzioni al posto di Length@.
Greg Martin,

2

JavaScript (ES7), 63 byte

Una funzione ricorsiva relativamente veloce che alla fine restituisce un valore booleano.

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

dimostrazione


2

Mathematica, 48 byte

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

ingresso

[4104]

produzione

Vero


Si noti che #!=1729&&non è più necessario ora che le specifiche sono state chiarite.
Greg Martin,

Potresti usare Solvepiuttosto che Reduce?
Ian Miller,

ovviamente ... 1 byte è 1 byte!
J42161217

Può salvare un altro byte con il Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&quale sostituisce &&con -e un po 'di riorganizzazione.
Ian Miller,


1

MATL ( 16 15 byte) ( 13 12 idealmente)

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

Provalo online!

Spiegazione:

Basato sulla soluzione Jelly di 'Leaky Nun', appena convertito in MATL, probabilmente ridondante in alcune parti e può essere migliorato:

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

Nota: gli output falsy includono 0 e -1, mentre l'output truey è 1. Grazie a Luis Mendo per aver salvato un byte extra qui sostituendo "s1>" con "sq".

Idealmente ( 13 12 byte):

:3^2XN!sG=sq

... è sufficiente, ma per numeri più grandi questo si blocca sulla pagina di tio.run.


Originale: MATL (19 byte) =============== XH.34 ^: 3 ^ 2XN! SH = s1>
DrQuarius

1
Se è valido un output veritiero, puoi sostituirlo 1>con q. Inoltre, hai Hinvece Gnella spiegazione. Il fatto che il programma si arresti in modo anomalo per un numero elevato di solito è irrilevante per il punteggio. Se funziona con abbastanza tempo e memoria accettabili, a meno che la sfida non specifichi diversamente
Luis Mendo,

1
Grazie Luis! Sono nuovo delle uscite "veritiere", ma ora funziona bene. Modificato per modificare. Inoltre, grazie per aver creato un esolang così divertente e facile da usare!
DrQuarius,

0

Rubino , 52 byte

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

Provalo online!

Poiché questa versione crea un enorme array di dimensioni n 2 , non riesce su tutte le vere testcase superiori a 1729, ecco una versione modificata che ha una dimensione dell'array più piccola di circa n 2/3 , che controlla con successo fino a 31392.

Provalo online! (modificata)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.