Bin ich ein Zweittaxi?


13

Hintergrund

Ramanujans Nummer, 1729, wird Taxi-Nummer genannt, weil Hardy (möglicherweise apokryphisch) in ein Taxi stieg, um Ramanujan im Krankenhaus zu besuchen, mit dieser Nummer, die ihm langweilig vorkam.

Es ist seitdem als das bekannteste einer Klasse von Ganzzahlen bekannt, die als "Taxicab-Zahlen" bezeichnet werden und als die Summe von zwei n-ten Potenzen (positiver Ganzzahlen) auf zwei (oder manchmal "k") verschiedene Arten ausgedrückt werden können.

1729 ist die kleinste natürliche Zahl, die als Summe von 2 Würfeln auf zwei verschiedene Arten ausgedrückt werden kann. Damit ist sie die erste Taxizahl "3,2" ("n, k" ist allgemein).

Herausforderung

Entscheiden Sie anhand einer Zahl, ob es sich um eine "3,2" -Nebenstellennummer handelt. Dies bedeutet, dass sie die gleiche Bedingung wie 1729 (2 eindeutige Würfelsummen) erfüllt, jedoch nicht die kleinste solche Ganzzahl der "3" sein muss Klasse 2 (das ist natürlich 1729).

Beispielfälle:

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

Sowie 20683, 32832, 39312 ...

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache.

Grober Matlab-Code, um andere Fälle mit Gewalt zu finden:

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

Willkommen bei PPCG! Ich habe Ihre Frage ein wenig bearbeitet, um sie klarer zu machen. Wären Sie bereit, einige Testfälle hinzuzufügen?
musicman523

Ja, ich hatte Probleme, weil ich auf der Arbeit bin und kein Matlab habe, aber es ist mir gelungen, Octave online zum
Laufen


1
Muss es genau zwei Möglichkeiten geben, die Zahl zu schreiben, oder mindestens zwei?
John Dvorak

2
jemand sollte eine Antwort in Taxi bigzaphod.github.io/Taxi
SaggingRufus

Antworten:


4

05AB1E , 9 Bytes

Code (sehr langsam)

L3mãOQO3›


Code (viel schneller), 12 Bytes

tL3mDδ+˜QO3›

Verwendet die 05AB1E- Codierung. Probieren Sie es online!

Erläuterung

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
Sicherlich könnten Sie ein Byte sparen, indem Sie die Quadratwurzel entfernen. Dies ist Code-Golf, nicht der schnellste Code.
Scatter

@ Christian Ich habe eine langsame Version des Codes hinzugefügt.
Adnan

6

Gelee , 9 Bytes

Dank an Erik den Outgolfer.

Œċ*3S€ċ>1

Probieren Sie es online!

Dies ist zu langsam, als dass es 1729online überhaupt nicht funktionieren würde .

Viel schneller, 12 Bytes

Dank an Dennis.

R*3fRŒċS€ċ>1

Probieren Sie es online!


Ich habe das gerade mit "4104" getestet und es hat bestanden. :) Habe noch nichts weiter gefunden, aber das war blitzschnell!
DrQuarius

Ðf⁸werden kann fR. Der zweite kann entfernt werden.
Dennis

Das zweite ⁸ kann zwar entfernt werden, aber der fR-Tausch führt zum Ausfall.
DrQuarius

Das ist übrigens Code-Golf, daher ist uns die Geschwindigkeit egal;) Sie können die schnelle Version aber trotzdem in den TIO-Link aufnehmen.
Kritixi Lithos

1
Sie brauchen sich nicht um Geschwindigkeit zu kümmern, tun Sie es einfach Œċ*3S€ċ>1.
Erik der Outgolfer

5

Mathematica, 35 Bytes

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

Reine Funktion, die eine positive ganze Zahl annimmt und Trueoder zurückgibt False.

#^3+#2^3&~Array~{#,#}tabelliert alle Würfelsummen zweier Ganzzahlen zwischen 1 und der Eingabe. (Dies wäre viel schneller, wenn die zu würfelnden Ganzzahlen sinnvoll gebunden wären, wie die Kubikwurzel der Eingabe. Dies würde jedoch wertvolle Bytes in Anspruch nehmen. Der Code benötigt für die Eingabe ungefähr 30 Sekunden 13832und skaliert mindestens quadratisch in der Eingabe.) Count[...,#,2]zählt, wie oft die Eingabe in dieser Liste auf Verschachtelungsebene 2 erscheint; Ist diese Zahl größer als 2, handelt es sich bei der Eingabe um eine Semi-Taxicab-Zahl (größer als 2 und nicht größer als 1, da a ^ 3 + b ^ 3 und b ^ 3 + a ^ 3 separat gezählt werden).


3

Mathematica, 38 37 Bytes

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

-1 Byte dank @GregMartin

Wie immer ist in alles eine Mathematica eingebaut.


1
Unter der Annahme, dass das OP mit mehr als 2 Darstellungen in Ordnung ist, Tr[1^...]funktioniert meiner Meinung nach anstelle von Length@.
Greg Martin

2

JavaScript (ES7), 63 Byte

Eine relativ schnelle rekursive Funktion, die schließlich einen Booleschen Wert zurückgibt.

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

Demo


2

Mathematica, 48 Bytes

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

Eingang

[4104]

Ausgabe

Wahr


Beachten Sie, #!=1729&&dass dies nach der Klärung der Spezifikation nicht mehr erforderlich ist.
Greg Martin

Könnten Sie Solveeher als verwenden Reduce?
Ian Miller

Natürlich ... 1 Byte ist 1 Byte!
J42161217

Kann ein weiteres Byte speichern, durch Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&das das ersetzt wird&& mit -und ein bisschen Neuordnung ersetzt wird.
Ian Miller


1

MATL ( 16 15 Bytes) ( 13 idealerweise 12)

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

Probieren Sie es online!

Erläuterung:

Basierend auf der Jelly-Lösung von 'Leaky Nun', die gerade zu MATL konvertiert wurde, wahrscheinlich in einigen Teilen überflüssig ist und verbessert werden kann:

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

Hinweis: Falsche Ausgaben umfassen 0 und -1, wahrheitsgemäße Ausgabe ist 1. Dank Luis Mendo für das Speichern eines zusätzlichen Bytes, bei dem "s1>" durch "sq" ersetzt wurde.

Idealerweise ( 13 bis 12 Bytes):

:3^2XN!sG=sq

... ist genug, aber für größere Zahlen stürzt dies auf der Seite von tio.run ab.


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

1
Wenn irgendein truthy Ausgang gültig ist, können Sie ersetzen 1>durch q. Auch hast du Hstatt Gin der Erklärung. Die Tatsache, dass das Programm bei großen Zahlen abstürzt, ist für die Wertung normalerweise unerheblich. Wenn es bei genügend Zeit und genügend Arbeitsspeicher funktioniert, ist das akzeptabel, sofern die Herausforderung nichts anderes angibt
Luis Mendo

1
Danke Luis! Ich bin neu in "ehrlichen" Ausgaben, aber das funktioniert jetzt gut. Zum Ändern bearbeitet. Vielen Dank für die Erstellung eines so unterhaltsamen und benutzerfreundlichen Esolangs!
DrQuarius


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.