प्रतिबंधित संचालन के साथ गुणा करें


44

वहाँ एक है 500 प्रतिनिधि अनौपचारिक इनाम को पीछे छोड़ते हुए वर्तमान सर्वश्रेष्ठ उत्तर

लक्ष्य

आपका लक्ष्य अंकगणित संचालन और चर असाइनमेंट के केवल बहुत सीमित सेट का उपयोग करके दो संख्याओं को गुणा करना है।

  1. इसके अलावा x,y -> x+y
  2. पारस्परिक x -> 1/x( विभाजन नहींx,y -> x/y )
  3. नकारात्मकता x -> -x( घटाव नहींx,y -> x-y , हालांकि आप इसे दो कार्यों के रूप में कर सकते हैं x + (-y))
  4. स्थिरांक 1(कोई अन्य स्थिरांक की अनुमति नहीं है, सिवाय इसके संचालन से उत्पन्न 1)
  5. परिवर्तनशील कार्य [variable] = [expression]

स्कोरिंग: मान चर में शुरू होते हैं aऔर b। आपका लक्ष्य अपने उत्पाद को संभव के रूप में कुछ संचालन का उपयोग करके a*bचर में सहेजना cहै। प्रत्येक ऑपरेशन और असाइनमेंट में +, -, /, =एक बिंदु (समकक्ष, प्रत्येक (1), (2), (3), या (4)) का उपयोग होता है। लगातार 1स्वतंत्र हैं। सबसे कम-बिंदु समाधान जीतता है। टाईब्रेक जल्द से जल्द पोस्ट है।

भत्ता: आपका अभिव्यक्ति "यादृच्छिक" reals के लिए हिसाब से सही हो गया है aऔर b। यह का एक उपाय शून्य सबसेट पर असफल हो सकता है आर 2 , यानी एक सेट है कि कोई क्षेत्र है, तो में साजिश रची है a- bकार्तीय तल। (अभिव्यक्ति के पारस्परिक होने के कारण इसकी आवश्यकता होने की संभावना है जो कि हो सकती 0है 1/a।)

व्याकरण:

यह एक । किसी अन्य ऑपरेशन का उपयोग नहीं किया जा सकता है। विशेष रूप से, इसका अर्थ है कोई फ़ंक्शन, सशर्त, लूप या गैर-संख्यात्मक डेटा प्रकार। यहां अनुमत कार्यों के लिए एक व्याकरण है (संभावनाएं अलग हो जाती हैं |)। एक प्रोग्राम एस का एक क्रम है <statement>, जहां एक <statement>निम्नलिखित के रूप में दिया गया है।

<statement>: <variable> = <expr>
<variable>: a | b | c | [string of letters of your choice]
<expr>: <arith_expr> | <variable> | <constant>
<arith_expr>: <addition_expr> | <reciprocal_expr> | <negation_expr> 
<addition_expr>: <expr> + <expr>
<reciprocal_expr>: 1/(<expr>)
<negation_expr>: -<expr>
<constant>: 1

आपको वास्तव में इस सटीक व्याकरण में कोड पोस्ट करने की ज़रूरत नहीं है, जब तक कि यह स्पष्ट है कि आप क्या कर रहे हैं और आपका ऑपरेशन काउंट सही है। उदाहरण के लिए, आप लिख सकते हैं a-bके लिए a+(-b)और दो आपरेशन के रूप में यह गिनती, या संक्षिप्तता के लिए मैक्रो निर्धारित।

( बहुविकल्पी के बिना एक पिछला प्रश्न बहुविकल्पी था , लेकिन इसने संचालन के एक बहुत ढीले सेट की अनुमति दी।)


4
क्या यह भी संभव है?
यपनिप

1
@Ypnypn हां, और मैंने यह सुनिश्चित करने के लिए एक उदाहरण लिखा है।
ज़नोर

2
यह एक चुनौती की तरह लगता है जहां एक इष्टतम समाधान मिलने की संभावना है (एक बार कोई समाधान मिल गया है)। तो उस मामले में टाई ब्रेकर क्या है?
मार्टिन एंडर

