Hangi büyük sayı daha büyük?


22

Giriş

Her biri 1 ila 20 aralığında a1, a2, a3, b1, b2, b3 tamsayıları.

Çıktı

True if a1^(a2^a3) > b1^(b2^b3) and False otherwise.

^ bu soruda üsteldir.

kurallar

Bu kod golfü. Standart bir masaüstü PC'de geçerli bir giriş için kodunuz 10 saniye içinde doğru şekilde sonlandırılmalıdır.

True için Truthy, False için Falsey gibi herhangi bir şeyi yazdırabilirsiniz.

İstediğiniz herhangi bir giriş sırasını, cevapta belirtildiği sürece ve daima aynı şekilde kabul edebilirsiniz.

Bu soru için kodunuz her zaman doğru olmalıdır. Kayan nokta yanlışlıkları nedeniyle başarısız olmamalıdır. Girişin sınırlı aralığı nedeniyle bunun elde edilmesi zor olmamalıdır.

Test durumları

3^(4^5) > 5^(4^3)
1^(2^3) < 3^(2^1)
3^(6^5) < 5^(20^3)
20^(20^20) > 20^(20^19)
20^(20^20) == 20^(20^20)
2^2^20 > 2^20^2
2^3^12 == 8^3^11
1^20^20 == 1^1^1
1^1^1 == 1^20^20

Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
DJMcMayhem

Yanıtlar:


16

Perl 6 , 31 29 bayt

Grimy sayesinde -2 bayt

*.log10* * ***>*.log10* * ***

Çevrimiçi deneyin!

İster inanın ister inanmayın , çoğunlukla yıldızlardan oluşsa bile , bu bir esolang değildir . Bu, Arnauld'un formülünü ln yerine log10 ile kullanır.


Bunun başarısız olduğuna inanıyorum 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen Bu şimdi düzeltilmelidir. başka bir şey için başarısız olursa bana haber verin
Jo King


@Grimy Teşekkürler! Bunu denedim yemin edebilirdim ...
Jo King


6

05AB1E , 11 9 11 7 bayt

.²Šm*`›

Port @Arnauld 'ın JavaScript ve @digEmAll ' ın R (Onlara aynı zaman etrafında sonrası gördüm) yaklaşımları
-2 sayesinde bayt @Emigna
hata-düzeltme 2 byte sonra @Arnauld 'ın ve @digEmAll ' ın cevapları içeriyordu @LuisMendo'nun yorumlarından
sonra farklı bir giriş sırasına izin verildiğini gösteren bir hata -4 bayt

Girdi olarak [a1,b1], [a3,b3], [a2,b2]üç giriş ayrılmış olarak.

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

       # Take the logarithm with base 2 of the implicit [a1,b1]-input
  Š      # Triple-swap a,b,c to c,a,b with the implicit inputs
         #  The stack order is now: [log2(a1),log2(b1)], [a2,b2], [a3,b3]
   m     # Take the power, resulting in [a2**a3,b2**b3]
    *    # Multiply it with the log2-list, resulting in [log2(a1)*a2**a3,log2(b1)*b2**b3]
     `   # Push both values separated to the stack
        # And check if log2(a1)*a2**a3 is larger than log2(b1)*b2**b3
         # (after which the result is output implicitly)

1
İkinci versiyon εć.²š] P` ›olabilir
Emigna

@Emigna Ah güzel, bir yaklaşıma bakıyordum ćama kullanmayı tamamen unuttum š(neden şimdi gördüğümden emin değilim, haha). Teşekkürler!
Kevin Cruijssen

Bu yanlış gibi görünüyor (çünkü Arnauld'un cevabı en son düzeltmeye kadar yanlıştı).
Anush

@Anush Sabit ve girişleri şimdi farklı bir sıraya göre alarak 4 byte kaydetti. :)
Kevin Cruijssen



3

J , 11 9 bayt

>&(^.@^/)

Çevrimiçi deneyin!

Listeler olarak verilen argümanlar.

  • > soldaki daha büyük mü?
  • &(...) ama önce, her argümanı şöyle dönüştür:
  • ^.@^/üstel olarak sağdan sola doğru indir. Ancak sıradan üstelleştirme, uzun sayılar için bile hatayı sınırlayacağından, her iki tarafın da kayıtlarını tutuyoruz


3

Python 3 , 68 bayt

lambda a,b,c,d,e,f:log(a,2)*(b**c)>log(d,2)*(e**f)
from math import*

Çevrimiçi deneyin!

@Arnualds Bağlantı Noktası yanıtlıyor, ancak günlüğün tabanı değiştirildi.


^**Python'da denir . Ve bu değiştiğinde, OP'nin tüm sınav davalarını çalıştıramazsınız.
Ørjan Johansen

Şimdi hepsi düzeltilmelidir, 66 byte.
Artemis, Monica

Bunun başarısız olduğuna inanıyorum 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen sabitlenmeli
Artemis,

Öyle görünüyor. Düzeltme için logaritmik taban değişiminin yanı sıra, bu Arnauld'un yöntemine benziyor.
Ørjan Johansen

2

05AB1E , 13 bayt

Arnauld'un JS cevabındaki yöntemi kullanır

2F.²IIm*ˆ}¯`›

