哪个大数字更大?


22

输入项

整数a1,a2,a3,b1,b2,b3的范围均为1到20。

输出量

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

^是这个问题的幂。

规则

这是代码高尔夫球。对于标准台式机上的任何有效输入,您的代码必须在10秒内正确终止。

您可以输出True或True,False和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

Answers:


16

Perl 6的31 29个字节

-2个字节归功于Grimy

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

在线尝试!

信不信由你,这是不是一个esolang,即使大部分是由星号。这使用Arnauld公式,用log10代替ln。


我相信这失败了2^3^12 == 8^3^11
与Orjan约翰森

@ØrjanJohansen现在应该解决。让我知道它是否还有其他失败
Jo King


@肮脏的谢谢!我本可以发誓我曾尝试过...
乔·金


6

05AB1E11 9 11 7 个字节

.²Šm*`›

@Arnauld的JavaScript@digEmAll的R的端口方法的(我看到它们在大约同一时间发布)
-2字节,感谢@Emigna
+2字节作为@Arnauld@digEmAll的答案包含后的错误修复错误
-4字节,因为@LuisMendo的注释后允许使用不同的输入顺序

输入作为[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很好,我正在使用的方法ć,但是完全忘记了使用š(不确定为什么现在看到它了,哈哈)。谢谢!
Kevin Cruijssen

这似乎是不正确的(因为直到最近的修复,Arnauld的回答才是不正确的)。
Anush

@Anush固定,现在通过以不同顺序获取输入可节省4个字节。:)
Kevin Cruijssen



3

J11 9字节

>&(^.@^/)

在线尝试!

参数以列表形式给出。

  • > 剩下的一个更大吗?
  • &(...) 但首先,这样转换每个参数:
  • ^.@^/用指数从右到左减小它。但是因为普通的幂运算会限制错误,即使是扩展的数也是如此,因此我们采用了双方的对数


3

Python 3,68个字节

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

在线尝试!

@Arnualds答案的端口,但是日志的基础已更改。


^**在Python中被称为。更改后,您将无法运行所有OP的测试用例。
与Orjan约翰森

现在应该全部固定了,尽管是66个字节。
Artemis

我相信这失败了2^3^12 == 8^3^11
与Orjan约翰森

@ØrjanJohansen应该得到解决
Artemis支持Monica

看起来是这么回事。除了修正的对数基数更改外,这看起来像Arnauld的方法。
与Orjan约翰森

2

05AB1E,13个字节

使用Arnauld的JS答案中的方法

2F.²IIm*ˆ}¯`›

在线尝试!


这不会因a1 = 20,a2 = 20,a3 = 20而终止。
Anush

1
@Anush:似乎在不到一秒钟的时间内就终止了。
Emigna

您必须将所有变量设置为20。请参见tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Anush

@Anush:啊,你是说b1=b2=b3=20,是的,这不会终止。
Emigna

1
@Anush:现在修复。感谢您指出我的错误:)
Emigna

2

Excel,28个字节

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

Excel实现已使用相同的公式。


我的理解是Excel的精度为15位,因此在某些情况下,四舍五入会导致返回错误的答案。
累积

2

JavaScript,51个字节

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

令人惊讶的是,测试用例没有显示任何浮点错误。我不知道它是否能达到这个尺寸。

这只是比较数字的对数。

平等容忍度等于1e-8


欢迎来到PPCG!las,这确实在我的2^3^12 == 8^3^11测试用例中失败了。实际上,您的答案与Arnauld的原始答案非常相似(被删除,而不是固定的),这启发了大多数失败的人。
与Orjan约翰森

@ØrjanJohansen 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应该安全地在中间加上相同的字节长。
与Orjan约翰森

@ØrjanJohansen好的,谢谢!
Naruyoko

1

bc -l,47个字节

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

从读取的输入 STDIN,每行一个整数。

bc相当快;它可以在我的笔记本电脑上处理a = b = c = d = e = f = 1,000,000一点点的时间。


我爱不列颠哥伦比亚省的答案!现在只需要一个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);}

在线尝试!

将输入作为6整数数组。如果返回1一种bC>dËF,否则为0。


log两次服用后的配方应为i[2]*log(i[1])+log(log(*i))。例如当前的失败2^2^20 > 4^2^18
与Orjan约翰森

@ØrjanJohansen:好收获!我想我pow那时必须使用该方法。
尼尔·A。

另一个有2^3^12 == 8^3^11我为其他人指出的问题。
与Orjan约翰森

@ØrjanJohansen:好吧,我想我正在使用您的固定公式。
尼尔·A。

哦,恐怕这个公式在数学上是正确的。它仍然存在一个浮点错误问题,只是大小写不同2^3^20 == 8^3^19。实际上,幂方法平均不会失败,可能是因为它倾向于乘以2的幂。其他人已经通过稍微调整使其成功了。
与Orjan约翰森

1

果冻,8字节

l⁵×*/}>/

在线尝试!

基于Arnauld的JS answer。期望作为输入[a1, b1]作为左参数和[[a2, b2], [a3, b3]]右参数。

现在更改为使用以10为底的对数,它可以正确处理指定范围内的所有可能输入。感谢ØrjanJohansen找到了原来的问题!


1
我相信这失败了2^3^12 == 8^3^11
与Orjan约翰森

你的Python TIO是不正确。你有8*来代替8**。@ØrjanJohansen确实是正确的,这2**(3**12) > 8**(3**11)是错误的,因为它们相等。
凯文·克鲁伊森

@KevinCruijssen糟糕。是的,他们确实是平等的。原始两个标记为不同的原因与浮点错误有关。
尼克·肯尼迪

1

TI-BASIC,27 31字节

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

输入的是长度列表 6Ans
如果第一个大数字大于第二个大数字,则输出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。这不一定会导致与原始不等式相同的排序。
尼克·肯尼迪

@NickKennedy是的,您是正确的!我将更新帖子以解决此问题。

1

APL(NARS),字符36,字节72

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

在下面的函数中,如果a ^(b ^ c)> x ^(y ^ t)中的函数z在(abc)z(xyt)中将返回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))),如果a = 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时,日志log 1不存在,因此我选择用数字-1表示它;当a = 2时,log log a是一个负数,但> -1。

PS。可以看到定义了较大功能的功能

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

1..20中出现的a,b,c范围太小...如果看到它以对数为底10溢出,则a,b,c的范围对于64位可能为1.10000000或更大浮点型。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.