¿Soy un taxi secundario?

13

Antecedentes

El número de Ramanujan, 1729, se llama número de taxi debido a la historia (posiblemente apócrifa) de que Hardy abordaba un taxi para visitar a Ramanujan en el hospital con este número, que le parecía insípido.

Desde entonces es conocido como el más famoso de una clase de enteros conocidos como "números de taxis" que se pueden expresar como la suma de dos enésimas potencias (de enteros positivos) de dos maneras (o a veces 'k') diferentes.

1729 es el número natural más pequeño expresable como la suma de 2 cubos de 2 maneras diferentes, por lo que es el primer número de taxi "3,2" ("n, k" es general).

Desafío

Dado un número, decida si es un "número de taxi secundario" 3,2 ", lo que significa que cumple la misma restricción que 1729 (2 sumas únicas de cubos), pero no tiene que ser el número entero más pequeño del" 3 , Clase de 2 "(eso es 1729, por supuesto).

Casos de ejemplo:

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

Así como 20683, 32832, 39312 ...

Puntuación

Este es el , por lo que gana la respuesta más corta en cada idioma.

Código áspero de Matlab para encontrar otros casos por fuerza 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
DrQuarius
fuente
Bienvenido a PPCG! Edité su pregunta un poco para que quede un poco más clara. ¿Estaría dispuesto a agregar algunos casos de prueba?
musicman523
Sí, estaba luchando porque estoy en el trabajo y no tengo Matlab, pero logré poner a Octave en línea para trabajar y encontré 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius
2
A001235
Shaggy
1
¿Es necesario que haya exactamente dos formas de escribir el número, o al menos dos?
John Dvorak
2
alguien debería escribir una respuesta en Taxi bigzaphod.github.io/Taxi
SaggingRufus

Respuestas:

4

05AB1E , 9 bytes

Código (muy lento)

L3mãOQO3›


Código (mucho más rápido), 12 bytes

tL3mDδ+˜QO3›

Utiliza la codificación 05AB1E . Pruébalo en línea!

Explicación

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
fuente
2
Seguramente podría guardar un byte quitando la raíz cuadrada. Este es el código de golf, no el código más rápido.
dispersión
@ Christian He agregado una versión lenta del código.
Adnan
6

Jalea , 9 bytes

Créditos a Erik el Outgolfer.

Œċ*3S€ċ>1

Pruébalo en línea!

Esto es demasiado lento y ni siquiera funcionará en 1729línea.

Mucho más rápido, 12 bytes

Créditos a Dennis.

R*3fRŒċS€ċ>1

Pruébalo en línea!

Monja permeable
fuente
Acabo de probar esto con "4104" y pasó. :) No he encontrado nada más allá de esto todavía, ¡pero fue increíblemente rápido!
DrQuarius
Ðf⁸puede llegar a ser fR. El segundo puede ser eliminado.
Dennis
El segundo ⁸ puede eliminarse de hecho, pero el intercambio de fR conduce al fracaso.
DrQuarius
Por cierto, este es el código de golf, por lo que no nos importa la velocidad;) pero aún puede incluir la versión rápida en el enlace TIO.
Kritixi Lithos
1
No necesitas preocuparte por la velocidad, solo hazlo Œċ*3S€ċ>1.
Erik the Outgolfer
5

Mathematica, 35 bytes

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

Función pura tomando un entero positivo y regresando Trueo False.

#^3+#2^3&~Array~{#,#}tabula todas las sumas de cubos de dos enteros entre 1 y la entrada. (Esto sería mucho más rápido con un límite sensible en los enteros a ser cubicados, como la raíz cúbica de la entrada; pero eso tomaría bytes preciosos. Como es, el código tarda unos 30 segundos en la entrada 13832y escala al menos cuadráticamente en la entrada.) Count[...,#,2]cuenta cuántas veces aparece la entrada en esta lista en el nivel de nido 2; si este número es mayor que 2, entonces la entrada es un número semi-taxi (mayor que 2, en lugar de mayor que 1, ya que a ^ 3 + b ^ 3 y b ^ 3 + a ^ 3 se cuentan por separado).

Greg Martin
fuente
3

Mathematica, 38 37 bytes

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

-1 byte gracias a @GregMartin

Como siempre, hay un Mathematica incorporado a todo.

JungHwan Min
fuente
1
Suponiendo que el OP está bien con más de 2 representaciones, entonces creo que Tr[1^...]funciona en lugar de Length@.
Greg Martin
2

JavaScript (ES7), 63 bytes

Una función recursiva relativamente rápida que finalmente devuelve un valor 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)

Manifestación

Arnauld
fuente
2

Mathematica, 48 bytes

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

entrada

[4104]

salida

Cierto

J42161217
fuente
Tenga en cuenta que #!=1729&&ya no es necesario ahora que la especificación se ha aclarado.
Greg Martin
¿Podrías usar en Solvelugar de Reduce?
Ian Miller
por supuesto ... ¡1 byte es 1 byte!
J42161217
Se puede guardar un byte más con Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&que sustituye a la &&de -y un poco de reordenar.
Ian Miller
1

Python, 71 bytes

Pruébalo en línea

lambda x:len([i for i in range(x)for j in range(i,x)if i**3+j**3==x])>1
Zarigüeya muerta
fuente
1

MATL ( 16 15 bytes) ( 13 12 idealmente)

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

Pruébalo en línea!

Explicación:

Basado en la solución Jelly de 'Leaky Nun', recién convertida a MATL, probablemente redundante en algunas partes y se puede mejorar:

.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: las salidas falsas incluyen 0 y -1, mientras que la salida verdadera es 1. Gracias a Luis Mendo por guardar un byte adicional aquí reemplazando "s1>" con "sq".

Idealmente ( 13 12 bytes):

:3^2XN!sG=sq

... es suficiente, pero para números más grandes esto se bloquea en la página de tio.run.

DrQuarius
fuente
Original: MATL (19 bytes) =============== XH.34 ^: 3 ^ 2XN! SH = s1>
DrQuarius
1
Si cualquier resultado verdadero es válido, puede reemplazarlo 1>por q. Además, tienes en Hlugar de Gen la explicación. El hecho de que el programa se bloquee para grandes números generalmente no es relevante para la puntuación. Si funciona con suficiente tiempo y memoria, eso es aceptable, a menos que el desafío especifique lo contrario
Luis Mendo
1
Gracias luis Soy nuevo en las salidas "veraces", pero esto funciona muy bien ahora. Editado para enmendar. Además, ¡gracias por crear un esolang tan divertido y fácil de usar!
DrQuarius
0

Ruby , 52 bytes

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

Pruébalo en línea!

Dado que esta versión crea una masiva n matriz de tamaño 2 , falla en todos los casos de prueba verdaderos superiores a 1729, aquí hay una versión modificada que tiene un tamaño de matriz más pequeño de aproximadamente n 2/3 , que verifica con éxito al menos hasta 31392.

Pruébalo en línea! (modificado)

Tinta de valor
fuente