ফলাফল পেতে প্রয়োজনীয় অপারেশনগুলি সন্ধান করুন


10

সুতরাং টাস্কটি সহজ, সংখ্যা এবং ফলাফলের অ্যারে দেওয়া, অনুরোধকৃত ফলাফল পাওয়ার জন্য আপনাকে অ্যারে থেকে সংখ্যায় কী কী অপারেশনগুলি ব্যবহার করতে হবে তা সন্ধান করতে হবে।

আসুন শুরু করার জন্য এটি সহজ করে তুলুন এবং কেবলমাত্র মৌলিক ক্রিয়াকলাপগুলির অনুমতি দিন: সংযোজন, বিয়োগ, গুণ এবং বিভাগ।

উদাহরণ:

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

জাভা এর মতো ভাষাগুলিকে কিছু সুবিধা দেওয়ার জন্য, অনুরোধটি হ'ল পুরো প্রোগ্রামটি নয়, ফাংশন বাস্তবায়ন করা এবং ফলাফলটি প্যারামিটারের মাধ্যমে বা কনসোলে মুদ্রণের মাধ্যমে ফিরে আসতে পারে।

কোড পরিমাণ বাইটের উপর ভিত্তি করে স্কোর করা হয় এবং এটি গল্ফ কোড চ্যালেঞ্জ হিসাবে, সর্বনিম্ন স্কোর জেতে।

আর একটি প্রয়োজনীয়তা হ'ল আপনি অতিরিক্ত -১০ পয়েন্ট পেতে পারেন যদি অ্যারেতে কেবল ডিজিড থাকে, সলিউশন সাপোর্ট করে যেখানে আপনি নিম্নলিখিত সংখ্যাগুলি থেকে সংখ্যা তৈরি করতে পারেন। অর্থাত

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

নোট করুন, সরবরাহিত আউটপুট প্রস্তাবিত আউটপুট, কিছু ক্ষেত্রে একাধিক সমাধান হতে পারে। আপনি দেওয়া কাজের জন্য আপনি এক বা একাধিক সমাধান সরবরাহ করবেন এটি আপনার উপর নির্ভর করে।

সম্পাদনা: ফলাফলটি গাণিতিক দৃষ্টিকোণ থেকে বৈধ হতে হবে, সুতরাং বিভাগটি যৌক্তিক বিভাগ নয়, পূর্ণসংখ্যার নয়, এবং অপারেশন অগ্রাধিকারটি শাস্ত্রীয় গণিতের মতো (প্রথম গুণ এবং বিভাগের পরে সংযোজন এবং বিয়োগফল)।


4
নেই *এবং /উপর একটি precendence আছে +এবং -? আপনার দুটি উদাহরণ একে অপরের বিরোধিতা করে।
লিকি নুন

1
দয়া করে, ভবিষ্যতে নিশ্চিত হয়ে নিন যে আপনি জাভা-র মতো ভাষার জন্য শতাংশ-ভিত্তিক উদ্যানগুলি তৈরি করেছেন -10 বাইট জেলির মতো ততটা ভাল নয়
বালিন্ট


4
নম্বরগুলি ক্রম ব্যবহার করা প্রয়োজন? এছাড়াও, ভবিষ্যতের চ্যালেঞ্জগুলির জন্য, আমি আন্তরিকভাবে স্যান্ডবক্সটি ব্যবহার করার পরামর্শ দিচ্ছি যেখানে মেইন এ পোস্ট করার আগে এই ধরণের সমস্যাগুলি আস্তে আস্তে আস্তে আস্তে আনা যায়।
অ্যাডমবর্কবার্ক

2
@ mbomb007 এটি এর কোনওটিরই সদৃশ নয়। এগুলি নির্বিচারে সংখ্যাসূচক ইনপুট এবং কেবলমাত্র মৌলিক গাণিতিক ক্রিয়াকলাপ অনুমোদিত, তাদের আসল প্রোগ্রামগুলি আউটপুট করার কথা নয় are
প্যাট্রিক রবার্টস

উত্তর:



4

ওরাকল এসকিউএল 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

টিএসকিউএল (স্ক্লোসারভার 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)

এই সমাধানটি এই ধরণের ইনপুটও পরিচালনা করতে পারে:

ইনপুট: [1,2,3,4,5] 0 আউটপুট: 12-3-4-5


3

জাভাস্ক্রিপ্ট (ES6), 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মতোই আচরণ করবে - সুতরাং এটি আপনার বর্তমান অ্যারে সরবরাহ করার মতোই কাজ করবে।
nasonfish

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আমাদের এক্সপ্রেশন এবং ফলাফল নির্ধারণ করে যা আমরা প্রত্যাশা করি তার সমান, এবং যদি তাই হয় তবে এক্সপ্রেশনটি আউটপুট করে।

এই প্রোগ্রামটি কখনই প্রস্থান করে না - এটি হত্যা না করা অব্যাহত ফলাফল আউটপুট রাখে।

সম্পাদনা 1 : অপ্রয়োজনীয় নিউলাইনগুলি সরিয়ে ফেলুন যেখানে এক-লাইন ifস্টেটমেন্ট ব্যবহার করা যেতে পারে।


সত্যিই মজার বাস্তবায়ন। তবে আরও কিছু বাইট সংরক্ষণ করা সহজ এটি অনলাইনে চেষ্টা করুন! (176 বাইট)
বোব্রববব

2

মতলব, 234 238 258 বাইট

আমি অন্যান্য উত্তরের সীমাবদ্ধতার উপর ভিত্তি করে ধরে নিচ্ছি যে ইনপুট অ্যারের সংখ্যা ক্রম ফিয়াট দ্বারা বজায় রাখা হয়।

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একটি তালিকা ) দেয় এবং যা 0 দেয় বা আছে -a-value-in- (অর্থাত্ দ্বিতীয় মাত্রার সমান দৈর্ঘ্যের একটি তালিকা )।1p0|p(:,1)p1p

মতলব 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

জাভাস্ক্রিপ্ট (ES6), 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

পিএইচপি, 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.