तुलना करने वाली शक्तियाँ।


13

एक फ़ंक्शन च (ए, बी, सी, डी, ई, एफ) का निर्माण करके दो नंबरों एन 1 = ए बी सी , एन 2 = डी एफ की तुलना करें :

  • 1 अगर N 1 > N 2 मिलता है
  • रिटर्न -1 अगर एन 1 <एन 2

नोट: आपको N 1 और N 2 के बीच किसी अन्य संबंध के लिए कोई मूल्य वापस करने की आवश्यकता नहीं है । जैसे जब वे समान होते हैं या जब उनका संबंध अपरिभाषित होता है (जटिल संख्याएँ)।

अन्य बाधाएं:

  • सभी संख्या पूर्णांक हैं
  • ए, बी, सी, डी, ई, एफ सकारात्मक या नकारात्मक हो सकता है लेकिन शून्य नहीं।
  • | एक |, | घ | <1000
  • | ख |, | ग |, | ई |, | च | <१० १०
  • कुछ सेकंड से कम का समय

उदाहरण:

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 वापस करना चाहिए? या आप मान रहे हैं कि कोई रास्ता नहीं है कि एन 1 एन 2 के बराबर होगा?
जोनाथन एम डेविस

क्या हम कुछ नमूना इनपुट / आउटपुट प्राप्त कर सकते हैं?
डॉगबर्ट

@ जोनाथन: मैं उद्देश्य पर "समान होने" के मामले को निर्दिष्ट नहीं कर रहा हूं। जैसा आपको ठीक लगे वैसा हीं करे। आप यह भी मान सकते हैं कि वे कभी भी समान नहीं हैं।
Eelvex

@ डॉगबर्ट: किया।
Eelvex

| ख |, | ग |, | ई |, | च | <10 ^ 10 आपके अंतिम उदाहरण के विपरीत प्रतीत होता है
डॉ। बेलिसरियस

जवाबों:


3

गणितज्ञ, 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]]]

वहां आप किस तरह के गणितज्ञ का उपयोग करते हैं और वास्तव में काम करने के लिए कौन से जादू की मुद्रा का उपयोग करना पड़ता है? उपरोक्त को गणितज्ञ Put में डालने से पैदावार होती है »सिंटैक्स :: bktwrn:" z (a_, b_, c_, d_, e_, f_) "गुणा का प्रतिनिधित्व करता है; एक फ़ंक्शन का प्रतिनिधित्व करने के लिए "z [a, b_, c_, d_, e_, f_]" का उपयोग करें। «और» सिंटैक्स :: 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, अगर मुझे पूरी तरह से गलत नहीं किया गया है (यहां गणितज्ञ नहीं है, लेकिन वोल्फ्राम अल्फा सहमत हैं )।
वेंटरो

ठीक है, अब इसके साथ काम करने के लिए मिला, z[a_,b_,c_,d_,e_,f_]:=Sign[Log[Abs[a]]b^c-Log[Abs[d]]e^f]जो आपके पास वहां की तुलना में काफी लंबा है, हालांकि। मुझे शायद यहाँ कुछ याद आ रहा है।
जोए

@ जॉय, मेरे पास वास्तव में गणितज्ञ नहीं है, इसलिए मैं वुल्फराम अल्फा इंटरफ़ेस के साथ परीक्षण कर रहा था। ऐसा प्रतीत होता है कि यह जितना स्वीकार करता है उससे कहीं अधिक उदार है। अच्छी तरह से - प्राथमिकता यह है कि @Ventero सही ढंग से तर्क के साथ एक बग को इंगित करता है।
पीटर टेलर

क्या यह "कुछ सेकंड से भी कम समय में चलेगा" z[535, 10^9, 10^8, 443, 10^9, 10^9]?
बारह

7

रूबी 1.9, 280 227 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}

मुझे पता है कि यह अन्य समाधानों की तुलना में थोड़ा लंबा है, लेकिन कम से कम इस दृष्टिकोण को बी सी , डी एफ , बी सी या ई एफ की गणना के बिना काम करना चाहिए ।