Çevrimiçi deneyin!


Bu, a1 = 20, a2 = 20, a3 = 20 için sona ermez.
Anush

1
@Anush: görünüyor sonlandırmak benim için bir saniyeden daha az bir sürede.
Emigna

Eğer 20. Bkz tüm değişkenleri belirlemek zorunda tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Anush

@Anush: Ah, demek istedin b1=b2=b3=20, evet, bu sona ermiyor.
Emigna

1
@Anush: Şimdi sabittir.
Hatamı

2

Excel, 28 bayt

=B1^C1*LOG(A1)>E1^F1*LOG(D1)

Excel'in zaten aynı formülden uygulanması.


Anladığım kadarıyla, Excel 15 basamak hassasiyete sahip, bu nedenle yuvarlamanın sonuçta yanlış cevap vermesine neden olan durumlar olabilir.
Birikim

2

JavaScript, 51 bayt

f=(a,b,c,h,i,j)=>(l=Math.log)(a)*b**c-l(h)*i**j>1e-8

Şaşırtıcı bir şekilde, test durumları herhangi bir kayan nokta hatası göstermez. Bu boyutta yapıp yapmadığını bilmiyorum.

Bu sadece sayıların logaritmasını karşılaştırır.

Eşitlik toleransı eşittir 1e-8.


PPCG'ye Hoşgeldiniz! Maalesef bu 2^3^12 == 8^3^11test davamda başarısız oluyor . Aslında cevabınız, başarısız olanların çoğuna ilham veren Arnauld'un (maalesef silinmek yerine silinmiş) orijinal cevabına çok benziyor.
Ørjan Johansen

@ Ørjan Johansen l(h)Sağa taşındı ve belki şimdi çalışıyor? Düzenleme: Bekle, değil.
Naruyoko

Eşitlik toleransı eklendi 0.01.
Naruyoko

Hızlı bir arama yaptım ve bir tolerans işe yaramalı, ancak bu biraz fazla. Dışlamanız gereken en yüksek değer (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(test durumum) ve dahil etmeniz gereken en düşük değer (9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2))( 3^7^2 > 17^19^1.) Bu nedenle, gibi bir şey 1e-8güvenli bir şekilde orta ve aynı bayt uzunluğunda olmalıdır.
Ørjan Johansen

@ Ørjan Johansen Tamam, teşekkürler!
Naruyoko

1

bc-l, 47 bayt

l(read())*read()^read()>l(read())*read()^read()

giriş okunurken STDINsatır başına bir tam sayı.

bcoldukça hızlı; dizüstü bilgisayarımda bir saniyeden biraz fazla a = b = c = d = e = f = 1,000,000 tutar.


Bir bc cevabını seviyorum! Sadece şimdi bash bir tane gerekir :)
Anush

1

C ++ (gcc) , 86 bayt

Bu konuda bir kusur belirtmek için @ ØrjanJohansen ve bir düzeltme vermek için @Ourous'a teşekkür ederiz.

#import<cmath>
int a(int i[]){return pow(i[1],i[2])/pow(i[4],i[5])>log(i[3])/log(*i);}

Çevrimiçi deneyin!

abc>def


logİki kez aldıktan sonra formül olmalıdır i[2]*log(i[1])+log(log(*i)). Örneğin şu anki olan başarısız olur 2^2^20 > 4^2^18.
Ørjan Johansen

@ ØrjanJohansen: İyi yakalayın! Sanırım powyöntemi kullanmam gerekiyor .
Neil A.,

Alternatif olanın 2^3^12 == 8^3^11başkaları için belirttiğim bir sorunu var.
Ørjan Johansen

@ ØrjanJohansen: Peki, sanırım senin sabit formülünü kullanıyorum.
Neil A.,

