# Background

Ramanujan's number, $$\1729\$$, is called a taxi-cab number due to the (possibly apocryphal) tale of Hardy boarding a cab to visit Ramanujan in hospital having this number, which seemed bland to him.

It's since known as the most famous of a class of integers known as "taxicab numbers" which are expressible as the sum of two $$\n\$$th powers (of positive integers) in two (or sometimes $$\k\$$) different ways.

$$\1729\$$ is the smallest natural number expressible as the sum of 2 cubes in 2 different ways, making it the first $$\3,2\$$ taxicab number ($$\n,k\$$ being general).

# Challenge

Given a number, decide whether it is a $$\3,2\$$ 'secondary taxicab number' - meaning it fulfils the same constraint as $$\1729\$$ (2 unique sums of cubes), but does not have to be the smallest such integer of the $$\3,2\$$ class (that being 1729, of course).

### Example cases

$$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 well as $$\20683, 32832, 39312...\$$

# Scoring

This is , so the shortest answer in each language wins.

Rough Matlab code to find other cases by brute force:

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

• Welcome to PPCG! I edited your question a bit to make it a bit more clear. Would you be willing to add some test cases? Commented Jun 14, 2017 at 2:59
• Yep, I was struggling because I'm at work and don't have Matlab, but managed to get Octave online to work and found 4104=16^3+4^3=15^3+9^3 Commented Jun 14, 2017 at 3:11
• A001235 Commented Jun 14, 2017 at 7:06
• Do there need to be exactly two ways to write the number, or at least two? Commented Jun 14, 2017 at 8:19
• someone should write an answer in Taxi bigzaphod.github.io/Taxi Commented Jun 14, 2017 at 12:54

# Jelly, 9 bytes

Credits to Erik the Outgolfer.

Œċ*3S€ċ>1


Try it online!

This is too slow that it won't even work for 1729 online.

## Much faster, 12 bytes

Credits to Dennis.

R*3fRŒċS€ċ>1


Try it online!

• I just tested this with "4104" and it passed. :) Haven't found any beyond this yet, but that was lightning fast! Commented Jun 14, 2017 at 3:10
• Ðf⁸ can become fR. The second ⁸ can be removed. Commented Jun 14, 2017 at 6:17
• The second ⁸ can be removed indeed, but the fR swap leads to failure. Commented Jun 14, 2017 at 6:24
• By the way, this is code-golf so we don't care about speed ;) but you can still include the fast version in the TIO link. Commented Jun 14, 2017 at 8:23
• You don't need to care about speed, just do Œċ*3S€ċ>1. Commented Jun 14, 2017 at 12:47

# Mathematica, 35 bytes

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


Pure function taking a positive integer and returning True or False.

#^3+#2^3&~Array~{#,#} tabulates all sums of cubes of two integers between 1 and the input. (This would be much faster with a sensible bound on the integers to be cubed, like the cube root of the input; but that would take precious bytes. As it is, the code takes about 30 seconds on the input 13832 and scales at least quadratically in the input.) Count[...,#,2] counts how many times the input appears in this list at nest-level 2; if this number is greater than 2, then the input is a semi-taxicab number (greater than 2, rather than greater than 1, since a^3+b^3 and b^3+a^3 are being counted separately).

# 05AB1E, 9 bytes

### Code (very slow)

L3mãOQO3›


### Code (much faster), 12 bytes

tL3mDδ+˜QO3›


Uses the 05AB1E encoding. Try it online!

### Explanation

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

• Surely you could save a byte by removing the square root. This is code-golf, not fastest-code. Commented Jun 14, 2017 at 11:19
• @Christian I have added a slow version of the code. Commented Jun 15, 2017 at 9:36

# Mathematica, 38 37 bytes

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


-1 byte thanks to @GregMartin

As always, there is a Mathematica builtin to everything.

• Assuming that the OP is ok with more-than-2-representations, then I believe Tr[1^...] works in place of Length@. Commented Jun 14, 2017 at 6:23

# APL (dzaima/APL), 15 bytes

