Ben İkincil bir Toksik miyim?


13

Arka fon

Ramanujan'ın numarası olan 1729'a, Hardy'nin (muhtemelen apocryphal) hikayesi nedeniyle kendisine yumuşak görünen bu numaraya sahip hastanede Ramanujan'ı ziyaret etmek için bir taksiye binmesi nedeniyle taksi taksi numarası denir .

O zamandan beri, iki (veya bazen 'k') farklı yolla iki nci gücün (pozitif tamsayıların) toplamı olarak ifade edilebilen "taksikabat sayısı" olarak bilinen bir tamsayı sınıfının en ünlüsü olarak bilinir.

1729, 2 küpün toplamı olarak 2 farklı şekilde ifade edilebilir en küçük doğal sayıdır ve bu da onu ilk "3,2" taksi numarası ("n, k" geneldir) yapar.

Meydan okuma

Bir sayı verildiğinde, bunun "3,2" "ikincil taksi numarası" olup olmadığına karar verin - yani 1729 (2 benzersiz küp toplamı) ile aynı kısıtlamayı karşılar, ancak "3'ün bu kadar küçük tamsayısı olması gerekmez. , 2 "sınıfı (elbette 1729'dur).

Örnek durumlar:

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

Ayrıca 20683, 32832, 39312 ...

puanlama

Bu , bu yüzden her dilde en kısa cevap kazanır.

Kaba kuvvetle diğer vakaları bulmak için Matlab kodu kaba:

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'ye Hoşgeldiniz! Sorunuzu biraz daha açık hale getirmek için biraz düzenledim. Bazı test senaryoları eklemek ister misiniz?
musicman523

Evet, mücadele ediyordum çünkü işteyim ve Matlab'ım yok, ancak Octave'yi çevrimiçi olarak çalıştırmayı başardı ve 4104 = 16 ^ 3 + 4 ^ 3 = 15 ^ 3 + 9 ^ 3
DrQuarius


1
Numarayı yazmanın tam iki yolu mu yoksa en az iki tane mi olması gerekiyor?
John Dvorak

2
Birisi Taksi cevap yazmak bigzaphod.github.io/Taxi
SaggingRufus

Yanıtlar:


4

05AB1E , 9 bayt

Kod (çok yavaş)

L3mãOQO3›


Kod (çok daha hızlı), 12 bayt

tL3mDδ+˜QO3›

05AB1E kodlamasını kullanır . Çevrimiçi deneyin!

açıklama

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
Şüphesiz kare kökünü kaldırarak bir bayt kaydedebilirsiniz. Bu kod-golf, en hızlı kod değil.
dağılım

@Christian Kodun yavaş bir sürümünü ekledim.
Adnan

6

Jöle , 9 bayt

Outgolfer Erik'e verilen krediler.

Œċ*3S€ċ>1

Çevrimiçi deneyin!

Bu, 1729çevrimiçi için bile çalışmayacak kadar yavaş .

Çok daha hızlı, 12 bayt

Dennis'e verilen krediler.

R*3fRŒċS€ċ>1

Çevrimiçi deneyin!


Bunu sadece "4104" ile test ettim ve geçti. :) Henüz bunun ötesinde bir şey bulamadım, ama bu yıldırım hızlıydı!
DrQuarius

Ðf⁸olabilir fR. İkincisi çıkarılabilir.
Dennis

İkinci ⁸ gerçekten çıkarılabilir, ancak fR değişimi başarısızlığa yol açar.
DrQuarius

Bu arada, bu kod-golf , bu yüzden hız umurumda değil;) ama yine de hızlı sürümü TIO bağlantısına ekleyebilirsiniz.
user41805

1
Hızı önemsemenize gerek yok, sadece yapın Œċ*3S€ċ>1.
Outgolfer Erik

5

Mathematica, 35 bayt

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

Saf fonksiyon pozitif bir tamsayı ve dönüş Trueveya False.

#^3+#2^3&~Array~{#,#}1 ile giriş arasındaki iki tamsayıdaki tüm küplerin toplamlarını tablo haline getirir. (Bu, girişin küp kökü gibi, küplenecek tamsayılara mantıklı bir bağ ile çok daha hızlı olurdu; ancak bu değerli baytlar alacaktır. Kod, girişte yaklaşık 30 saniye sürer 13832ve en az karesel olarak ölçeklenir .) Count[...,#,2]girişin bu düzeydeki yuva düzeyi 2'de kaç kez göründüğünü sayar; bu sayı daha büyükse 2, girdi yarı taksikab sayıdır (1'den büyük değil, 2'den büyüktür, çünkü bir ^ 3 + b ^ 3 ve b ^ 3 + a ^ 3 ayrı olarak sayılmaktadır).


3

Mathematica, 38 37 bayt

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

@GregMartin sayesinde -1 bayt

Her zaman olduğu gibi, her şeye yerleşik bir Mathematica vardır.


1
OP'nin 2'den fazla temsil ile iyi olduğunu varsayarsak, o zaman Tr[1^...]yerine çalışır inanıyorum Length@.
Greg Martin

2

JavaScript (ES7), 63 bayt

Sonunda bir boole döndüren nispeten hızlı özyinelemeli işlev.

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

gösteri


2

Mathematica, 48 bayt

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

giriş

[4104]

çıktı

Doğru


#!=1729&&Spesifikasyonun açıklığa kavuştuğu için artık gerekli olmadığını unutmayın .
Greg Martin

Bunun Solveyerine kullanabilir misiniz Reduce?
Ian Miller

Tabii ki ... 1 bayt 1 bayttır!
J42161217

Bir daha byte kurtarabilir Length@Solve[x^3+y^3-#==0<x<y,{x,y},Integers]>1&yerini hangi &&ile -ve yeniden düzenleyerek biraz.
Ian Miller


1

MATL ( 16 15 bayt) ( 13 12 ideal)

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

Çevrimiçi deneyin!

Açıklama:

MATL'ye dönüştürülen, muhtemelen bazı bölümlerde gereksiz olan ve geliştirilebilen 'Leaky Nun' Jelly çözümüne dayanarak:

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

Not: yanlış çıktılar 0 ve -1'i içerir, doğru çıktı 1'dir. Luis Mendo sayesinde "s1>" yerine "sq" yerine fazladan bir bayt kaydettiği için.

İdeal olarak ( 13 12 bayt):

:3^2XN!sG=sq

... yeterli, ancak daha büyük sayılar için bu tio.run'un sayfasında çöküyor.


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

1
Herhangi truthy çıkışı geçerli değilse, yerine 1>göre q. Ayrıca, açıklama Hyerine yerine var G. Programın büyük sayılar için çökmesi genellikle puanlama için önemsizdir. Meydan okuma aksini belirtmedikçe kabul edilebilir yeterli zaman ve hafıza verilirse
Luis Mendo

1
Teşekkürler Luis! "Gerçeğe uygun" çıktılar için yeniyim, ama şimdi güzel çalışıyor. Düzeltmek için düzenlendi. Ayrıca, böyle eğlenceli ve kullanımı kolay esolang oluşturduğunuz için teşekkürler!
DrQuarius


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.