परिणाम प्राप्त करने के लिए आवश्यक संचालन खोजें


10

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

आइए इसे शुरू करने के लिए सरल बनाएं, और केवल बुनियादी संचालन जैसे: जोड़, घटाव, गुणा और भाग की अनुमति दें।

उदाहरण:

Input  : [5,5,5,5,5] 100
Output : 5*5*5-5*5

जावा जैसी भाषाओं को कुछ लाभ देने के लिए, फ़ंक्शन को लागू करने का अनुरोध किया जाता है, न कि पूरे कार्यक्रम का, और परिणाम पैरामीटर या कंसोल के माध्यम से वापस किया जा सकता है।

कोड राशि बाइट्स के आधार पर स्कोर किया जाता है, और जैसा कि यह गोल्फ कोड चुनौती है, सबसे कम स्कोर जीतता है।

एक और आवश्यकता यह है कि आप अतिरिक्त -10 अंक प्राप्त कर सकते हैं यदि सरणी में केवल डिइड, समर्थन समाधान हैं जहां आप निम्नलिखित अंकों से संख्याओं का निर्माण कर सकते हैं। अर्थात

Input  : [1,2,3,4,5] 0
Output : 12-3-4-5

ध्यान दें कि, प्रदान किए गए आउटपुट प्रस्तावित आउटपुट हैं, कुछ मामलों में एक से अधिक समाधान हो सकते हैं। यह आपके ऊपर है कि आप दिए गए कार्य के लिए एक या अधिक समाधान प्रदान करेंगे।

EDIT: परिणाम गणितीय दृष्टिकोण से मान्य होना चाहिए, इसलिए विभाजन तर्कसंगत विभाजन है, पूर्णांक नहीं है, और ऑपरेशन की वरीयता शास्त्रीय गणित (पहले गुणा और विभाजन फिर जोड़ और घटाव) के समान है।


4
करता है *और /पर निर्भरता है +और -? आपके दो उदाहरण एक दूसरे के विपरीत हैं।
लीक नून

1
कृपया, भविष्य में, सुनिश्चित करें कि आप किसी भाषा के लिए प्रतिशत-आधारित इनाम बनाएँ, जैसे जावा, -10 बाइट्स जेली के लिए उतना अच्छा नहीं है
बैलिंट


4
क्या क्रम में संख्याओं का उपयोग करने की आवश्यकता है? इसके अलावा, भविष्य की चुनौतियों के लिए, मैं सैंडबॉक्स का उपयोग करने की दिल से सलाह देता हूं, जहां इस तरह के मुद्दों को मेन में पोस्ट करने से पहले इस्त्री किया जा सकता है।
AdmBorkBork

2
@ mbomb007 यह उन दोनों में से किसी की नकल नहीं है। ये मनमाना संख्यात्मक इनपुट हैं, और केवल बुनियादी गणितीय संचालन की अनुमति है, वे वास्तविक कार्यक्रमों का उत्पादन करने के लिए नहीं हैं।
पैट्रिक रॉबर्ट्स

जवाबों:



4

Oracle SQL 11.2, 322 304 270 बाइट्स

SELECT o FROM(SELECT REPLACE(SUBSTR(:1,1,1)||REPLACE(SYS_CONNECT_BY_PATH(a||SUBSTR(:1,LEVEL*2+1,1),','),','),'_')o,LEVEL l FROM(SELECT SUBSTR('+-*/_',LEVEL,1)a FROM DUAL CONNECT BY LEVEL<6)CONNECT BY LEVEL<LENGTH(:1)/2)WHERE:2=dbms_aw.eval_number(o)AND l>LENGTH(:1)/2-1;

: 1 अंकों की सूची है
: 2 खोजा गया परिणाम है

अन-गोल्फ:

SELECT o
FROM   (
         SELECT REPLACE(SUBSTR(:1,1,1)||REPLACE(SYS_CONNECT_BY_PATH(a||SUBSTR(:1,LEVEL*2+1,1),','),','),'_')o,LEVEL l 
         FROM ( -- Create one row per operator 
                SELECT SUBSTR('+-*/_',LEVEL,1)a FROM DUAL CONNECT BY LEVEL<6
              ) CONNECT BY LEVEL<LENGTH(:1)/2  -- Create every combination of operators, one per ','
)
WHERE :2=dbms_aw.eval_number(o)  -- filter on result = evaluation
  AND l>LENGTH(:1)/2-1           -- keep only expressions using every digits

4

TSQL (sqlserver 2016) 310 294 280 बाइट्स

बदसूरत कोड लिखने का एक अद्भुत अवसर क्या है:

golfed:

DECLARE @ varchar(max)= '5,5,5'
DECLARE @a varchar(20) = '125'

,@ varchar(max)='';WITH D as(SELECT @a a UNION ALL SELECT STUFF(a,charindex(',',a),1,value)FROM STRING_SPLIT('*,+,./,-,',',')x,d WHERE a like'%,%')SELECT @+=a+','''+REPLACE(a,'.','')+'''),('FROM D WHERE a not like'%,%'EXEC('SELECT y FROM(values('+@+'null,null))g(x,y)WHERE x='+@b)

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

पठनीय: (दशमलव बिंदु का सम्मिलन (।) और उसी को हटाने के लिए एसक्यूएल के लिए आवश्यक है कि यह स्वीकार करने के लिए कि 4/5 0 नहीं है - इसे हटाने वाले लोगों के लिए अच्छी तरह से हटाना है)

DECLARE @a varchar(max)= '5,5,5'
DECLARE @b varchar(20) = '5'

,@ varchar(max)=''
;WITH D as
(
  SELECT @a a
  UNION ALL
  SELECT STUFF(a,charindex(',',a),1,value)
  FROM STRING_SPLIT('*,+,./,-,',',')x,d
  WHERE a like'%,%'
)
SELECT @+=a+','''+REPLACE(a,',','')+'''),('
FROM D
WHERE a not like'%,%'

EXEC('SELECT y FROM(values('+@+'null,null))g(x,y)WHERE x='+@b)

यह समाधान इस प्रकार के इनपुट को भी संभाल सकता है:

इनपुट: [१,२,३,४,५] ० आउटपुट: १२-३-४-५


3

जावास्क्रिप्ट (ईएस 6), 165 147 बाइट्स

a=>o=>(c=[],i=c=>{for(j=0;!((c[j]?++c[j]:c[j]=1)%5);)c[j++]=0},eval(`while(eval(e=(a+'').replace(/,/g,(_,j)=>'+-*/'.charAt(c[~-j/2])))!=o)i(c);e`))

नेस्टेड eval... प्यारा।

f=a=>o=>(c=[],i=c=>{for(j=0;!((c[j]?++c[j]:c[j]=1)%5);)c[j++]=0},eval(`while(eval(e=(a+'').replace(/,/g,(_,j)=>'+-*/'.charAt(c[~-j/2])))!=o)i(c);e`))
console.log(f([5,5,5,5,5])(100))
console.log(f([1,2,3,4,5])(0))
console.log(f([3,4])(0.75))
console.log(f([3,4,5,6])(339))


3

पायथन 3, 170 155 बाइट्स

from itertools import*
def f(n,o):print({k for k in[''.join(map(str,sum(j,())))[1:]for j in[zip(x,n)for x in product('+-*/',repeat=len(n))]]if eval(k)==o})

ऑपरेटरों के सभी संभावित आदेशों के साथ एक जनरेटर बनाएं, संख्याओं के साथ गठबंधन करें, फिर जवाब मिलने तक खाली करें।

https://repl.it/C2F5


2
आप के ['+','-','*','/']साथ बदलकर कुछ अक्षर बचा सकते हैं '+-*/'; चूँकि stringयह चलने योग्य है, इसलिए यह इसे arrayप्रत्येक तत्व के साथ उसी तरह का व्यवहार करेगा जैसे कि प्रत्येक तत्व में होता है string- इसलिए यह ठीक उसी तरह कार्य करेगा जैसे आपने इसे वर्तमान में आपके पास मौजूद सरणी के साथ प्रदान किया है।
नासोनिफ़िश

2

पायथन, 195 186 बाइट्स

यहाँ यह करने का एक अत्याचारी तरीका है।

def x(i,r):
 t=""
 from random import choice as c
 while True:
  for j in i:
   t+=str(j)
   if c([0,1]):t+="."+c("+-/*")
  t=t.strip("+-*/.")+"."
  v=eval(t)
  if v == r:print t
  t=""

फ़ंक्शन xएक listऔर एक के तर्क को स्वीकार करता है result-x([1,2,3,4,5], 15) उदाहरण के लिए।

कार्यक्रम एक लूप शुरू करता है जहां हम बेतरतीब ढंग से चयन करना शुरू करते हैं यदि हमें "+", "-", "*", or "/"प्रत्येक संख्या के बीच संलग्न करना चाहिए , या यदि हमें उन्हें एक साथ जोड़ना चाहिए। यह वास्तव में क्रमपरिवर्तन से गुजरने और हर परिणाम को खोजने के लिए हर संयोजन की कोशिश करने की तुलना में अधिक संक्षिप्त विकल्प की तरह लग रहा था, और हालांकि इसे चलाने में अधिक समय लगता है और यह बहुत कम कुशल है। (सौभाग्य से इस संदर्भ में चिंता की बात नहीं है!)

यह भी "" कहते हैं। प्रत्येक संख्या की तरह पूर्णांक-गोल संचालन करने से बचने के लिए6/4 = 1 । यह तब evalहमारी अभिव्यक्ति को निर्धारित करता है और निर्धारित करता है कि हम जो उम्मीद कर रहे हैं उसके बराबर परिणाम, और यदि ऐसा है, तो अभिव्यक्ति का उत्पादन होता है।

यह कार्यक्रम कभी भी बाहर नहीं निकलता - यह मारे जाने तक लगातार आउटपुट परिणाम देता रहेगा।

EDIT 1 : अनावश्यक नईलाइन्स निकालें जहाँ एक-लाइन ifस्टेटमेंट का उपयोग किया जा सकता है।


वास्तव में अजीब कार्यान्वयन। लेकिन कुछ और बाइट्स को बचाने के लिए आसान यह ऑनलाइन कोशिश करो! (176 बाइट्स)
बॉबोब्रोब

2

मतलाब, 234 238 258 बाइट्स

मैं अन्य उत्तरों की सीमाओं के आधार पर मान रहा हूं कि इनपुट सरणी की संख्या क्रम fiat द्वारा बनाए रखा गया है।

n=length(x)-1
k=n*2+2
p=unique(nchoosek(repmat('*-+/',1,n),n),'rows')
p=[p char(' '*~~p(:,1))]'
c=char(x'*~~p(1,:))
o=p(:,r==cellfun(@eval,mat2cell(reshape([c(:) p(:)]',k,[]),k,0|p(1,:))))
reshape([repmat(x',size(o,2),1) o(:)]',k,[])'

यह कोड संख्याओं का एक स्ट्रिंग लेता है x, कहता है x = '12345'और एक परिणाम r, कहता है r = 15और अभिव्यक्ति के सभी स्ट्रिंग देता है जिसे आप चार ऑपरेटरों के उपयोग rसे प्राप्त करने के लिए मूल्यांकन कर सकते हैं x

मैं का उपयोग कर से बचने के लिए दो अलग अलग लंबाई-बराबर तरीके का उपयोग किया है ones(length())प्रकार या repmat(length())प्रकार भाव: ~~p(1,:)जो रिटर्न नहीं-नहीं में मूल्यों p(यानी, की एक सूची 1के पहले आयाम के रूप में samelength रों p) और 0|p(:,1)जो 0 लौटाता है या है-वहाँ -a-value-in- p(यानी, 1दूसरे आयाम के समान लंबाई की सूची p)।

मतलाब के पास nchoosek प्रतिस्थापन विधि नहीं है, इसलिए मैंने ऑपरेटरों को कई बार सही संख्या में दोहराया है, ऑपरेटरों के nchoosekउस बड़े चयन के लिए पूरे स्थान की गणना की , और फिर uniqueपरिणाम को नीचे गिराने के लिए एक कॉल का उपयोग किया जो यह होना चाहिए ('*** +' और '*** +' जैसे समतुल्य संयोजनों को हटाना)। मैं अनुरेखण प्रयोजनों के लिए इनपुट वेक्टर की लंबाई से मेल करने के लिए एक अनुगामी स्थान जोड़ता हूं और फिर एक मैट्रिक्स के कॉलम में इनपुट स्ट्रिंग्स के साथ ऑपरेटर स्ट्रिंग्स की रचना करता हूं। फिर मैं परिणाम प्राप्त करने के लिए भाव स्तंभ का मूल्यांकन करता हूं और उन संचालकों के क्रम का पता लगाता हूं जो उन स्तंभों से मेल खाते हैं जो हमारे इनपुट से मेल खाते हैं r

टेस्ट: x = '12345', r = 15:

1*2*3+4+5 
1+2+3+4+5 
1-2*3+4*5 

अगर मुझे दोहरे परिशुद्धता मूल्यों की एक सरणी लेनी थी, तो मुझे अपने स्कोर में x = num2str(x,'%d');21 (20 ;) को जोड़ते हुए अंकों को एक स्ट्रिंग में बदलने की आवश्यकता होगी । * अतिरिक्त बाइट्स अर्धविराम थे जिन्हें मैंने पूरी तरह से छोड़ दिया था ताकि इस कोड को चलाने वाला कोई भी व्यक्ति अपने कमांड प्रॉम्प्ट को लंबे एरेज़ के साथ न देख पाए। चूंकि मेरे संपादन में अब तार्किक और कोलोन-ऑपरेंड्स के बारे में चेतावनी का एक विशाल ढेर पैदा होता है, इसलिए मैंने नए संस्करण में अर्धविराम हटा दिए हैं।

संपादित करें 2: एक के 2*n+2साथ बदलने के लिए भूल गया k

पुराना उत्तर:

n=length(x)-1;
p=unique(nchoosek(repmat(['*','-','+','/'],1,n),n),'rows');
l=length(p);
p=[p repmat(' ',l,1)]';
c=reshape([repmat(x',l,1) p(:)]',n*2+2,[]);
o = p(:,r == cellfun(@eval, mat2cell(c,n*2+2,ones(l,1))));
reshape([repmat(x',size(o,2),1) o(:)]',n*2+2,[])'

2

जावास्क्रिप्ट (ईएस 6), 88 बाइट्स

a=>o=>eval(`while(eval(e=(a+'').replace(/,/g,_=>'+-*/'.charAt(Math.random()*5)))!=o);e`)

मिश्रण के लिए थोड़ा यादृच्छिकता में फेंक दिया। संयोजनों के माध्यम से व्यवस्थित रूप से बहुत आसान है।

परीक्षण सूट

f=a=>o=>eval(`while(eval(e=(a+'').replace(/,/g,_=>'+-*/'.charAt(Math.random()*5)))!=o);e`)
console.log(f([5,5,5,5,5])(100))
console.log(f([1,2,3,4,5])(0))
console.log(f([3,4])(0.75))
console.log(f([3,4,5,6])(339))


1

PHP, 108 बाइट्स

for(;$i=$argc;eval("$s-$argv[1]?:die(\$s);"))for($s="",$x=$p++;--$i>1;$x/=4)$s.="+-*/"[$s?$x&3:4].$argv[$i];

रिवर्स ऑर्डर में कमांड लाइन तर्कों से इनपुट लेता है। के साथ भागो -r

टूट - फूट

for(;                   # infinite loop:
    $i=$argc;               # 1. init $i to argument count
    eval("$s-$argv[1]?:"    # 3. if first argument equals expression value,
        ."die(\$s);")       #    print expression and exit
    )
    for($s="",              # 2. create expression:
        $x=$p++;            #    init map
        --$i>1;                 # loop from last to second argument
        $x/=4)                  # C: shift map by two bits
        $s.="+-*/"[$s?$x&3:4]   # A: append operator (none for first operand)
            .$argv[$i];         # B: append operand

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