パワーの比較。


13

次の関数f(a、b、c、d、e、f)を作成して、2つの数値N 1 = a b c、N 2 = d e fを比較します。

  • N 1 > N 2の場合、1を返します
  • N 1 <N 2の場合、-1を返します

注: N 1とN 2の間の他の関係に値を返す必要はありません。例えば、それらが等しい場合、またはそれらの関係が定義されていない場合(複素数)。

その他の制約:

  • すべての数字は整数です
  • a、b、c、d、e、fは正でも負でもかまいませんが、ゼロではありません。
  • | a |、| d | <1000
  • | b |、| c |、| e |、| f | <10 10
  • 実行時間が数秒未満

例:

f(100,100,100,50,100,100) = 1
f(-100,100,100,50,100,100) = 1
f(-100,99,100,50,100,100) = -1
f(100,-100,-100, -1, 3, 100) = 1
f(535, 10^9, 10^8, 443, 10^9, 10^9) = -1

これはコードゴルフです。最短のコードが優先されます。


3
それらが等しい場合はどうですか、0を返す必要がありますか?または、N1がN2に等しくなる方法がないと仮定しますか?
ジョナサンMデイビス

サンプルの入出力を取得できますか?
ドグバート

@ジョナサン:意図的に「等しい」ケースを指定していません。好きにしてください。それらは決して等しくないと仮定することさえできます。
エルベックス

@Dogbert:できました。
エルベックス

| b |、| c |、| e |、| f | <10 ^ 10は最後の例と矛盾しているようです
ベリサリウス博士11

回答:


3

Mathematica、110文字

z[a_,b_,c_,d_,e_,f_]:=With[{g=Sign[a]^(b^c),h=Sign[d]^(e^f)},If[g!=h,g,g*Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]]]

そこではどのようなMathematicaを使用していますか。実際にこれを機能させるには、どの魔法の呪文を使用する必要がありますか?上記をMathematica 8に入れると»Syntax :: bktwrn: "z(a_、b_、c_、d_、e_、f_)"は乗算を表します。「z [a_、b_、c_、d_、e_、f_]」を使用して関数を表します。«および»Syntax :: sntxf:「z(a_」の後に「、b_、c_、d_、e_、f_ ):= sgn(ln(abs a)b ^ c-ln(abs d)e ^ f)」。«
ジョーイ

3,-3,3,-4,1,1私が完全に間違っていない場合、テストケースに失敗します(ここにはMathematicaはありませんが、Wolfram Alpha は同意しているようです)。
ヴェンテロ

わかりました、それで動作するようにz[a_,b_,c_,d_,e_,f_]:=Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]なりました。私はおそらくここで何かを見逃しています。
ジョーイ

@Joey、私は実際にMathematicaを持っていないので、Wolfram Alphaインターフェースでテストしていました。それが受け入れるものではるかに寛大であるように見えます。ああ、優先順位は@Venteroがロジックのバグを正しく指摘することです。
ピーターテイラー

それは「数秒以内に実行」されz[535, 10^9, 10^8, 443, 10^9, 10^9]ますか?
エルベックス

7

Ruby 1.9、 280227 189 171文字

z=->a,b,c,d,e,f{l=->a{Math.log a}
u=->a,b{[a.abs,a][b&1]}
a=u[a,b=u[b,c]]
d=u[d,e=u[e,f]]
d*a<0?a<=>d :b*e<0?b<=>e :(l[l[a*q=a<=>0]/l[d*q]]<=>f*l[e*r=b<=>0]-c*l[b*r])*q*r}

私はこれが他のソリューションよりも少し長いことを知っていますが、少なくともこのアプローチはa b c、d e f、b cまたはe fを計算せずに動作するはずです。

編集:

  • (279-> 280)a**b**c < 0およびの場合のバグを修正しましたd = 1
  • (280-> 227)特別な場合の不要なチェックを削除しました。
  • (227-> 192)与えられた基準では必要ないチェックを削除しました(非ゼロ整数、複素数値の出力は不要です)
  • (192-> 189)他のすべてのチェックにより、のlog(log(a)/log(d))代わりに安全に計算できlog(log(a))-log(log(d))ます。
  • (189-> 171)同等の問題を相互に変換する簡単な方法。

テストケース:

z[100, 100, 100, 50, 100, 100] == 1
z[-100, 100, 100, 50, 100, 100] == 1
z[-100, 99, 100, 50, 100, 100] == -1
z[100, -100, -100, -1, 3, 100] == 1
z[535, 10**9, 10**8, 443, 10**9, 10**9] == -1
z[-1, -1, 1, 2, 2, 2] == -1
z[1, -5, -9, 2, -1, 2] == -1
z[1, -5, -9, 2, -1, 3] == 1
z[3, -3, 3, -4, 1, 1] == 1
z[-2, 1, 1, 1, 1, 1] == -1
z[1, 1, 1, -1, 1, 1] == 1
z[1, 1, 1, 2, 3, 1] == -1
z[1, 1, 1, 2, -3, 2] == -1
z[1, 1, 1, 2, -3, 1] == 1
z[-1, 1, 1, 1, 1, 1] == -1
z[2, 3, 1, 1, 1, 1] == 1
z[2, -3, 2, 1, 1, 1] == 1
z[2, -3, 1, 1, 1, 1] == -1

1

ShortScript、89バイト

{CP
$M^ η1 η2
$M^ ζ η3
↑Αζ
$M^ η4 η5
$M^ ζ η6
↔α>ζ↑Ζ1
↔α<ζ↑Ζ-1}

実装は正確に説明されたものではありませんが、機能します。

Shortチャレンジはこのチャレンジの後に公開されているため、この答えは競合しません。


0

Python 2.6(これは実際には機能しません)

import cmath
g=cmath.log
f=lambda a,b,c,d,e,f:-1+2*((c*g(b)+g(g(a))-f*g(e)-g(g(d))).real>0)

今日、私はPythonが複雑なログ機能を持っていることを学びました。したがって、盲目的に両側を二重に記録し、実際のコンポーネントを調べます。5つのテストのうち4つで動作します。4番目のもので何が起こっているのか分かりません。

print f(100,100,100,50,100,100) == 1
print f(-100,100,100,50,100,100) == 1
print f(-100,99,100,50,100,100) == -1
print f(100,-100,-100, -1, 3, 100) == 1 # failure, sadness.
print f(535, 10^9, 10^8, 443, 10^9, 10^9) == -1

まあ、それは間違っている例を台無しにしたということです:/申し訳ありません...それを修正しています
...-Eelvex

私のコードは、a = 100の場合に間違った4番目の例で-1を返します
11

実部だけを比較するのは正しくありません。
エルベックス

ええ、その部分は暗闇の中で刺しました。これは、複雑な分析でそのコースをスキップしたことを後悔している場所です
-roobs

-1

パイソン(99)

from math import*
from numpy import*
l=log
def f(a,b,c,d,e,f):return sign(l(a)*l(b)*c-l(d)*l(e)*f)

8
ネガでは失敗します。
JB

-2

Haskell、44文字

n True=1
n _=1-2
g a b c d e f=n$a^b^c>d^e^f

私のマシンのすべてのテスト例で1秒未満で実行されます。


私には未来のスーパーマシンがあります。
トーマスエディング

また、マシンコードは高度に最適化されています。コンパイルされたコードを検査し、対数やその他の操作を行います。THC(Trinithis Haskell Compiler)は1つのスマートコンパイラです!!! GHCまたはHugsを使用しなければならないと言ったのは誰ですか?実際、GHCに依存するコンパイラーの実際のソースコードを提供できます。/ your /マシン上でも、このソースコードの高速コードを出力します。さらに、GHSと同じ程度の精度でHaskellプログラムをコンパイルします(GHCはバックエンドです)。
トーマスエディング

@downvoters:今週末(しばらく家に帰りません)、すぐに実行できることをコンパイラーに証明するために、ソースコード全体を提供します。言語速度について話すのはナンセンスです。それはすべてコンパイラー/インタープリターに帰着するからです。
トーマスエディング

そして、私はでたらめな速度/効率についても話していなかった。私は(投稿を編集して関数bをに変更する前にn)関数fのタイプがf :: (Ord a, Num a, Integral b2, Integral (Bool -> t), Integral b, Integral b1) => a -> (Bool -> t) -> b -> a -> b1 -> b2 -> tかなり奇妙なものによって与えられた方法について言及していましたよね?
エターナルマット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.