{4≤⍵⍧∘.+⍨3*⍨⍳⍵}


Try it online!

Same method as all the other answers. Only works till 4104 due to brute forcing.

more than 20 bytes golfed off with dzaima's help at the APL orchard.

The output appears with a ⊂ next to it, which has been patched in the latest version of the interpreter.

## Explanation

{4≤⍵⍧∘.+⍨3*⍨⍳⍵} ⍵ → input
3*⍨⍳⍵  range 1 to n, cubed
∘.+⍨       dot product, addition with itself
⍵⍧           number of times ⍵ appears in the sums
4≤             is 4 less than or equal to that?


## JavaScript (ES7), 63 bytes

A relatively fast recursive function which eventually returns a boolean.

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

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

console.log([...Array(40000).keys()].filter(n => f(n)))

# Mathematica, 48 bytes

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


input

[4104]

output

True

• Note that #!=1729&& is no longer necessary now that the spec has been clarified. Commented Jun 14, 2017 at 6:15
• Could you use Solve rather than Reduce? Commented Jun 14, 2017 at 9:51
• of course...1 byte is 1 byte! Commented Jun 14, 2017 at 10:08
• Can save one more byte with Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1& which replaces the && with - and a little bit of rearranging. Commented Jun 14, 2017 at 10:41

## Python, 71 bytes

Try it online

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


# MATL (16 15 bytes) (13 12 ideally)

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


Try it online!

## Explanation:

Based on the Jelly solution of 'Leaky Nun', just converted to MATL, probably redundant in some parts and can be improved:

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


Note: falsy outputs include 0 and -1, while truthy output is 1. Thanks to Luis Mendo for saving an extra byte here replacing "s1>" with "sq".

## Ideally (13 12 bytes):

:3^2XN!sG=sq


...is enough, but for larger numbers this crashes on tio.run's page.

• Original: MATL (19 bytes) =============== XH.34^:3^2XN!sH=s1> Commented Jun 14, 2017 at 7:28
• If any truthy output is valid, you can replace 1> by q. Also, you have H instead of G in the explanation. The fact that the program crashes for large numbers is usually irrelevant for scoring. If it works given enough time and memory that's acceptable, unless the challenge specifies otherwise Commented Jun 14, 2017 at 8:55
• Thanks Luis! I'm new to "truthy" outputs, but this works nicely now. Edited to amend. Also, thanks for creating such a fun and easy to use esolang! Commented Jun 15, 2017 at 0:42

# Ruby, 52 bytes

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


Try it online!

Since this version creates a massive n2 sized array, it fails on all true testcases higher than 1729, here is a modified version that has a smaller array size of about n2/3, which successfully checks at least up to 31392.

Try it online! (modified)

# PHP, 76 bytes

for(;$i++<$argn**(1/3);)for($n=1;$n<$i;)$n++**3+$i**3!=$argn?:$c++;echo$c>1;


Try it online!

Search till 400000 Try it online!

$_=1<grep{//;grep$'**3+$_**3=="@F",$_.."@F"}1..$_  Try it online! # Add++, 32 bytes D,g,@,3^AR3€Ω^$€+
L,R€gb+A€=b+2=


Try it online!

The Footer in the TIO link is simply a faster version (b+ $$\\to\$$ BFB])

## How it works

D,g,@,		; Define a helper function, g
; It takes an int;	STACK = [5]
3^	; Cube;			STACK = [125]
AR	; Argument range;	STACK = [125 [1 2 3 4 5]]
3€Ω^	; Cube each;		STACK = [125 [1 8 27 64 125]]
\$€+	; Add the cube to each;	STACK = [[126 133 152 189 250]]

L,		; Define the main function
; Takes an int;		STACK = [1729]
R	; Range;		STACK = [[1 2 3 ... 1728 1729]]
€g	; Run g over each;	STACK = [[[2] [9 16] ... ]]
b+	; Concatenate;		STACK = [[2 9 16 ...]]
A€=b+	; Count argument;	STACK = [2]
2=	; Equals 2?		STACK = [1]