Güçlerin karşılaştırılması.


13

İki sayı K karşılaştır 1 = bir b C , N 2 = d e f bir fonksiyon f (a, b, c, d, e, f) bu oluşturarak:

  • N 1 > N 2 ise 1 döndürür
  • N 1 <N 2 ise -1 değerini döndürür

Not: Bu N arasında herhangi bir ilişki için herhangi bir değer iade için gerekli değildir 1 ve N 2 . örneğin eşit olduklarında veya ilişkileri tanımlanmadığında (karmaşık sayılar).

diğer kısıtlamalar:

  • tüm sayılar tamsayıdır
  • a, b, c, d, e, f pozitif veya negatif olabilir ancak sıfır olmayabilir.
  • | A |, | d | <1000
  • b |, | c |, | e |, | f | <10 10
  • çalışma süresi birkaç saniyeden az

Örnekler:

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

Bu kod golf. En kısa kod kazanır.


3
Eşitlerse 0'a dönmeli midir? Yoksa N1'in N2'ye eşit olması mümkün olmadığını mı düşünüyorsunuz?
Jonathan M Davis

Bazı örnek giriş / çıkışlar alabilir miyiz?
Dogbert

@Jonathan: "Eşit olmak" durumunu bilerek belirtmiyorum. İstediğiniz gibi yapın. Hatta asla eşit olmadıklarını varsayabilirsiniz.
Eelvex

@Dogbert: bitti.
Eelvex

b |, | c |, | e |, | f | <10 ^ 10 son örneğinizle çelişiyor gibi görünüyor
Dr. belisarius

Yanıtlar:


3

Mathematica, 110 karakter

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]]]

Orada ne tür bir Mathematica kullanıyorsunuz ve bunun işe yaraması için hangi büyü büyüsünün kullanılması gerekiyor? Yukarıdakileri Mathematica 8'e koymak sadece »Sözdizimi :: bktwrn komutunu verir:" z (a_, b_, c_, d_, e_, f_) "çarpmayı temsil eder; bir işlevi temsil etmek için "z [a_, b_, c_, d_, e_, f_]" kullanın. «ve» Sözdizimi :: sntxf: "z (a_" ifadesini ", b_, c_, d_, e_, f_ takip edemez ): = sgn (ln (abs a) b ^ c-ln (abs d) e ^ f) ".«
Joey

3,-3,3,-4,1,1Tamamen yanılmıyorsam , testta başarısız oluyor (burada Mathematica yok, ancak Wolfram Alpha kabul ediyor gibi görünüyor ).
Ventero

Tamam, şimdi z[a_,b_,c_,d_,e_,f_]:=Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]orada var olandan çok daha uzun olan işe aldım . Muhtemelen burada bir şey eksik.
Joey

@Joey, aslında Mathematica'm yok, bu yüzden Wolfram Alpha arayüzü ile test yapıyordum. Kabul ettiği şeyle çok daha cömert görünüyor. Ah iyi - öncelik, @Ventero'nun mantıkla ilgili bir hatayı doğru şekilde işaret etmesidir.
Peter Taylor

Bunun için "birkaç saniyeden daha kısa sürede" çalışır z[535, 10^9, 10^8, 443, 10^9, 10^9]mı?
Eelvex

7

Yakut 1.9, 280227989 171 karakter

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}

Bunun diğer çözümlerden biraz daha uzun olduğunu biliyorum , ama en azından bu yaklaşım bir b c , d e f , b c veya e f hesaplanmadan çalışmalıdır .

Düzenle:

  • (279 -> 280) Ne zaman a**b**c < 0ve bir hata düzeltildi d = 1.
  • (280 -> 227) Özel bir durum için gereksiz kontrol kaldırıldı.
  • (227 -> 192) Verilen ölçütlerle gerekli olmayan bazı kontroller kaldırıldı (sıfır olmayan tamsayılar, karmaşık değerler için çıktıya gerek yok)
  • (192 -> 189) Tüm diğer kontroller nedeniyle, log(log(a)/log(d))yerine güvenli bir şekilde hesaplayabilirim log(log(a))-log(log(d)).
  • (189 -> 171) Eşdeğer problemleri birbirine dönüştürmenin basitleştirilmiş yolu.

testcases:

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 bayt

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

Uygulama tam olarak açıklanan uygulama değildir, ancak çalışır.

ShortScript bu zorluğun ardından yayınlandığından bu yanıt rakipsizdir.


0

Python 2.6 (bu aslında işe yaramıyor)

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)

bugün python karmaşık bir günlük işlevi vardır öğrendim. bu nedenle, her iki tarafı körü körüne iki günlüğe kaydedin ve gerçek bileşene bakın. 5 testin 4'ünde çalışır. dördüncüsü ile ne olduğundan emin değilim.

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

Şey, yanlış örneği berbat ettim: / Üzgünüm ...
düzeltiyorum

a = 100
horozlar

Sadece gerçek kısmı karşılaştırmak doğru değildir.
Eelvex

evet, bu kısım karanlıkta bir bıçaktı. karmaşık analizde bu kursu atladığım için pişmanlık
duyduğum yer

-1

Python (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
Negatifler başarısız.
JB

-2

Haskell, 44 karakter

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

Tüm deney örnekleri için bir saniyenin altında çalışır benim makinede.


Gelecekten bir süper makinem var.
Thomas Eding

Ayrıca makine kodu oldukça optimize edilmiştir. Derlenmiş kodun incelenmesi, logaritma ve diğer işlemleri yapar. THC (Trinithis Haskell Derleyici) akıllı bir derleyicidir !!! GHC veya Hugs kullanmam gerektiğini kim söyledi? Aslında, GHC bağımlılığı olan derleyicim için gerçek kaynak kodu sağlayabilirim. Makinenizde / makinenizde bile bu kaynak kodu için hızlı kod üretir. Dahası, HERHANGİ BİR Haskell programını GHC ile aynı doğrulukta derleyecektir (GHC arka uçtur).
Thomas Eding

@downvoters: Derleyicimin hızlı bir şekilde çalıştığını kanıtlaması için tüm kaynak kodunu bu hafta sonu (bir süre evde olmayacağım) sağlayacağım. Dil hızı hakkında konuşmak saçmadır, çünkü hepsi derleyiciye / yorumlayıcıya kaynar.
Thomas Eding

Ve saçma hız / verimlilikten bile bahsetmiyordum. Ben nasıl atıfta bulundu (eğer yazı düzenlenebilir ve işlevi değişti ÖNCE biçin nfonksiyon f tipi tarafından verildi) f :: (Ord a, Num a, Integral b2, Integral (Bool -> t), Integral b, Integral b1) => a -> (Bool -> t) -> b -> a -> b1 -> b2 -> tOldukça tuhaf şeyler, ha?
eternalmatt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.