Oh, korkarım formül sadece matematiksel olarak doğru. Hala farklı bir durumda, kayar nokta hatası sorunu var 2^3^20 == 8^3^19. Aslında, ortalama olarak güç yöntemi daha az başarısız olur, çünkü muhtemelen tam olarak iki güçle çarpma eğilimindedir. Diğerleri, sadece hafifçe ayarlayarak çalışmasını sağladı.
Ørjan Johansen

1

Jöle , 8 bayt

l⁵×*/}>/

Çevrimiçi deneyin!

Dayanarak Arnauld en JS cevap . Giriş [a1, b1], sol argüman ve [[a2, b2], [a3, b3]]sağ argüman olarak kabul edilir.

Şimdi kütüğü 10, belirtilen aralıktaki tüm olası girişleri mümkün olduğunca doğru bir şekilde ele alan şekilde kullanmak için değiştirildi. Orjinal sorunu bulmak için Ørjan Johansen'e teşekkürler!


1
Bunun başarısız olduğuna inanıyorum 2^3^12 == 8^3^11.
Ørjan Johansen

Python TIO'nuz yanlış .. Onun 8*yerine 8**. @ ØrjanJohansen gerçekten 2**(3**12) > 8**(3**11)eşit, çünkü yanlış , bu doğru .
Kevin Cruijssen

@KevinCruijssen oops. Evet onlar gerçekten eşittir. Orijinal ikisinin farklı olarak işaretlenmesinin nedeni kayan nokta hatası ile ilgilidir.
Nick Kennedy

1

TI-BASIC, 27 31 bayt

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4

6Ans

Örnekler:

{3,4,5,5,4,3
   {3 4 5 5 4 3}
prgmCDGF16
               1
{20,20,20,20,20,19       ;these two lines go off-screen
{20 20 20 20 20 19}
prgmCDGF16
               1
{3,6,5,5,20,3
  {3 6 5 5 20 3}
prgmCDGF16
               0

Açıklama:

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4   ;full program
                                                 ;elements of input denoted as:
                                                 ; {#1 #2 #3 #4 #5 #6}

ln(Ans(1))Ans(2)^Ans(3)                          ;calculate ln(#1)*(#2^#3)
                        Ans(5)^Ans(6)(ln(Ans(4   ;calculate (#5^#6)*ln(#4)
                       >                         ;is the first result greater than the
                                                 ; second result?
                                                 ; leave answer in "Ans"
                                                 ;implicit print of "Ans"

Not: TI-BASIC belirtilmiş bir dildir. Karakter sayısı bayt sayısına eşit değil .


Ben TI-BASIC aşina değilim, ama bu gibi görünüyor log(x) × y × zziyade log(x) × y ^ z. Bu mutlaka orijinal eşitsizlikle aynı düzene yol açmayacaktır.
Nick Kennedy

@NickKennedy Evet, bu konuda haklısın! Bunun hesabını hesaba katacağım yazıyı güncelleyeceğim.
Tau

1

APL (NARS), karakter 36, bayt 72

{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}

Burada (abc) z (xyt) 'deki z işlevi, eğer bir ^ (b ^ c)> x ^ (y ^ t) başkası 0 döndürürse, 1; Ölçek

  z←{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}
  3 4 5 z 5 4 3
1
  1 2 3 z 3 2 1
0
  3 6 5 z 5 20 3
0
  20 20 20 z 20 20 19
1
  20 20 20 z 20 20 20
0
  2 2 20 z 2 20 2
1
  2 3 12 z 8 3 11
0
  1 20 20 z 1 1 1
0
  1 1 1 z 1 20 20
0
  1 4 5 z 2 1 1
0

{(abc) ← =a = 1: ¯1⋄ (⍟⍟a) + c × ⍟b} işlevi p (a, b, c) = log (log (a)) + c * log (b) ) = log (log (a ^ b ^ c)) ve eğer aa = a ^ (b ^ c) a, b, c> 0 ve a> 1 bb = x ^ (y ^ t) ile x, y, t> 0 ve x> 1

aa>bb <=> log(log(a^b^c))>log(log(x^y^t))  <=>  p(a,b,c)>p(x,y,t)

P fonksiyonunda bir sorun var: a 1 olduğunda, log log 1 mevcut değil, bu yüzden -1 ile temsil etmeyi seçtim; a = 2 olduğunda log log a negatif bir sayıdır> -1.

PS. Fonksiyonu tanımlandığı daha büyük sette gördüm.

p(a,b,c)=log(log(a))+c*log(b)

1.20'de a, b, c için görünen aralık çok azdır ... Bir 10 log tabanıyla taşması durumunda, a, b, c için olan aralıklar 64 bit için 1..10000000 veya daha büyük olabilir. şamandıra tipi.

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.