Suis-je un taxi secondaire?


13

Contexte

Le numéro de Ramanujan, 1729, est appelé numéro de taxi en raison de l'histoire (peut-être apocryphe) de Hardy embarquant dans un taxi pour visiter Ramanujan à l'hôpital avec ce numéro, qui lui semblait fade.

Il est depuis connu comme le plus célèbre d'une classe d'entiers connus sous le nom de "nombres de taxis" qui sont exprimables comme la somme de deux nièmes puissances (d'entiers positifs) de deux (ou parfois "k") manières différentes.

1729 est le plus petit nombre naturel exprimable comme la somme de 2 cubes de 2 manières différentes, ce qui en fait le premier nombre de taxis "3,2" ("n, k" étant général).

Défi

Étant donné un nombre, décidez s'il s'agit d'un "3,2" numéro de taxi secondaire "- ce qui signifie qu'il remplit la même contrainte que 1729 (2 sommes uniques de cubes), mais ne doit pas nécessairement être le plus petit entier de ce type" 3 , Classe 2 "(soit 1729, bien sûr).

Exemples de cas:

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

Ainsi que 20683, 32832, 39312 ...

Notation

C'est le , donc la réponse la plus courte dans chaque langue l'emporte.

Code Matlab approximatif pour trouver d'autres cas par force brute:

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

Bienvenue chez PPCG! J'ai modifié un peu votre question pour la rendre un peu plus claire. Seriez-vous prêt à ajouter des cas de test?
musicman523

Oui, je luttais parce que je suis au travail et que je n'ai pas Matlab, mais j'ai réussi à faire fonctionner Octave en ligne et j'ai trouvé 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Doit-il y avoir exactement deux façons d'écrire le nombre, ou au moins deux?
John Dvorak

2
quelqu'un devrait écrire une réponse dans Taxi bigzaphod.github.io/Taxi
SaggingRufus

Réponses:


4

05AB1E , 9 octets

Code (très lent)

L3mãOQO3›


Code (beaucoup plus rapide), 12 octets

tL3mDδ+˜QO3›

Utilise le encodage 05AB1E . Essayez-le en ligne!

Explication

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
Vous pourriez sûrement enregistrer un octet en supprimant la racine carrée. C'est du code-golf, pas du code le plus rapide.
scatter

@Christian J'ai ajouté une version lente du code.
Adnan

6

Gelée , 9 octets

Remerciements à Erik l'Outgolfer.

Œċ*3S€ċ>1

Essayez-le en ligne!

C'est trop lent pour que cela ne fonctionne même pas pour en 1729ligne.

Beaucoup plus rapide, 12 octets

Crédits à Dennis.

R*3fRŒċS€ċ>1

Essayez-le en ligne!


Je viens de tester cela avec "4104" et c'est réussi. :) Je n'en ai pas encore trouvé au-delà, mais c'était rapide comme l'éclair!
DrQuarius

Ðf⁸peut devenir fR. Le second peut être supprimé.
Dennis

Le deuxième ⁸ peut en effet être supprimé, mais le swap fR conduit à l'échec.
DrQuarius

Au fait, c'est du code-golf donc nous ne nous soucions pas de la vitesse;) mais vous pouvez toujours inclure la version rapide dans le lien TIO.
user41805

1
Vous n'avez pas besoin de vous soucier de la vitesse, faites-le Œċ*3S€ċ>1.
Erik the Outgolfer

5

Mathematica, 35 octets

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

Fonction pure prenant un entier positif et retournant Trueou False.

#^3+#2^3&~Array~{#,#}tabule toutes les sommes de cubes de deux entiers compris entre 1 et l'entrée. (Cela serait beaucoup plus rapide avec une limite sensible sur les entiers à cuber, comme la racine cubique de l'entrée; mais cela prendrait de précieux octets. En l'état, le code prend environ 30 secondes sur l'entrée 13832et évolue au moins quadratique au moins dans l'entrée.) Count[...,#,2]compte le nombre de fois où l'entrée apparaît dans cette liste au niveau de l'imbrication 2; si ce nombre est supérieur à 2, alors l'entrée est un nombre semi-taxis (supérieur à 2, plutôt que supérieur à 1, car a ^ 3 + b ^ 3 et b ^ 3 + a ^ 3 sont comptés séparément).


3

Mathematica, 38 37 octets

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

-1 octet grâce à @GregMartin

Comme toujours, il y a un Mathematica intégré à tout.


1
En supposant que le PO est correct avec plus de 2 représentations, alors je pense que cela Tr[1^...]fonctionne à la place de Length@.
Greg Martin

2

JavaScript (ES7), 63 octets

Une fonction récursive relativement rapide qui retourne finalement un booléen.

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

Démo


2

Mathematica, 48 octets

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

contribution

[4104]

production

Vrai


Notez que ce #!=1729&&n'est plus nécessaire maintenant que la spécification a été clarifiée.
Greg Martin

Pourriez-vous utiliser Solveplutôt que Reduce?
Ian Miller

bien sûr ... 1 octet est 1 octet!
J42161217

Peut enregistrer un octet de plus avec Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&lequel remplace le &&avec -et un peu de réarrangement.
Ian Miller


1

MATL ( 16 15 octets) ( 13 12 idéalement)

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

Essayez-le en ligne!

Explication:

Basé sur la solution Jelly de 'Leaky Nun', qui vient d'être convertie en MATL, probablement redondante dans certaines parties et peut être améliorée:

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

Remarque: les sorties falsifiées incluent 0 et -1, tandis que la sortie véridique est 1. Merci à Luis Mendo d'avoir enregistré un octet supplémentaire en remplaçant ici "s1>" par "sq".

Idéalement ( 13 12 octets):

:3^2XN!sG=sq

... est suffisant, mais pour un plus grand nombre, cela se bloque sur la page de tio.run.


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

1
Si une sortie véridique est valide, vous pouvez la remplacer 1>par q. En outre, vous avez Hau lieu de Gdans l'explication. Le fait que le programme plante pour de grands nombres n'est généralement pas pertinent pour la notation. Si cela fonctionne avec suffisamment de temps et de mémoire, c'est acceptable, sauf indication contraire du défi
Luis Mendo

1
Merci Luis! Je suis nouveau sur les sorties "véridiques", mais cela fonctionne bien maintenant. Modifié pour modifier. Merci aussi d'avoir créé un esolang aussi amusant et facile à utiliser!
DrQuarius

0

Rubis , 52 octets

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

Essayez-le en ligne!

Étant donné que cette version crée un tableau massif de taille n 2 , elle échoue sur tous les vrais tests supérieurs à 1729, voici une version modifiée qui a une taille de tableau plus petite d'environ n 2/3 , qui vérifie avec succès au moins jusqu'à 31392.

Essayez-le en ligne! (modifié)


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.