どの大きな数字が大きいですか?


22

入力

整数a1、a2、a3、b1、b2、b3はそれぞれ1〜20の範囲です。

出力

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

^は、この質問のべき乗です。

ルール

これはコードゴルフです。標準のデスクトップPCで有効な入力を行うには、10秒以内にコードを正しく終了する必要があります。

Trueの場合はTruthy、Falseの場合はFalseyを出力できます。

回答で指定されていて、常に同じである限り、任意の入力順序を想定できます。

この質問では、コードは常に正しいはずです。つまり、浮動小数点の不正確さが原因で失敗することはありません。入力の範囲が制限されているため、これを達成するのはそれほど難しくないはずです。

テストケース

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

Perl 6の31の 29バイト

-Grimyのおかげで2バイト

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

オンラインでお試しください!

信じられないかもしれませんが、大部分がアスタリスクで構成されていても、これはエソランではありません。これはArnauldの式を使用し、lnの代わりにlog10を使用します。


私はこれが失敗すると信じています2^3^12 == 8^3^11
Ørjanヨハンセン

@ØrjanJohansenこれは今修正されるべきです。それが他の何かのために失敗した場合私に知らせてください
ジョーキング


@Grimyありがとう!私は...私はそれを試してみました宣誓している可能性が
ジョー・キング


6

05AB1E11 9 11 7 バイト

.²Šm*`›

@ArnauldのJavaScript@digEmAllのRアプローチポート(同じ時期に投稿しました)@Arnauld@digEmAllの回答が含まれた 後、バグ修正として@Emigna +2バイトの
おかげで-2バイト@LuisMendoのコメントの 後に異なる入力順序が許可されたため、エラー-4バイト

入力し[a1,b1][a3,b3][a2,b2]3つの分離の入力として。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

       # 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
2番目のバージョンはεć.²š] P`›になります
Emigna

@Emignaああ、私はでアプローチを検討していましたが、ć使用することを完全に忘れていましたš(なぜ私がそれを見るのか分かりません、ハハ)。ありがとう!
ケビンクルーッセン

これは間違っているようです(最近の修正までArnauldの答えが間違っていたため)。
アヌーシュ

@Anush修正され、入力を異なる順序で取得することで4バイトが節約されました。:)
ケビン・クルーッセン

5

Java(JDK)、56バイト

(a,b,c,d,e,f)->a>Math.pow(d,Math.pow(e,f)/Math.pow(b,c))

オンラインでお試しください!

クレジット


私はこれが失敗すると信じています2^3^12 == 8^3^11
Ørjanヨハンセン

@ØrjanJohansen修正
オリビエグレゴワール

4

これは、a1 = 20、a2 = 20、a3 = 20で終了しません。
アヌーシュ

固定@Anush ...
J42161217

1
オーバーフローについては残念ですが、それ以外の場合##>0&@@(##^1&@@@#)&はわずか19バイトであり、上記のコードよりも驚くほど非Mathematicaに似ています。(入力形式{{a,b,c},{d,e,f}}
グレッグマーティン

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のテストケースを実行できなくなります。
Ørjanヨハンセン

ただし、66バイトですべてが修正されるはずです。
アルテミスはモニカを

私はこれが失敗すると信じています2^3^12 == 8^3^11
Ørjanヨハンセン

@ØrjanJohansenを修正する必要があります
ArtemisはMonica

それのように思えます。修正のための対数ベースの変更は別として、これはArnauldの方法のように見えます。
Ørjanヨハンセン

2

05AB1E、13バイト

ArnauldのJSアンサーのメソッドを使用します

2F.²IIm*ˆ}¯`›

オンラインでお試しください!


これは、a1 = 20、a2 = 20、a3 = 20で終了しません。
アヌーシュ

1
@Anush:私には1秒もかからずに終了するようです。
エミグナ

すべての変数を20に設定する必要があります。tio.run/ ## yy9OTMpM / f9f79Du3GK9Q6tzHzXs @ v8 / 2shAB4xiuRBMAA
Anush

@Anush:ああ、b1=b2=b3=20そう、それは終わらない。
エミグナ

1
@Anush:現在修正されています。私の間違いを指摘してくれてありがとう:)
エミグナ

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へようこそ!悲しいかな、これは私の2^3^12 == 8^3^11テストケースでは失敗します。実際、あなたの答えは、失敗した人のほとんどに影響を与えたArnauldによる元の答え(修正ではなく、削除された)と非常に似ています。
Ørjanヨハンセン

@ØrjanJohansen l(h)は右に移動しましたが、今は動作するでしょうか?編集:待って、そうではありません。
鳴代

等値許容差を追加しました0.01
鳴代

クイック検索を実行しましたが、許容値は機能するはずですが、これは少し高すぎます。除外する必要がある最高のものは(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ヨハンセン

@ØrjanJohansenわかりました、ありがとう!
鳴代子

1

bc -l、47バイト

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

入力がから読み取られSTDIN、1行に1つの整数。

bcかなり速いです。私のラップトップではa = b = c = d = e = f = 1,000,000を1秒強で処理します。


私は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);}

オンラインでお試しください!

入力を6整数配列として受け取ります。場合 1を返しますabc>def


log2回服用した後の式はでなければなりませんi[2]*log(i[1])+log(log(*i))。例えば、現在のものはに失敗し2^2^20 > 4^2^18ます。
Ørjanヨハンセン

@ØrjanJohansen:良いキャッチ!そのpow方法を使用する必要があると思います。
ニールA.

別の方法には、他の人に2^3^12 == 8^3^11指摘した問題があります。
Ørjanヨハンセン

@ØrjanJohansen:さて、私はあなたの固定式を使用していると思います。
ニールA.

ああ、数式は数学的に正しいだけだと思います。浮動小数点エラーの問題がありますが、ケースが異なり2^3^20 == 8^3^19ます。事実、平均で2のべき乗を正確に乗算する傾向があるため、平均でベキ乗法は失敗します。他の人は、わずかに微調整するだけで何とか機能させることができました。
Ørjanヨハンセン

1

ゼリー、8バイト

l⁵×*/}>/

オンラインでお試しください!

ArnauldのJS回答に基づきます。入力[a1, b1]として左引数および[[a2, b2], [a3, b3]]右引数として期待します。

指定された範囲内のすべての可能な入力を正しく処理する限り、ベース10へのログを使用するように変更されました。元の問題を発見してくれたØrjanJohansenに感謝します!


1
私はこれが失敗すると信じています2^3^12 == 8^3^11
Ørjanヨハンセン

あなたのPython TIOが間違っている..あなたが持っている8*代わりに8**。@ØrjanJohansenは2**(3**12) > 8**(3**11)等しいので、それは間違いです。
ケビンクルーッセン

@KevinCruijssenおっと。はい、彼らは本当に平等です。元の2つが異なるものとしてマークされている理由は、浮動小数点エラーに関連しています。
ニックケネディ

1

TI-BASIC、27 31バイト

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

6Ans

例:

{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}¨⍺⍵}

以下の(abc)z(xyt)の関数zは、a ^(b ^ c)> x ^(y ^ t)elseが0を返す場合に1を返します。テスト

  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))and aa = a ^(b ^ c)with a、b、c> 0 and a> 1 bb = x ^(y ^ t)with 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 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以上になるフロート型。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.