ऑपरेटर जो दो संख्याओं के बीच योग, उत्पाद और अंतर को जोड़ता है


28

चुनौती:

वहाँ एक मूर्खतापूर्ण पहेली है जो सोशल नेटवर्क पर प्रसारित होती है:

8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?

एक फ़ंक्शन या ऑपरेटर को कार्यान्वित करें, जब दो सकारात्मक पूर्णांक संख्याएं xऔर yऐसे दिए जाते हैं, तो x > y > 0सही उत्तर को पूर्णांक के रूप में प्राप्त करते हैं , जहां उत्तर के अंकों के x * yबाद के अंकों के x + yबाद के अंक होते हैं x - y। बहुत आसान।

नियम:

  • मानक खामियों को अस्वीकार कर दिया जाता है।
  • यह इसलिए बाइट्स जीत में सबसे छोटा कोड है।
  • इनपुट डेटा सत्यापन की आवश्यकता नहीं है। अमान्य इनपुट दिए जाने पर यह प्रोग्राम क्रैश हो सकता है या कचरा लौटा सकता है।
  • आपको संख्यात्मक कार्यों और ऑपरेटरों (पूर्णांक और फ़्लोटिंग पॉइंट, गणित लाइब्रेरी फ़ंक्शंस, और अन्य फ़ंक्शन जो संख्याओं को स्वीकार और वापस करते हैं) सहित उपयोग करने की अनुमति है।
  • यदि आप किसी ऐसे फ़ंक्शन का उपयोग करने की अनुमति देते हैं जो किसी संख्या के अंकों की संख्या लौटाता है, यदि लागू हो।
  • आपको अपने कोड में कहीं भी स्ट्रिंग्स या किसी भी तरह के कॉन्टेनेट का उपयोग करने की अनुमति नहीं है
  • परिणाम लौटाया जा सकता है या स्टैक पर धकेल दिया जा सकता है, जो भी भाषा में लागू होता है। परिणाम एक पूर्णांक संख्या होना चाहिए, न कि एक स्ट्रिंग।

नमूना कोड:

दिल्लोग एपीएल :

निम्न कोड नाम का एक डाइएडिक ऑपरेटर बनाता है X

एक्स ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}

स्पष्टीकरण:

  • एपीएल में, आप दाईं से बाईं ओर का मूल्यांकन करते हैं।

  • ⍺ and ⍵ क्रमशः बाएं और दाएं ऑपरेंड हैं

  • ⌊10⍟⍺-⍵पढ़ता है: floor of log10(⍺-⍵)। पहले घटाव करता है फिर लघुगणक फिर तल। दांये से बांये तक। log10 के अंको को गिनने के लिए किया जाता है ⍺-⍵(आपको 1 बाद में योग करना चाहिए)।

  • ⍺×⍵×10*(...) पढ़ता है: 10 to the (...)th power, multiplied by ⍵, multiplied by ⍺

  • इसलिए, ⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵वह उत्पाद है, जो योग के अंकों और अंतर के योग से बाईं ओर स्थानांतरित हो जाता है। 10 की शक्ति से गुणा करने पर एक पूर्णांक बाईं ओर स्थानांतरित हो जाएगा।

  • ((⍺+⍵)×10*1+⌊10⍟⍺-⍵) वह अंतर है, जो अंतर के अंकों की संख्या से बाईं ओर स्थानांतरित होता है।

  • (⍺-⍵)अंतर है। यहां कोई शिफ्टिंग जरूरी नहीं है।

  • X←{...} आप एपीएल में एक ऑपरेटर को कैसे परिभाषित करते हैं।

उदाहरण:

      8 X 2
16106
      5 X 4
2091
      9 X 6
54153

ग्नू डीसी:

निम्नलिखित कोड एक मैक्रो नाम बनाता है a:

