Con số nào lớn hơn?


22

Đầu vào

Các số nguyên a1, a2, a3, b1, b2, b3 mỗi số trong phạm vi từ 1 đến 20.

Đầu ra

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

^ là lũy thừa trong câu hỏi này.

Quy tắc

Đây là mã golf. Mã của bạn phải chấm dứt chính xác trong vòng 10 giây đối với mọi đầu vào hợp lệ trên máy tính để bàn tiêu chuẩn.

Bạn có thể xuất bất cứ thứ gì Truthy for True và bất cứ thứ gì Falsey cho false.

Bạn có thể giả sử bất kỳ thứ tự đầu vào nào bạn muốn miễn là nó được chỉ định trong câu trả lời và luôn giống nhau.

Đối với câu hỏi này, mã của bạn phải luôn luôn chính xác. Đó là nó không nên thất bại vì không chính xác điểm nổi. Do phạm vi đầu vào hạn chế, điều này không quá khó để đạt được.

Các trường hợp thử nghiệm

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

Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
DJMcMayhem

Câu trả lời:


16

Perl 6 , 31 29 byte

-2 byte nhờ Grimy

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

Hãy thử trực tuyến!

Dù bạn có tin hay không, đây không phải là một esolang, ngay cả khi nó bao gồm chủ yếu là các dấu hoa thị. Điều này sử dụng công thức của Arnauld , với log10 thay vì ln.


Tôi tin rằng điều này thất bại cho 2^3^12 == 8^3^11.
Ørjan Johansen

@ RjanJohansen Điều này cần được khắc phục ngay bây giờ. cho tôi biết nếu nó thất bại vì bất cứ điều gì khác
Jo King


@Grimy Cảm ơn! Tôi có thể đã thề rằng tôi đã thử điều đó ...
Jo King


6

05AB1E , 11 9 11 7 byte

.²Šm*`›

Cảng @Arnauld 's JavaScript@digEmAll R' s phương pháp tiếp cận (tôi thấy họ gửi trong khoảng thời gian tương tự)
-2 byte nhờ @Emigna
2 byte như lỗi-sửa chữa sau khi @Arnauld 's và @digEmAll câu trả lời' s chứa một lỗi
-4 byte bây giờ cho phép một thứ tự đầu vào khác sau khi nhận xét của @LuisMendo

Đầu vào như [a1,b1], [a3,b3], [a2,b2]như ba tách đầu vào.

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

       # 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
Phiên bản thứ hai của bạn có thể là εć.²š] P` Cách
Emigna

@Emigna Ah tốt, tôi đã xem xét một cách tiếp cận ć, nhưng hoàn toàn quên mất việc sử dụng š(không biết tại sao bây giờ tôi thấy nó, haha). Cảm ơn!
Kevin Cruijssen

Điều này dường như không chính xác (vì câu trả lời của Arnauld là không chính xác cho đến khi sửa chữa gần đây).
Anush

@Anush Đã sửa và lưu 4 byte bằng cách lấy các đầu vào theo một thứ tự khác ngay bây giờ. :)
Kevin Cruijssen



3

J , 11 9 byte

>&(^.@^/)

Hãy thử trực tuyến!

Các đối số được đưa ra như danh sách.

  • > bên trái có lớn hơn không?
  • &(...) nhưng trước tiên, hãy chuyển đổi từng đối số như vậy:
  • ^.@^/giảm nó từ bên phải sang bên trái với số mũ. Nhưng vì lũy thừa thông thường sẽ hạn chế lỗi ngay cả đối với các số mở rộng, chúng tôi lấy nhật ký của cả hai bên


3

Python 3 , 68 byte

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

Hãy thử trực tuyến!

Cổng của @Arnualds trả lời, nhưng với cơ sở cho nhật ký đã thay đổi.


^được gọi **bằng Python. Và với sự thay đổi đó, bạn sẽ không thể chạy tất cả các trường hợp thử nghiệm của OP.
Ørjan Johansen