1
@ मार्टिनबटनर टाईब्रेक उस मामले में जल्द से जल्द पोस्टिंग है। मुझे लगता है कि अनुकूलन के लिए एक अच्छी मात्रा में जगह है, इसलिए मुझे नहीं लगता कि यह सिर्फ एक को खोजने के लिए एक दौड़ होगी जो काम करता है और इसे सफाई से लिखता है। कम से कम, कि मैंने इसे आज़माने में क्या पाया; शायद किसी को एक स्पष्ट रूप से न्यूनतम समाधान मिलेगा।
20

2
ठीक है, क्योंकि सभी ने नहीं सोचा था कि मेरा एवर मुझे जितना मजाकिया था, मैंने इसे हटा दिया और यहां टिप्पणी की: शून्य सेट के बारे में नियम बहुत बुद्धिमानी से नहीं चुना गया है क्योंकि तर्कसंगत संख्याएं लीबसर्ग माप के संबंध में एक माप शून्य सेट हैं, मैं सुझाव देता हूं। इसके बजाय एक निश्चित प्रतिशत का उपयोग कर। (या एक अन्य प्रकार) लेकिन मैं पूरी तरह से इस चुनौती का विचार पसंद करता हूं!
दोष

जवाबों:


34

22 ऑपरेशन

itx = 1/(1+a+b)     #4
nx = -1/(itx+itx)   #4
c = -( 1/(itx + itx + 1/(1+nx)) + 1/(1/(a+nx) + 1/(b+nx)) ) #14

इसे ऑनलाइन आज़माएं!

ऑप्स 10 परिवर्धन, 7 व्युत्क्रम, 2 निषेध और 3 असाइनमेंट हैं।

तो, मुझे यह कैसे मिला? मैंने दो डबल-डेकर अंशों के योग के होनहार-दिखने वाले टेम्प्लेट के साथ शुरू किया था, एक मोटिफ जो पिछले कई प्रयासों में दिखाई दिया था।

c = 1/(1/x + 1/y) + 1/(1/z + 1/w)

जब हम राशि को प्रतिबंधित करते हैं x+y+z+w=0, तो एक सुंदर निरस्तीकरण होता है:

c = (x+z)*(y+z)/(x+y),

जिसमें एक उत्पाद होता है। ( पहले की डिग्री 1 होने के t*u/vबजाय अक्सर प्राप्त करना आसान होता है t*u)

इस अभिव्यक्ति के बारे में सोचने का एक अधिक सममित तरीका है। प्रतिबंध के साथ x+y+z+w=0, उनके मूल्यों को p,q,rउनके जोड़ीदार योगों के तीन मापदंडों द्वारा निर्दिष्ट किया जाता है ।

 p = x+y
-p = z+w
 q = x+z
-q = y+w
 r = x+w
-r = y+z

और हमारे पास है c=-q*r/p। योग pजोड़े के लिए इसी से हर में होने के रूप में प्रतिष्ठित है (x,y)और (z,w)चर है कि एक ही अंश में हैं।

यह एक अच्छी अभिव्यक्ति cहै p,q,r, लेकिन डबल-डेकर अंश x,y,z,wइसलिए है कि हमें पूर्व को उत्तरार्द्ध के रूप में व्यक्त करना चाहिए:

x = ( p + q + r)/2
y = ( p - q - r)/2
z = (-p + q - r)/2
w = (-p - q + r)/2

अब, हम चुनना चाहते हैं p,q,rताकि c=-q*r/pबराबरी हो a*b। एक विकल्प है:

p = -4
q = 2*a
r = 2*b

फिर, के लिए दोगुना मान qऔर rआसानी से आधा हो गया है:

x = -2 + a + b
y = -2 - a - b
z =  2 + a - b
w =  2 - a + b

2एक चर के रूप में सहेजना tऔर इन्हें c24-ऑप सॉल्यूशन के लिए समीकरण में प्लग करना ।

#24 ops
t = 1+1   #2
c = 1/(1/(-t+a+b) + 1/-(t+a+b))  +  1/(1/(-b+t+a) + 1/(-a+b+t)) #1, 10, 1, 10

12 परिवर्धन, 6 व्युत्क्रम, 4 निषेध और 2 कार्य हैं।

बहुत सारे ऑप्स को x,y,z,wशब्दों में व्यक्त करने में खर्च किया जाता है 1,a,b। ऑप्स बचाने के लिए, बजाय व्यक्त xमें p,q,r(और इस तरह a,b,1) और फिर लिखने y,z,wके मामले में x

