Я вторинний такси?


13

Фон

Номер Рамануджана, 1729 рік, називають номером таксі в таксі через (можливо, апокрифну) розповідь про Харді, що сідає на таксі, щоб відвідати Рамануджана в лікарні, що має цей номер, який, здавалося, йому непристойний.

З тих пір він відомий як найвідоміший з класу цілих чисел, відомий як "числа таксацифів", які виражаються як сума двох n-й сил (від додатних цілих чисел) двома (або іноді 'k') різними способами.

1729 - це найменше натуральне число, виражене як сума 2 кубів двома різними способами, що робить його першим "3,2" числом такси (загальне значення "n, k").

Виклик

Давши число, вирішіть, чи є це "3,2" "вторинним номером такси", тобто воно відповідає тим же обмеженням, що і 1729 (2 унікальні суми кубів), але не повинно бути найменшим таким цілим числом "3 , 2 "клас (що, звичайно, 1729).

Приклади випадків:

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

А також 20683, 32832, 39312 ...

Оцінка балів

Це , тому найкоротша відповідь на кожній мові виграє.

Груб код Matlab, щоб знайти інші випадки грубою силою:

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

Ласкаво просимо до PPCG! Я трохи відредагував ваше запитання, щоб зробити його більш зрозумілим. Чи готові ви додати кілька тестових випадків?
musicman523

Так, я боровся, бо я працюю і не маю Matlab, але мені вдалося змусити Octave в Інтернеті працювати і виявив 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Чи потрібно рівно два способи записати число, або принаймні два?
Джон Дворак

2
хтось повинен написати відповідь у таксі bigzaphod.github.io/Taxi
SaggingRufus

Відповіді:


4

05AB1E , 9 байт

Код (дуже повільно)

L3mãOQO3›


Код (набагато швидше), 12 байт

tL3mDδ+˜QO3›

Використовує кодування 05AB1E . Спробуйте в Інтернеті!

Пояснення

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
Звичайно, ви можете зберегти байт, видаливши квадратний корінь. Це код-гольф, не найшвидший код.
розкидання

@Christian Я додав повільну версію коду.
Аднан

6

Желе , 9 байт

Подяки Еріку Переможця.

Œċ*3S€ċ>1

Спробуйте в Інтернеті!

Це занадто повільно, щоб навіть не працювати в 1729Інтернеті.

Набагато швидше, 12 байт

Кредити Деннісу.

R*3fRŒċS€ċ>1

Спробуйте в Інтернеті!


Я щойно тестував це на "4104" і це пройшло. :) Ще не знайшли нічого поза цим, але це блискавично!
DrQuarius

Ðf⁸може стати fR. Друге можна зняти.
Денніс

Другий indeed справді можна зняти, але fR своп призводить до збою.
DrQuarius

До речі, це код-гольф, тому ми не піклуємося про швидкість;), але ви все одно можете включити швидку версію у посилання TIO.
користувач41805

1
Вам не потрібно дбати про швидкість, просто робіть Œċ*3S€ċ>1.
Ерік Аутгольфер

5

Математика, 35 байт

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

Чиста функція, приймаючи додатне ціле число і повертаючи Trueабо False.

#^3+#2^3&~Array~{#,#}підсумовує всі суми кубів двох цілих чисел між 1 і вхідними. (Це було б набагато швидше, якщо чітке обмеження цілих чисел буде кубічно, як корінь куба вхідного сигналу; але це займе дорогоцінні байти. Як це відбувається, коду потрібно 30 секунд на вході 13832і масштабується принаймні квадратично у вхідних даних.) Count[...,#,2]підраховує, скільки разів цей показник з’являється в цьому списку на рівні гніздування 2; якщо це число більше 2, то вхід - це напівтаксичне число (більше 2, а не більше 1, оскільки a ^ 3 + b ^ 3 і b ^ 3 + a ^ 3 рахуються окремо).


3

Математика, 38 37 байт

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

-1 байт завдяки @GregMartin

Як завжди, є Mathematica, побудований для всього.


1
Якщо припустити, що з ОП все нормально з більш ніж 2-представленнями, то я вважаю, що Tr[1^...]працює замість цього Length@.
Грег Мартін

2

JavaScript (ES7), 63 байти

Відносно швидка рекурсивна функція, яка з часом повертає булеву форму.

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

Демо


2

Математика, 48 байт

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

вхід

[4104]

вихід

Правда


Зауважте, що #!=1729&&тепер вже не потрібно, коли специфікація була уточнена.
Грег Мартін

Чи можете ви скористатися, Solveа не Reduce?
Ян Міллер

звичайно ... 1 байт - 1 байт!
J42161217

Можна зберегти один байт з Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&який замінює &&з -і трохи переставляючи.
Ян Міллер


1

MATL ( 16 15 байт) ( 13 12 в ідеалі)

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

Спробуйте в Інтернеті!

Пояснення:

На основі рішення Jelly 'Leaky Nun', щойно перетворене на MATL, можливо, в деяких частинах є надлишковим і може бути вдосконалено:

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

Примітка: хибні висновки включають 0 і -1, а тривалість - 1. Дякуючи Луїсу Мендо за збереження додаткового байту, замінивши "s1>" на "sq".

В ідеалі ( 13 12 байт):

:3^2XN!sG=sq

... достатньо, але для більшої кількості це збій на сторінці tio.run.


Оригінал: MATL (19 байт) =============== XH.34 ^: 3 ^ 2XN! SH = s1>
DrQuarius

1
Якщо будь-який правдоподібний вихід справедливий, його можна замінити 1>на q. Також у вас Hзамість Gпояснення. Той факт, що програма виходить з ладу для великої кількості, зазвичай не має значення для оцінки. Якщо це працює, дається достатньо часу та пам'яті, що є прийнятним, якщо виклик не визначає інше
Луїс Мендо

1
Спасибі Луїс! Я новачок у "truthy" результатах, але це прекрасно працює зараз. Відредаговано для внесення змін. Також дякую за створення такого веселого та простого у користуванні esolang!
DrQuarius

0

Рубін , 52 байти

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

Спробуйте в Інтернеті!

Оскільки ця версія створює масивний масив n 2 , вона виходить з ладу на всіх справжніх тестових скриньках вище 1729, ось модифікована версія, що має менший розмір масиву приблизно n 2/3 , яка успішно перевіряє щонайменше до 31392.

Спробуйте в Інтернеті! (змінено)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.