어느 큰 숫자가 더 큽니까?


22

입력

정수 a1, a2, a3, b1, b2, b3은 각각 1에서 20 사이의 범위에 있습니다.

산출

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

^이 질문에서 지수입니다.

규칙

이것은 코드 골프입니다. 표준 데스크탑 PC에서 유효한 입력을하려면 코드가 10 초 이내에 올바르게 종료되어야합니다.

Truthy for True 및 Falsey for False를 출력 할 수 있습니다.

답변에 지정된 한 항상 동일한 입력 순서를 원하는 것으로 가정 할 수 있습니다.

이 질문에 대해서는 코드가 항상 정확해야합니다. 그것은 부동 소수점 부정확성으로 인해 실패해서는 안됩니다. 입력 범위가 제한되어 있기 때문에 달성하기가 너무 어렵지 않아야합니다.

테스트 사례

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

의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
DJMcMayhem

답변:


16

펄 6 , 31 29 바이트

Grimy 덕분에 -2 바이트

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

온라인으로 사용해보십시오!

믿거 나 말거나, 이것은 별표로 구성되어 있어도 esolang 이 아닙니다 . 이것은 Arnauld의 formula 를 사용하고 ln 대신 log10을 사용합니다.


나는 이것이 실패한다고 믿는다 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen 이제 수정되었습니다. 다른 것에 실패하면 알려주세요
Jo King


트윗 담아 가기 나는 그 ... 시도 맹세 할 수
조 왕

7

R , 39 바이트

function(x,y,z)rank(log2(x)*(y^z))[1]<2

온라인으로 사용해보십시오!

다음 a > b과 같은 경우 FALSE를 반환 하고 TRUE 인 경우b < a


4
이것은 잘못된 것입니다f(2,2,20,2,20,2)
H.PWiz

@Arnauld 답변에 대한 귀하의 제안을 사용하여 수정 됨;)
digEmAll

나는 이것이 실패한다고 믿는다 2^3^12 == 8^3^11.
Ørjan Johansen

1
1^20^20 == 1^1^1및 에 모두 실패합니다 1^1^1 == 1^20^20.
Olivier Grégoire

6

05AB1E , 11 9 11 7 바이트

.²Šm*`›

포트 @Arnauld 의 자바 스크립트@digEmAll 의 R은 (내가 그들을 동시에 주위에 게시했다) 접근
-2 덕분에 바이트 @Emigna
버그 수정 등의 2 바이트 후 @Arnauld 의 및 @digEmAll 의 답변에 포함 @LuisMendo 의 주석
다음에 다른 입력 순서가 허용 되므로 오류 -4 바이트

입력은 [a1,b1], [a3,b3], [a2,b2]세 입력을 분리한다.

온라인으로 시도 하거나 모든 테스트 사례를 확인하십시오 .

설명:

       # 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
당신은 두 번째 버전이 될 수 있습니다 εć.²š] P`›
Emigna

@Emigna Ah nice,와의 접근 방식을 찾고 ć있었지만 완전히 사용하는 것을 잊었습니다 š(왜 지금 그것을 볼 수 있는지 확실하지 않습니다, haha). 감사!
Kevin Cruijssen

Arnauld의 답변이 최근 수정까지 부정확했기 때문에 이것은 잘못된 것 같습니다.
Anush

@Anush 고정 및 4 바이트는 이제 다른 순서로 입력을 가져와 저장되었습니다. :)
Kevin Cruijssen



3

J , 11 9 바이트

>&(^.@^/)

온라인으로 사용해보십시오!

리스트로 주어진 인수.

  • > 왼쪽이 더 큽니까?
  • &(...) 그러나 먼저 각 인수를 다음과 같이 변환하십시오.
  • ^.@^/지수로 오른쪽에서 왼쪽으로 줄입니다. 그러나 일반 지수는 확장 된 숫자의 경우에도 오류를 제한하므로 양쪽의 로그를 취합니다


3

파이썬 3 , 68 바이트

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

온라인으로 사용해보십시오!

@Arnualds 포트가 응답하지만 로그의 기본이 변경되었습니다.


^**파이썬에서 호출 됩니다. 변경 사항이 있으면 OP의 모든 테스트 사례를 실행할 수 없습니다.
Ørjan Johansen

66 바이트로 수정해야합니다.
Artemis는

나는 이것이 실패한다고 믿는다 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen은 고정되어야합니다
Artemis는

그런 것 같습니다. 수정에 대한 대수 기본 변경 외에도 Arnauld의 방법처럼 보입니다.
Ørjan Johansen

2

05AB1E , 13 바이트

Arnauld의 JS 답변 에서 나온 방법을 사용합니다.