y = -x + p
z = -x + q
w = -x + r

का चयन

p = 1
q = a
r = b

और cएक नकार के साथ व्यक्त करते हुए c=-q*r/p, हम प्राप्त करते हैं

x = (1+a+b)/2
y = -x + 1
z = -x + a
w = -x + b

दुर्भाग्य से, आधा xकरना महंगा है। यह inverting द्वारा किया जाना चाहिए, परिणाम को खुद से जोड़ना और फिर से inverting करना होगा। हम भी उत्पादन के nxलिए नकारात्मक है -x, क्योंकि यह क्या y,z,wउपयोग है। यह हमें 23 सेशन समाधान देता है:

#23 ops
itx = 1/(1+a+b)     #4
nx = -1/(itx+itx)   #4
c = -( 1/(1/(-nx) + 1/(1+nx))  +  1/(1/(a+nx) + 1/(b+nx)) ) #15

itx1 / (2 * x) है और nxहै -x। व्यक्त करने का एक अंतिम अनुकूलन 1/xके रूप में itx+itxके बजाय टेम्प्लेट की गई 1/(-nx)कटौती एक चरित्र और 22 ऑप्स का हल नीचे लाता है।


21 ऑपरेशन के लिए एक आसान अनुकूलन है। itx + itxदो बार होता है, लेकिन itxकिसी अन्य संदर्भ में नहीं होता है। इसके बजाय परिभाषित करें ix = (1+1)/(1+a+b)और आप एक के साथ दो परिवर्धन को प्रतिस्थापित करते हैं।
पीटर टेलर

और निकालने m = -1से 20 को प्राप्त करना संभव है:nx = (1+a+b)/(m+m); c = m/(m/nx + 1/(1+nx)) + m/(1/(a+nx) + 1/(b+nx))
पीटर टेलर

3
आह, वे दोनों अनुकूलन विफल हो जाते हैं क्योंकि समर्थित ऑपरेशन विभाजन के बजाय पारस्परिक है।
पीटर टेलर

यदि aऔर bकेवल एक ही अलग है, तो या तो कर रहे हैं a + nx = 0या b + nx = 0शून्य से विभाजित करने के लिए अपने समाधान के कारण।
MooseOnTheRocks

1
@MooseOnTheRocks यह ठीक है, चुनौती में "भत्ता" देखें कि कोड एक माप-शून्य सबसेट पर विफल हो सकता है। मुझे लगता है कि चुनौती अन्यथा असंभव है।
xnor

26

23 ऑपरेशन

z = 1/(1/(1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1))-(1/a+1/b))
res = z+z

विस्फोट से सबूत:

z = 1/(1/(1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1))-(1/a+1/b))
             1/(a+1)+1/(b+1)                            == (a+b+2) / (ab+a+b+1)
          1/(1/(a+1)+1/(b+1))                           == (ab+a+b+1) / (a+b+2)
          1/(1/(a+1)+1/(b+1))-1                         == (ab - 1) / (a+b+2)
          1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1)             == ab / (a+b+2)
       1/(1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1))            == (a+b+2) / ab
                                              1/a+1/b   == (a+b) / ab
       1/(1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1))-(1/a+1/b)  == 2 / ab
    1/(1/(1/(1/(a+1)+1/(b+1))-1+1/(a+b+1+1))-(1/a+1/b)) == ab / 2

z = ab / 2 and therefore z+z = ab

मैंने इस खूबसूरत छवि को पाने के लिए वुल्फराम अल्फ़ा का दुरुपयोग किया (वुल्फराम अल्फ़ा ने मुझे बचाने के लिए सदस्यता लेने की कोशिश की, इसे बचाने के लिए, लेकिन फिर ctrl-c ctrl-v; ;-)):

स्कोर ( +घटाव पर जोड़ा गया):

z = ////++/++-+/++++-/+/
res = +

कम से कम समाधान पर बधाई!
xnor

@xnor मुझे मेरा पहला स्वीकृत जवाब देने के लिए धन्यवाद और मेरा पहला इनाम!
गर्वित हैकेलर