संपादित करें:

  • (279 -> 280) जब a**b**c < 0और एक बग फिक्स्ड d = 1
  • (280 -> 227) एक विशेष मामले के लिए एक अनावश्यक जांच को हटा दिया।
  • (२२ that -> १ ९ २) दिए गए मानदंड (गैर-शून्य पूर्णांक, जटिल स्तर पर कोई आउटपुट आवश्यक नहीं) के साथ कुछ चेक हटा दिए गए हैं
  • (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

शॉर्टस्क्रिप्ट , 89 बाइट्स

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

कार्यान्वयन बिल्कुल वर्णित नहीं है, लेकिन यह काम करता है।

यह उत्तर गैर-प्रतिस्पर्धात्मक है, क्योंकि इस चुनौती के बाद शॉर्टस्क्रिप्ट प्रकाशित किया गया है।


0

अजगर 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)

आज मैंने सीखा कि अजगर के पास एक जटिल लॉग फ़ंक्शन है। इसलिए, नेत्रहीन दोनों पक्षों को डबल लॉग करें और वास्तविक घटक को देखें। 5 परीक्षणों में से 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

खैर, यह है कि मैंने उदाहरण को गड़बड़ कर दिया है जो गलत है: / क्षमा करें ... इसे ठीक कर रहा है ...
EXx

मेरा कोड अभी भी चौथे उदाहरण के लिए -1 रिटर्न गलत है जब एक = 100
roobs

सिर्फ वास्तविक भाग की तुलना करना सही नहीं है।
23

हाँ, वह हिस्सा अंधेरे में एक छुरा था। यह वह जगह है जहाँ मुझे जटिल विश्लेषण में उस कोर्स को छोड़ देने का पछतावा है
9


-2

हास्केल, 44 वर्ण

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

मेरी मशीन पर सभी परीक्षण उदाहरणों के लिए एक सेकंड के तहत चलता है ।


मेरे पास भविष्य से एक सुपरमेकिन है।
थॉमस ईडिंग

इसके अलावा मशीन कोड अत्यधिक अनुकूलित है। संकलित कोड का निरीक्षण, यह लघुगणक और अन्य संचालन करता है। THC (ट्रिनिथिस हास्केल कंपाइलर) एक स्मार्ट कंपाइलर है !!! किसने कहा कि मुझे GHC या Hugs का उपयोग करना था? वास्तव में, मैं अपने संकलक के लिए वास्तविक स्रोत कोड प्रदान कर सकता हूं जिसमें GHC निर्भरता है। यह इस स्रोत कोड के लिए / आपके / मशीन पर भी तेज कोड का उत्पादन करेगा। क्या अधिक है, यह किसी भी हास्केल कार्यक्रम को सटीकता के समान डिग्री के लिए संकलित करेगा क्योंकि जीएचसी (जीएचसी बैकएंड है)।
थॉमस एडिंग

@downvoters: मैं आपके कंपाइलर को यह साबित करने के लिए इस सप्ताह के अंत में पूरे स्रोत कोड प्रदान करूँगा (मैं थोड़ी देर के लिए घर नहीं जाऊँगा)। भाषा की गति के बारे में बात करना बकवास है, क्योंकि यह सभी संकलक / दुभाषिया को उबालता है।
थॉमस ईडिंग

और मैं भी बकवास गति / दक्षता के बारे में बात नहीं कर रहा था। मैं इस बात का जिक्र कर रहा था कि कैसे (पहले आपने पोस्ट को संपादित किया था और फ़ंक्शन bको बदल दिया था n) फंक्शन का प्रकार f :: (Ord a, Num a, Integral b2, Integral (Bool -> t), Integral b, Integral b1) => a -> (Bool -> t) -> b -> a -> b1 -> b2 -> tबहुत अजीब सामान, हुह द्वारा दिया गया था ?
शाश्वत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.