2F.²IIm*ˆ}¯`›

온라인으로 사용해보십시오!


a1 = 20, a2 = 20, a3 = 20에 대해서는 종료되지 않습니다.
Anush

1
@Anush : 1 초도 안되어 종료 되는 것 같습니다 .
Emigna

모든 변수를 20으로 설정해야합니다. tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Anush

@Anush : 아, 그렇습니다 b1=b2=b3=20.
Emigna

1
@Anush : 이제 수정되었습니다. 내 실수를 지적 해 주셔서 감사합니다 :)
Emigna

2

엑셀, 28 바이트

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

동일한 수식의 Excel 구현이 이미 사용되었습니다.


내 이해는 Excel의 정밀도는 15 자리이므로 반올림으로 인해 잘못된 대답이 반환되는 경우가 있습니다.
누적

2

자바 스크립트, 51 바이트

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

놀랍게도 테스트 사례에는 부동 소수점 오류가 표시되지 않습니다. 그것이이 크기에 해당되는지 모르겠습니다.

이것은 숫자의 로그를 비교합니다.

평등 공차는 1e-8입니다.


PPCG에 오신 것을 환영합니다! 아아, 이것은 내 2^3^12 == 8^3^11테스트 케이스에서 실패 합니다. 실제로 귀하의 답변은 Arnauld의 원래 답변 (고정되지 않고 슬프게 삭제됨)과 매우 유사하여 실패한 사람들에게 영감을주었습니다.
Ørjan Johansen

@ Ørjan Johansen l(h)오른쪽으로 옮겼 는데 지금 작동할까요? 편집 : 잠깐만 요.
Naruyoko

동등 공차가 추가되었습니다 0.01.
Naruyoko

빠른 검색을 수행하고 공차가 작동해야하지만 너무 높습니다. 제외해야 할 가장 높은 것은 (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(내 테스트 사례)이고 포함 해야하는 가장 낮은 것은 (9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2))() 3^7^2 > 17^19^1입니다. 따라서 1e-8중간과 동일한 바이트 길이에 안전하게 있어야합니다.
Ørjan Johansen

@ Ørjan Johansen 감사합니다!
Naruyoko

1

bc -l, 47 바이트

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

에서 입력을 읽은 상태에서 STDIN한 줄에 하나씩 정수.

bc꽤 빠릅니다. 내 노트북에서 1 초에 a = b = c = d = e = f = 1,000,000을 처리합니다.


나는 BC 해답을 좋아한다! 그냥 bash에 하나만 필요 :)
Anush

1

C ++ (gcc) , 86 바이트

이 문제에 대해 지적한 @ ØrjanJohansen에게 감사의 말을 전하고 @Ourous에게 감사의 말을 전합니다.

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

온라인으로 사용해보십시오!

에이기음>이자형에프


log두 번 복용 후 공식 은이어야합니다 i[2]*log(i[1])+log(log(*i)). 예를 들어, 현재는 실패합니다 2^2^20 > 4^2^18.
Ørjan Johansen

@ ØrjanJohansen : 잘 잡아! 나는 그 pow방법 을 사용해야한다고 생각한다 .
닐 A.

다른 하나는 2^3^12 == 8^3^11내가 다른 사람들에게 지적한 문제가 있습니다.
Ørjan Johansen

@ ØrjanJohansen : 글쎄, 나는 당신의 고정식을 사용하고 있다고 생각합니다.
닐 A.

오, 나는 공식이 수학적으로 정확하다고 두려워합니다. 다른 경우와 마찬가지로 여전히 부동 소수점 오류 문제가 있습니다 2^3^20 == 8^3^19. 실제로 전력 방법은 평균적으로 2의 제곱을 곱하는 경향이 있기 때문에 전력 방법이 더 적게 실패합니다. 다른 사람들은 그것을 약간 조정하여 작동하게 만들었습니다.
Ørjan Johansen

1

젤리 , 8 바이트

l⁵×*/}>/

온라인으로 사용해보십시오!

Arnauld의 JS 답변을 기반으로 합니다. [a1, b1]왼쪽 인수 및 [[a2, b2], [a3, b3]]오른쪽 인수 로 입력이 예상됩니다 .

이제 지정된 범위에서 가능한 모든 입력을 올바르게 처리하는 한 base 10에 로그를 사용하도록 변경되었습니다. 원래 문제를 찾은 Ørjan Johansen에게 감사합니다!


1
나는 이것이 실패한다고 믿는다 2^3^12 == 8^3^11.
Ørjan Johansen

Python TIO가 잘못되었습니다. 8*대신을 (를) 가지고 있습니다 8**. @ ØrjanJohansen은 실제로 2**(3**12) > 8**(3**11)동일하기 때문에 거짓입니다.
Kevin Cruijssen

@KevinCruijssen 죄송합니다. 예, 그들은 실제로 평등합니다. 원래 두 개가 다른 것으로 표시되는 이유는 부동 소수점 오류와 관련이 있습니다.
Nick Kennedy

1

TI-BASIC, 27 31 바이트

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

입력은 길이 의 목록입니다6 in 인Ans .
첫 번째 큰 숫자가 두 번째 큰 숫자보다 크면 true를 출력합니다. 그렇지 않으면 false를 출력합니다.

예 :

{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

설명:

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"

참고 : TI-BASIC은 토큰 화 된 언어입니다. 문자 수는 바이트 수와 같지 않습니다 .


TI-BASIC에 익숙하지는 않지만 이것이 log(x) × y × z아닌 것 같습니다 log(x) × y ^ z. 이것이 반드시 원래 불평등과 같은 순서로 이어지는 것은 아닙니다.
Nick Kennedy

@NickKennedy 네, 당신은 그것에 대해 정확합니다! 이를 설명하기 위해 게시물을 업데이트하겠습니다.
타우

1

APL (NARS), 문자 36, 바이트 72

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

아래에서 (abc) z (xyt)의 함수 z는 a ^ (b ^ c)> x ^ (y ^ t)의 경우 1을 반환하고 그렇지 않으면 0을 반환합니다. 테스트

  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}는 함수 p (a, b, c) = log (log (a)) + c * log (b ) = log (log (a ^ b ^ c))이고 aa = a ^ (b ^ c) a, b, c> 0 및 a> 1 bb = x ^ (y ^ t) x, y, t> 0 및 x> 1보다

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

함수 p에 문제가 있습니다. a가 1 일 때 로그 로그 1이 존재하지 않으므로 숫자 -1로 표시하도록 선택합니다. a = 2 일 때 log log a는 음수이지만> -1입니다.

추신. 더 큰 세트에서 정의 된 함수를 보았습니다.

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

1..20에서 a, b, c의 범위가 너무 적습니다. 로그베이스 10으로 오버플로가 발생하면 a, b, c의 범위는 64 비트의 경우 1..10000000 이상일 수 있습니다 플로트 타입.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.