Eu sou um táxi secundário?


13

fundo

O número de Ramanujan, 1729, é chamado de número de táxi devido ao conto (possivelmente apócrifo) de Hardy embarcando em um táxi para visitar Ramanujan no hospital com esse número, que lhe parecia insípido.

Desde então, é conhecido como o mais famoso de uma classe de números inteiros, conhecida como "números de táxi", que é expressável como a soma de dois enésimos poderes (de números inteiros positivos) de duas (ou às vezes 'k') maneiras diferentes.

1729 é o menor número natural expressável como a soma de 2 cubos de 2 maneiras diferentes, tornando-o o primeiro número de táxi "3,2" (sendo "n, k" geral)).

Desafio

Dado um número, decida se é um "número de táxi secundário" "3,2" - o que significa que ele cumpre a mesma restrição que 1729 (2 somas únicas de cubos), mas não precisa ser o menor número inteiro "3" , Classe 2 "(sendo 1729, é claro).

Casos de exemplo:

1729 = 10 ^ 3 + 9 ^ 3 = 12 ^ 3 + 1 ^ 3

4104 = 15 ^ 3 + 9 ^ 3 = 16 ^ 3 + 2 ^ 3

Determine o valor de x na figura abaixo:

Bem como 20683, 32832, 39312 ...

Pontuação

Isso é , então a resposta mais curta em cada idioma vence.

Código aproximado do Matlab para encontrar outros casos por força 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

Bem-vindo ao PPCG! Editei sua pergunta um pouco para torná-la um pouco mais clara. Você gostaria de adicionar alguns casos de teste?
musicman523

Sim, eu estava lutando porque estou no trabalho e não tenho Matlab, mas consegui colocar o Octave on-line para funcionar e encontrei 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Precisa haver exatamente duas maneiras de escrever o número, ou pelo menos duas?
John Dvorak

2
alguém deve escrever uma resposta em Taxi bigzaphod.github.io/Taxi
SaggingRufus

Respostas:


4

05AB1E , 9 bytes

Código (muito lento)

L3mãOQO3›


Código (muito mais rápido), 12 bytes

tL3mDδ+˜QO3›

Usa a codificação 05AB1E . Experimente online!

Explicação

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
Certamente você pode salvar um byte removendo a raiz quadrada. Isso é código-golfe, não código mais rápido.
scatter

@ Christian Adicionei uma versão lenta do código.
Adnan

6

Geléia , 9 bytes

Créditos a Erik, o Outgolfer.

Œċ*3S€ċ>1

Experimente online!

É muito lento que nem funciona 1729online.

Muito mais rápido, 12 bytes

Créditos ao Dennis.

R*3fRŒċS€ċ>1

Experimente online!


Acabei de testar isso com "4104" e passou. :) Ainda não encontrei nada além disso, mas isso foi muito rápido!
perfil completo de DrQuarius

Ðf⁸pode se tornar fR. O segundo pode ser removido.
Dennis

O segundo ⁸ pode ser removido de fato, mas a troca fR leva à falha.
perfil completo de DrQuarius

A propósito, isso é código-golfe, então não nos preocupamos com velocidade;) mas você ainda pode incluir a versão rápida no link TIO.
Kritixi Lithos

1
Você não precisa se preocupar com velocidade, apenas faça Œċ*3S€ċ>1.
Erik the Outgolfer

5

Mathematica, 35 bytes

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

Função pura pegando um número inteiro positivo e retornando Trueou False.

#^3+#2^3&~Array~{#,#}tabula todas as somas de cubos de dois números inteiros entre 1 e a entrada. (Isso seria muito mais rápido com um limite sensível nos números inteiros a serem cubados, como a raiz do cubo da entrada; mas isso exigiria bytes preciosos. Como é, o código leva cerca de 30 segundos na entrada 13832e é dimensionado pelo menos quadraticamente na entrada.) Count[...,#,2]conta quantas vezes a entrada aparece nesta lista no nível 2 do ninho; se esse número for maior que 2, a entrada será um número semi-taxicab (maior que 2, e não maior que 1, uma vez que a ^ 3 + b ^ 3 eb = 3 + a ^ 3 estão sendo contados separadamente).


3

Mathematica, 38 37 bytes

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

-1 byte graças a @GregMartin

Como sempre, existe um Mathematica embutido em tudo.


1
Supondo que o OP esteja bem com mais de 2 representações, acredito que Tr[1^...]funcione no lugar de Length@.
Greg Martin

2

JavaScript (ES7), 63 bytes

Uma função recursiva relativamente rápida que eventualmente retorna um 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)

Demo


2

Mathematica, 48 bytes

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

entrada

[4104]

resultado

Verdade


Observe que #!=1729&&não é mais necessário agora que as especificações foram esclarecidas.
Greg Martin

Você poderia usar em Solvevez de Reduce?
Ian Miller

é claro ... 1 byte é 1 byte!
J42161217

Pode salvar mais um byte com o Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&qual substitui o &&com -e um pouco de reorganização.
Ian Miller


1

MATL ( 16 15 bytes) ( 13 12 ideal)

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

Experimente online!

Explicação:

Com base na solução Jelly de 'Leaky Nun', convertida para MATL, provavelmente redundante em algumas partes e pode ser melhorada:

.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: as saídas falsas incluem 0 e -1, enquanto a saída verdadeira é 1. Agradecemos a Luis Mendo por salvar um byte extra aqui substituindo "s1>" por "sq".

Idealmente ( 13 12 bytes):

:3^2XN!sG=sq

... é suficiente, mas para números maiores isso trava na página do tio.run.


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

1
Se qualquer saída verdadeira for válida, você poderá substituir 1>por q. Além disso, você tem em Hvez da Gexplicação. O fato de o programa travar em grandes números geralmente é irrelevante para a pontuação. Se ele funciona dado tempo suficiente e memória que é aceitável, a menos que especifica desafio de outra forma
Luis Mendo

1
Obrigado Luis! Eu sou novo nas saídas "verdadeiras", mas isso funciona muito bem agora. Editado para alterar. Além disso, obrigado por criar um esolang tão divertido e 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}

Experimente online!

Como esta versão cria uma enorme matriz de tamanho n 2 , ela falha em todos os casos de teste verdadeiros superiores a 1729, aqui está uma versão modificada que possui um tamanho de matriz menor de cerca de n 2/3 , que verifica com êxito pelo menos até 31392.

Experimente online! (modificado)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.