नाइट-पिकी नहीं होना चाहिए, लेकिन (b + 1) नहीं होना चाहिए - 1 + 1 ... और ... 1)) - (1 / a + ... होना चाहिए ... (b + 1) )) - + 1 + 1 ... और ... 1)) + - (1 / + a ... क्रमशः?
tfitzger

@tfitzger मुझे लगता है कि यह आसान है। सवाल यह कहता है कि इससे कोई फर्क नहीं पड़ता। नोट मैं स्कोर को सही ढंग से गिनता हूं (हर माइनस एक दो है)
गर्वित हैकेलर

वोल्फ्रम अल्फा में 7-दिवसीय नि: शुल्क परीक्षण है, फी।
भूत_न_थे_कोड

13

29 ऑपरेशन

सेट के लिए काम नहीं करता है {(ए, बी) | आर 2 | a + b = 0 या a + b = -1 या ab = 0 या ab = -1}। वह शायद शून्य को मापता है?

sum = a+b
nb = -b
diff = a+nb
rfc = 1/(1/(1/sum + -1/(sum+1)) + -1/(1/diff + -1/(diff+1)) + nb + nb)  # rfc = 1/4c
c = 1/(rfc + rfc + rfc + rfc)

# sum  is  2: =+
# nb   is  2: =-
# diff is  2: =+
# rfc  is 18: =///+-/++-//+-/+++
# c    is  5: =/+++
# total = 29 operations

rfcयदि हम एक स्थूल को परिभाषित करते हैं, तो (रेसिप्रोकल-फोर-सी) की संरचना अधिक स्पष्ट है:

s(x) = 1/(1/x + -1/(x+1))              # //+-/+ (no = in count, macros don't exist)
rfc = 1/(s(sum) + - s(diff) + nb + nb) # =/s+-s++ (6+2*s = 18)

चलो गणित करते हैं:

  • s(x), गणितीय रूप से, वह है 1/(1/x - 1/(x+1))जो बीजगणित के एक बिट के बाद है x*(x+1)या है x*x + x
  • जब आप सब कुछ उप में करते हैं rfc, तो यह वास्तव में है 1/((a+b)*(a+b) + a + b - (a-b)*(a-b) - a + b + (-b) + (-b))जो बस है 1/((a+b)^2 - (a-b)^2)
  • वर्गों के अंतर के बाद, या सिर्फ सादे विस्तार से, आपको वह मिल rfcजाता है 1/(4*a*b)
  • अंत में, c4 बार का पारस्परिक है rfc, इसलिए 1/(4/(4*a*b))बन जाता है a*b

2
+1, मैं इस समान गणना को पूरा करने के बीच में था
एरिक टेसलर

1
यह निश्चित रूप से शून्य को मापता है; यह लाइनों का एक संघ है।
21

संघ की पंक्तियों के बारे में कोई टिप्पणी न करें ... @algorithmshark क्या आप हमें और बता सकते हैं कि आप इस पहचान के साथ कैसे आए? आपको समस्या का सामना कैसे करना पड़ा?
दोष

1
@flawr मैंने याद किया कि s(x)प्रश्न की आवश्यकताओं को फिट करने के गुण , कैलकुलस से हैं, तो इसका मतलब है कि मेरे पास एक स्क्वायर फ़ंक्शन था। कुछ असफल होने के बाद, मैंने पाया कि मुझे a*bवर्गों की चाल के अंतर के साथ एक शब्द मिल सकता है । एक बार मेरे पास था, यह कोशिश करने का विषय था कि कौन से असाइनमेंट ने संचालन को बचाया।
एल्गोरिद्मशार्क

जब से आप -1तीन बार उपयोग करते हैं rfc, तो क्या आप एक वर्ण को एक चर में निर्दिष्ट करके बाहर नहीं निकाल सकते हैं?
isaacg

9

27 ऑपरेशन

tmp = 1/(1/(1+(-1/(1/(1+(-a))+1/(1+b))))+1/(1/(1/b+(-1/a))+1/(a+(-b))))
res = tmp+tmp+(-1)

# tmp is 23: =//+-//+-+/++///+-/+/+-
# res is 4: =++-

इसके पीछे कोई सिद्धांत नहीं है। मैं सिर्फ पाने की कोशिश की (const1+a*b)/const2और साथ शुरू किया था (1/(1-a)+1/(1+b))और (-1/a+1/b)


आपका tmpवास्तव में 23 है, अपने स्कोर को 27 बना रहा है। अच्छा लगता है, हालांकि।
एल्गोरिद्मशार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.