[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa

स्पष्टीकरण:

  • sxऔर syस्टैक से एक तत्व पॉप करें और इसे क्रमशः रजिस्टरों xऔर पर सहेजें y

  • lxऔर lyरजिस्टरों से एक तत्व लोड करें xऔर yक्रमशः इसे स्टैक पर धकेलें।

  • d स्टैक में अंतिम तत्व को डुप्लिकेट करता है।

  • ^ दो संख्याओं की शक्ति की गणना करता है।

  • Zएक संख्या को पॉप करता है और अपने अंकों की संख्या लौटाता है। यह किया जाता है क्योंकि dcकोई लघुगणक कार्य नहीं है।

  • [...]saरजिस्टर में एक मैक्रो स्टोर करता है alaइसे लोड करता है। xस्टैक के शीर्ष पर मैक्रो निष्पादित करता है।

उदाहरण:

8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153

मुझे लगता है कि पूर्णांक से स्ट्रिंग में रूपांतरण अमान्य है?
एंथनी फाम

2
मुझे लगता है कि हमारे पास इस तरह की एक चुनौती थी, लेकिन यह नहीं पता था कि किन शर्तों को ढाँचा मिलेगा।
23

2
@AnthonyPham "आपको अपने कोड में कहीं भी स्ट्रिंग्स या किसी भी तरह के कंसट्रक्शन का उपयोग करने की अनुमति नहीं है।"
केवल

1
क्या हम इनपुट के रूप में पूर्णांक की एक जोड़ी ले सकते हैं?
कॉनर ओ'ब्रायन

1
क्या मैं एक फ़ंक्शन के बजाय एक पूर्ण कार्यक्रम बना सकता हूं?
14

जवाबों:


10

जावास्क्रिप्ट (ईएस 7), 63 61 59 बाइट्स

नील को धन्यवाद देकर 4 बाइट्स बचाए

(a,b)=>[a*b,a+b,a-b].reduce((p,c)=>p*10**-~Math.log10(c)+c)

<input id=a type=number oninput="c.innerText=((a,b)=>[a*b,a+b,a-b].reduce((p,c)=>p*10**-~Math.log10(c)+c))(+a.value,+b.value)">
<input id=b type=number oninput="c.innerText=((a,b)=>[a*b,a+b,a-b].reduce((p,c)=>p*10**-!Math.log10(c)+c))(+a.value,+b.value)">
<p id=c>


उपयोग करके कुछ बाइट्स सहेजें 10**-~Math.log10(c)। (लेकिन +1 का उपयोग करने के लिए reduce, बिल्कुल।)
नील

"ES7" ओह, कोडिंग के प्यार के लिए ... वे एक और बना रहे हैं?
Feathercrown

@Feathercrown हाँ, लेकिन क्या यह वास्तव में "जावा 9" सुनने से भी बदतर है? साथ ही इसमें उपयोगी चीजें हैं जैसे async/ awaitऔर प्रतिपादक ऑपरेटर**
केवल

@ ASCII- केवल **वास्तव में उपयोगी है, मैं सहमत हूं। यह ES6 में होना चाहिए था।
Feathercrown


6

बैश, 66

  • 2 बाइट्स @chepner की बदौलत बच गए।
f()(s=$[$1+$2]
d=$[$1-$2]
echo $[($1*$2*10**${#s}+s)*10**${#d}+d])

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


यदि आप एक दूसरे के बगल में अपने चर (ओं, डी और गुणन के लिए दूसरे को परिभाषित नहीं करते हैं) को एक दूसरे के बगल में रखते हैं और मूल्यांकन करते हैं तो यह संभव है कि इसे दो बार छोटा किया जा सके।
मैक्सिम मिखायलोव

3
@MaxLawnboy हाँ, हालांकि यह बहुत कुछ मुझे लगता है कि प्रतिबंधित स्ट्रिंग संघनन की तरह है।
डिजिटल ट्रामा

1
अंदर पहचानकर्ता नाम $[...]स्पष्ट वर्ण के बिना पैरामीटर विस्तार के अधीन हैं $(जैसे, dइसके बजाय $d), दो वर्णों को बचाते हुए।
चेपनर

@chepner हां - धन्यवाद - मैं उन लोगों को याद किया था।
डिजिटल ट्रामा

एक और दो मिला; उपयोग ((s=$1+$2,d=$1-$2))दो चर चर करने के लिए।
चेपनर


5

स्टैक्ड , 36 बाइट्स

,@A$(*+-){!A...n!}"!{%y#'10\^x*y+}#\

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

पहले: ,@A$(-+*){!A...n!}"!:inits$#'"!$summap:pop@.10\^1\,\*sum

मैं स्पष्टीकरण लिखने से पहले एक बाइट या दो को निचोड़ने की कोशिश करने जा रहा हूं। ( #'= का आकार, और ""प्रत्येक पर करो", यहाँ कोई तार जुड़ा हुआ नहीं है)

26 बाइट्स में नॉनकंपेटिंग $(*+-)#!!:{%y#'10\^x*y+}#\:।



4

जीएनयू डीसी, 36

एक मैक्रो को परिभाषित करता है mजो स्टैक के शीर्ष दो सदस्यों को लेता है, मैक्रो लागू करता है और स्टैक पर परिणाम छोड़ता है (उदाहरण के अनुसार प्रश्न में):

[sadsbla-dZAr^lalb+*+dZAr^lalb**+]sm

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


3

पर्ल 6 ,  81 61  58 बाइट्स

->\x,\y{($/=($/=x- y)+(x+y)*({10**$++}...*>$/).tail)+x*y*({10**$++}...*>$/).tail}

कोशिश करो

->\x,\y{(x*y,x+y,x- y).reduce:{$^a*10**Int(1+log10($^b))+$b}}

कोशिश करो

->\x,\y{[[&({$^a*10**Int(1+$^b.log10)+$b})]] x*y,x+y,x- y}

कोशिश करो


पर्ल 6 को न जानकर, मुझे यह जानकर थोड़ा आश्चर्य हुआ कि x-yयह एक वैध पहचानकर्ता है।
नील

3

जेली , 27 बाइट्स

+,ạ,.1Fl⁵Ḟ‘€Ṛ+\⁵*
ạ,+,×Fæ.ç

के साथ कॉल करने योग्य एक डाइएडिक लिंक / फ़ंक्शन को परिभाषित करता है ç। इनपुट के रूप में दो पूर्णांक बनाता है और एक पूर्णांक देता है। इसमें पूर्ण अंतर का उपयोग करके x <y या x >y लेने में सक्षम होने का अतिरिक्त बोनस है ।

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

स्पष्टीकरण:

+,ạ,.1Fl⁵Ḟ‘€Ṛ+\⁵* -- Create link which computes what order of magnitude
                        to multiply the difference, sum, and product by
ạ,+,×Fæ.ç         -- Main link, applies this using dot product

विवरण:

+,ạ,.1Fl⁵Ḟ‘€Ṛ+\⁵* -- Create dyadic like which does the following:
       l⁵Ḟ‘       -- Create operation which computes number of digits
                       (log base 10 (⁵ is the literal 10), floored, incremented)
           €      -- Apply this to each element in
+,ạ,.1F           -- ... the list [sum,difference,.1]
            R     -- Reverse the list
             +\   -- Add up first n elements to get list.
               ⁵* -- Raise 10 (⁵ is literal 10) to the power of each element

ạ,+,×Fæ.ç         -- Main link, applies above link
ạ,+,×F            -- The list [difference, sum, product]
      æ.          -- Dot product (multiply corresponding elements) with
        ç         -- The above link.

2

PHP, 79 75 बाइट्स

दो संस्करण:

[,$a,$b]=$argv;echo(10**strlen($s=$a+$b)*$a*$b+$s)*10**strlen($d=$a-$b)+$d;
[,$a,$b]=$argv;echo(10**strlen($a+$b)*$a*$b+$a+$b)*10**strlen($a-$b)+$a-$b;

कमांड लाइन तर्कों से इनपुट लेता है; साथ चलाना -r

मुझे लगता है strlenकि "फ़ंक्शन जो अंकों की संख्या लौटाता है" के रूप में योग्य है,
हालांकि यह संख्या को स्ट्रिंग के रूप में उपयोग करता है। मुझे पता है अगर नहीं।


'आपको अपने कोड में कहीं भी तार या किसी भी तरह के कॉन्टेनेट का उपयोग करने की अनुमति नहीं है।', इसलिए मुझे नहीं लगता कि strlenयह मान्य है।
नंबरमानिक

@numbermaniac ओपी को निर्णय लेने दें। Imo प्रतिबंध एक दूसरे के बाद केवल तीन परिणामों को मुद्रित करने के बजाय एक परिणाम बनाने के लिए मजबूर करने के लिए था । इससे परे सब कुछ नाइटपैकिंग है।
टाइटस

2

सी (जीसीसी) , 70 बाइट्स

#define _ for(c=1;a+b>=(c*=10););d=c*d+a-(b=-b);
c,d;f(a,b){d=a*b;_ _}

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

Steadybox जवाब के आधार पर , एक मैक्रो में सब कुछ डाल गोल्फ के लिए यह थोड़ा और अधिक है।

(ध्यान दें: अप्रत्याशित रूप dसे aकाम करने के बजाय परिणाम को असाइन करना । मुझे जनरेट किए गए असेंबली कोड पर एक नज़र थी और यह ठीक प्रतीत होता है।)


2

हास्केल, 54 बाइट्स

a%0=a
a%b=10*a%div b 10+mod b 10
a#b=(a*b)%(a+b)%(a-b)

पहेली को एक infix फ़ंक्शन के माध्यम से कार्यान्वित किया जाता है #, जैसे 8#2 = 16106। अन्य फ़ंक्शन, %बेस -10 कॉन्फैनेटेशन को परिभाषित करता है (आरएचएस को 0 से अधिक है)।



1

PHP, 87 बाइट्स

[,$a,$b]=$argv;echo($s=$a-$b)+($t=$a+$b)*10**($l=strlen($s))+$a*$b*10**($l+strlen($t));

और 37 बाइट्स के लिए एक वैध समाधान नहीं है

[,$a,$b]=$argv;echo$a*$b,$a+$b,$a-$b;

1

रूबी, 61 बाइट्स

->a,b{[a*b,a+b,a-b].reduce{|x,y|z=y;x*=10while(z>z/=10);x+y}}

जो संदिग्ध रूप से इस जावास्क्रिप्ट उत्तर की तरह दिखता है , लेकिन एक लघुगणक का उपयोग किए बिना।


1

पायथन, 92 91 चार्ट

def g(x,y):
    l=lambda x,i=0:l(x/10,i+1)if x else 10**i
    a=x-y
    a+=(x+y)*l(a)
    return x*y*l(a)+a

जादूगर के सुझाव के लिए धन्यवाद;)


साइट पर आपका स्वागत है! आप के बीच की जगह की जरूरत नहीं है )और if
गेहूं जादूगर

1

आर (3.3.1), 104 बाइट्स

function(x,y)Reduce(function(p,q)p*10^(floor(log10(q)+1))+q,lapply(c(`*`,`+`,`-`),function(z)z(x,y)),0)

एक अनाम फ़ंक्शन देता है।

यह मेरा पहला गोल्फ प्रयास है, इसलिए किसी भी प्रतिक्रिया की सराहना की जाती है।


1
यदि संभव हो तो आरक्षित शब्द 'फ़ंक्शन' के माध्यम से कार्यों को परिभाषित करने से बचने की कोशिश करना चाहता हूं, यह बहुत सारे बाइट्स का उपयोग करता है। सिर्फ कंपीटिशन करो।
user11599

0

आरईएक्सएक्स, 70 बाइट्स

f:arg a b
c=a-b
c=(a+b)*10**length(c)+c
c=a*b*10**length(c)+c
return c

बेशक, देशी तरीका बहुत छोटा होगा:

f:arg a b
return a*b||a+b||a-b

0

पॉवरशेल, 88 बाइट्स

param($x,$y)$l=2;if(($a=$x+$y)-gt9){$l++};($x*$y)*[math]::Pow(10,$l)+$a*10+$x-$y

PowerShell के पास पावर ऑपरेटर के पास नहीं है जो मदद नहीं करता है। जब तक आप इसे स्ट्रिंग के रूप में नहीं गिनते हैं, तब तक एक पूर्णांक की लंबाई की गणना नहीं कर सकते हैं, जो हम नहीं कर सकते हैं, इसलिए मैं यह देखने के -gtलिए जांचता हूं कि क्या लंबाई जानने के लिए 9 है। संभवत: यह अधिक कठिन हो सकता है लेकिन मुझे काम पर वापस जाना होगा।


0

पायथन 2.7, 109 96 बाइट्स

import math
a=lambda n:10**int(math.log10(10*n))
b,c=input()
d=b-c+(b+c)*a(b-c)
print d+b*c*a(d)

प्रतियोगिता के नियमों का पालन करने के बाद सही किया गया। 109 बाइट्स से 96 बाइट्स तक कोड को नीचे लाने के लिए mbomb007 को क्रेडिट


1
इस चुनौती के नियमों से -•You're not allowed to use strings or any kind of concatenation anywhere in your code.
AdmBorkBork

आप मेमने को बनाकर कुछ बाइट्स बचा सकते हैं aa=lambda n:10**int(...। आप b,c=input()अल्पविराम द्वारा अलग किए गए अपने दो इनपुट देते हुए भी कर सकते हैं ।
mbomb007

@ mbomb007 b, c = input () TypeError देता है: 'int' ऑब्जेक्ट iterable नहीं है। मैंने इसे आजमाया है। और लैम्ब्डा फ़ंक्शन बाइट्स को नहीं बचाएगा क्योंकि मैं फ़ंक्शन को कोड में दो बार कॉल कर रहा हूं। वह भी कोशिश की। :(
कोइशोर रॉय

@KoishoreRoy मुझे नहीं लगता कि आपको मेरा मतलब है। 96 बाइट्स
mbomb007

0

जे , 25 बाइट्स

X=.10#.[:;10#.inv&.>*;+;-
  1. *;+;- प्रत्येक ऑपरेशन के परिणामों को बॉक्स करें।
  2. 10#.inv&.>प्रत्येक परिणाम को आधार -10 अंकों की एक सरणी में बदलें। ( invहै ^:_1)
  3. [:; अनबॉक्स और सरणियों में शामिल हों।
  4. 10#. आधार -10 अंकों की सरणी को पूर्णांक में बदलें।
  5. X=.ऑपरेटर के रूप में ऊपर परिभाषित करें X

परिणाम:

   8 X 2
16106
   5 X 4
2091
   9 X 6
54153

आपको जरूरत नहीं हैX=.
Cyoce

@Cyoce - चुनौती में नमूना APL कोड एक ऑपरेटर को परिभाषित करता है। मुझे पूरा यकीन है कि हम इस चुनौती के लिए एक पुन: प्रयोज्य ऑपरेटर को परिभाषित करने वाले हैं।
डेन

"3. [:; अनबॉक्स और सरणियों में शामिल हों।" - "आपको अपने कोड में कहीं भी स्ट्रिंग्स या किसी भी तरह के कॉन्टेनेट का इस्तेमाल करने की अनुमति नहीं है।"
ngn

@ngn - कृपया अपनी टिप्पणी पर विस्तार करें। किसी भी बिंदु पर तार का उपयोग नहीं किया जाता है।
डेन

मैं सिर्फ यह बताना चाहता था कि "ज्वाइन" ("लिंक") एक "प्रकार का संघटन" हो सकता है, हालांकि मैं J से बहुत परिचित नहीं हूं, और मुझे यकीन नहीं है कि इस मामले में समस्या कथन की व्याख्या कैसे करें । मेरा खुद का समाधान इसी तरह के सवाल उठाता है - मैं स्ट्रैंडिंग का उपयोग करता हूं (एपीएल में संज्ञाओं का बहिष्करण) एक वेक्टर बनाता है जो कि जे के "लिंक" के समान हो सकता है, लेकिन इसका प्रतिनिधित्व करने के लिए बिना ग्लिफ़ के।
ngn

0

गणितज्ञ, 67 बाइट्स

c=Ceiling;l=Log10;#-#2+(#+#2)10^(c@l[#-#2]/. 0->1)+10^c@l[2#]10#2#&

लेता है x-y, फिर log10 लेता है x-y, इसे गोल करता है, उस की शक्ति की 10 गणना करता है और फिर इसे गुणा करता है x+y। लेकिन हमें भी log10(x-y)0 पर विचार करने की आवश्यकता है , इसलिए हम 0 को 1 के साथ प्रतिस्थापित करते हैं। फिर हम log10 को लेते हैं 2x, गोल 1, प्लस 1, और उस की शक्ति को 10 पाते हैं। उस से गुणा करें xy, और उस पर जोड़ें।


0

05AB1E , 23 22 16 बाइट्स

-Dg°¹²+*Dg°¹²**O

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

हम कुछ बाइट्स को बचा सकते थे यदि हमें प्रोग्राम में स्ट्रिंग्स का उपयोग करने की अनुमति दी गई थी (लेकिन गणना में नहीं) "-+*", जिसमें एक ऑपरेशन पर एक स्ट्रिंग से अधिक लूप करके , जैसा कि प्रत्येक ऑपरेशन के लिए निष्पादित कोड समान है।
बेशक, अगर हमें सहमति का उपयोग करने की अनुमति दी गई है तो हम बहुत अधिक बचाएंगे।


0

आर, 64 बाइट्स

x=scan();(b=(a=diff(-x))+10^nchar(a)*sum(x))+10^nchar(b)*prod(x)

उपयोग:

> x=scan();(b=(a=diff(-x))+10^nchar(a)*sum(x))+10^nchar(b)*prod(x)
1: 8 2
3: 
Read 2 items
[1] 16106
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.