Nên được sửa tất cả, 66 byte mặc dù.
Artemis hỗ trợ Monica

Tôi tin rằng điều này thất bại cho 2^3^12 == 8^3^11.
Ørjan Johansen

@ RjanJohansen nên được sửa chữa
Artemis hỗ trợ Monica

Có vẻ như nó. Ngoài sự thay đổi cơ sở logarit để sửa lỗi, nó trông giống như phương pháp của Arnauld.
Ørjan Johansen

2

05AB1E , 13 byte

Sử dụng phương thức từ câu trả lời JS của Arnauld

2F.²IIm*ˆ}¯`›

Hãy thử trực tuyến!


Điều này không chấm dứt cho a1 = 20, a2 = 20, a3 = 20.
Anush

1
@Anush: Có vẻ như chấm dứt trong chưa đầy một giây với tôi.
Emigna

bạn phải đặt tất cả các biến thành 20. Xem tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Anush

@Anush: Ah, ý bạn là b1=b2=b3=20, vâng, điều đó không chấm dứt.
Emigna

1
@Anush: Nó đã được sửa bây giờ. Cảm ơn đã chỉ ra sai lầm của tôi :)
Emigna

2

Excel, 28 byte

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

Excel thực hiện cùng một công thức đã được sử dụng.


Tôi hiểu rằng Excel có 15 chữ số chính xác, vì vậy có thể có trường hợp làm tròn kết quả trong trường hợp này trả về câu trả lời sai.
Tích lũy

2

JavaScript, 51 byte

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

Đáng ngạc nhiên, các trường hợp thử nghiệm không hiển thị bất kỳ lỗi dấu phẩy động. Tôi không biết nếu nó bao giờ làm ở kích thước này.

Điều này chỉ so sánh logarit của các con số.

Dung sai bình đẳng bằng 1e-8.


Chào mừng đến với PPCG! Than ôi điều này không thất bại với 2^3^12 == 8^3^11trường hợp thử nghiệm của tôi . Trong thực tế, câu trả lời của bạn rất giống với câu trả lời ban đầu của Arnauld (đáng buồn bị xóa thay vì cố định) đã truyền cảm hứng cho hầu hết những người thất bại.
Ørjan Johansen

@ Rjan Johansen Chuyển l(h)sang bên phải, và có lẽ nó hoạt động bây giờ? Chỉnh sửa: Đợi, không.
Naruyoko

Thêm dung sai bình đẳng 0.01.
Naruyoko

Tôi đã làm một tìm kiếm nhanh và một dung sai nên hoạt động, nhưng điều này là một chút quá cao. Mức cao nhất bạn cần loại trừ là (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(trường hợp thử nghiệm của tôi) và mức thấp nhất bạn cần đưa vào là (9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2))( 3^7^2 > 17^19^1.) Vì vậy, một cái gì đó giống như 1e-8nên được an toàn ở giữa và cùng độ dài byte.
Ørjan Johansen

@ Ørjan Johansen Ok, cảm ơn!
Naruyoko

1

bc -l, 47 byte

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

với đầu vào đọc từ STDIN, một số nguyên trên mỗi dòng.

bclà khá nhanh; nó xử lý a = b = c = d = e = f = 1.000.000 trong một giây trên máy tính xách tay của tôi.


Tôi yêu một câu trả lời bc! Chỉ cần một cái trong bash ngay bây giờ :)
Anush

1

C ++ (gcc) , 86 byte

Cảm ơn @ rjanJohansen đã chỉ ra một lỗ hổng trong việc này và @Ourous đã đưa ra cách khắc phục.

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

Hãy thử trực tuyến!

abc>def


Công thức sau khi uống loghai lần nên được i[2]*log(i[1])+log(log(*i)). Ví dụ, cái hiện tại sẽ thất bại cho 2^2^20 > 4^2^18.
Ørjan Johansen

@ RjanJohansen: bắt tốt! Tôi đoán tôi phải sử dụng powphương pháp sau đó.
Neil A.

Người thay thế có 2^3^12 == 8^3^11vấn đề tôi đã chỉ ra cho người khác.
Ørjan Johansen

@ RjanJohansen: tốt, tôi đoán là tôi đang sử dụng công thức cố định của bạn rồi.
Neil A.

Ồ, tôi sợ rằng công thức chỉ đúng về mặt toán học. Nó vẫn có một vấn đề lỗi dấu phẩy động, chỉ với một trường hợp khác , 2^3^20 == 8^3^19. Trong thực tế, trung bình phương pháp sức mạnh thất bại ít hơn, có lẽ bởi vì nó có xu hướng nhân với sức mạnh của hai chính xác. Những người khác đã quản lý để làm cho nó hoạt động bằng cách chỉ cần điều chỉnh một chút.
Ørjan Johansen

1

Thạch , 8 byte

l⁵×*/}>/

Hãy thử trực tuyến!

Dựa trên câu trả lời JS của Arnauld . Mong đợi như là đầu vào [a1, b1]như đối số trái và [[a2, b2], [a3, b3]]đối số phải.

Bây giờ đã thay đổi để sử dụng nhật ký cho cơ sở 10, theo như xử lý chính xác tất cả các đầu vào có thể có trong phạm vi được chỉ định. Cảm ơn Ørjan Johansen vì đã tìm ra vấn đề ban đầu!


1
Tôi tin rằng điều này thất bại cho 2^3^12 == 8^3^11.
Ørjan Johansen

Python TIO của bạn không chính xác .. Bạn có 8*thay vì 8**. @ RjanJohansen thực sự chính xác đó 2**(3**12) > 8**(3**11)là falsey, vì chúng bằng nhau.
Kevin Cruijssen

@KevinCruijssen rất tiếc. Vâng, họ thực sự là như nhau. Lý do hai bản gốc được đánh dấu là khác nhau liên quan đến lỗi dấu phẩy động.
Nick Kennedy

1

TI-BASIC, 27 31 byte

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

6Ans

Ví dụ:

{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

Giải trình:

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"

Lưu ý: TI-BASIC là ngôn ngữ được mã hóa. Số lượng ký tự không bằng số byte.


Tôi không quen thuộc với TI-BASIC, nhưng điều này dường như là log(x) × y × zđúng hơn log(x) × y ^ z. Điều này sẽ không nhất thiết dẫn đến thứ tự giống như bất bình đẳng ban đầu.
Nick Kennedy

@NickKennedy Vâng, bạn đã đúng về điều đó! Tôi sẽ cập nhật bài viết cho tài khoản này.
Tàu

1

APL (NARS), ký tự 36, byte 72

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

Ở đây bên dưới hàm z trong (abc) z (xyt) sẽ trả về 1 nếu a ^ (b ^ c)> x ^ (y ^ t) khác sẽ trả về 0; kiểm tra

  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} là hàm p (a, b, c) = log (log (a)) + c * log (b ) = log (log (a ^ b ^ c)) và nếu aa = a ^ (b ^ c) với a, b, c> 0 và a> 1 bb = x ^ (y ^ t) với x, y, t> 0 và x> 1 hơn

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

Có một vấn đề với hàm p: Khi a là 1, log log 1 không tồn tại nên tôi chọn thể hiện điều đó với số -1; khi a = 2 nên log log a là số âm nhưng> -1.

Tái bút Nhìn thấy hàm trong tập lớn hơn của nó được xác định

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

xuất hiện phạm vi cho a, b, c trong 1..20 là quá ít ... Nếu người ta thấy khi nó tràn vào cơ sở nhật ký 10, thì phạm vi cho a, b, c có thể là 1..10000000 hoặc lớn hơn cho 64 bit loại phao.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.