একটি অ্যারেটিকে ম্যাথ সমস্যাতে পরিণত করুন


35

অণুগঠিত পূর্ণসংখ্যার একটি অসাধারণ তালিকা দেওয়া, এটি একটি গাণিতিক সমস্যা হিসাবে পুনরায় লেখার বিষয়টি বিবেচনা করুন যেখানে:

  • +বাম থেকে ডানে বৃদ্ধি হওয়া তালিকার জোড় সংখ্যার মধ্যে একটি যোগ চিহ্ন ( ) সন্নিবেশ করা হয় (তালিকার শুরু থেকে শেষ অবধি)।
  • -বাম থেকে ডানে হ্রাস হওয়া সংখ্যার জোড়ার মধ্যে একটি বিয়োগ চিহ্ন ( ) সন্নিবেশ করা হয়।
  • *সমান সংখ্যার জোড়গুলির মধ্যে একটি গুণ চিহ্ন ( ) সন্নিবেশ করা হয়।

অন্য উপায় বলল, কোন sublist a,bহয়ে a+bযদি a<b, a-bযদি a>b, এবং a*bযদি a==b

উদাহরণস্বরূপ, তালিকা

[12, 0, 7, 7, 29, 10, 2, 2, 1]

অভিব্যক্তি হয়ে উঠবে

12 - 0 + 7*7 + 29 - 10 - 2*2 - 1

যা মূল্যায়ন 75

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা এই জাতীয় তালিকায় নেয় এবং মূল্যায়ন করে, মুদ্রণ করে বা ফলাফলটি ফিরিয়ে দেয়।

  • ক্রিয়াকলাপ সম্পর্কিত বিষয়। যেকোন সংযোজন বা বিয়োগের আগে গুণগুলি করা উচিত।
  • যদি ইনপুট তালিকার একটি নম্বর থাকে তবে তা হওয়া উচিত যা এটি মূল্যায়ন করে। যেমন দেওয়া [64]উচিত 64
  • ব্যবহারের evalবা execবা অনুরূপ নির্মান অনুমোদিত হয়।

এখানে কিছু অতিরিক্ত উদাহরণ দেওয়া হল:

[list]
expression
value

[0]
0
0

[1]
1
1

[78557] 
78557
78557

[0,0]
0*0
0

[1,1]
1*1
1

[2,2]
2*2
4

[0,1]
0+1
1

[1,0]
1-0
1

[1,2]
1+2
3

[2,1]
2-1
1

[15,4,4]
15-4*4
-1

[9,8,1]
9-8-1
0

[4,2,2,4]
4-2*2+4
4

[10,9,9,12]
10-9*9+12
-59

[1,1,2,2,3,3]
1*1+2*2+3*3
14

[5,5,4,4,3,3]
5*5-4*4-3*3
0

[3,1,4,1,5,9,2,6,5,3,5,9]
3-1+4-1+5+9-2+6-5-3+5+9
29

[7637,388,389,388,387,12,0,0,34,35,35,27,27,2]
7637-388+389-388-387-12-0*0+34+35*35-27*27-2
7379

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। টাইব্রেকার এর আগের উত্তর।


5
"ক্রম সম্পর্কিত ক্রিয়াকলাপ" সম্পর্কিত স্পষ্ট করে বলা ভাল যে সংযোজন এবং বিয়োগফল বাম-সহযোগী এবং একই নজির রয়েছে।
মার্টিন ইন্ডার

উত্তর:


15

পাইথন 2, 63 বাইট

p=s='print-'
for x in input():s+='*+-'[cmp(x,p)]+`x`;p=x
exec s

evalএক্সপ্রেশন স্ট্রিং তৈরি করে এবং গুলি। গাণিতিক প্রতীক পূর্ববর্তী সংখ্যা তুলনা করে নির্বাচিত pবর্তমান এক x। প্রতীকটি বর্তমান সংখ্যার পরে সংযুক্ত করা হয়।

প্রথম সংখ্যাটি স্প 3000 থেকে চালাক কৌশলে পরিচালনা করা হয়। এর প্রাথমিক মান pএকটি স্ট্রিংয়ে সেট করা হয়েছে, যা কোনও সংখ্যার চেয়ে বড় এবং তাই -প্রথম সংখ্যার আগে একটি কারণ ঘটায় । তবে, একই সাথে sআরম্ভ করা print-হয় যা ফলাফল দিয়ে শুরু করে print--(এক্সসোটকে দিয়ে শুরু করে 2 বাইট সংরক্ষণের জন্য ধন্যবাদ print।)


আমি মনে করি আপনি printস্ট্রিংয়ে যেতে পারেন এবং এর execপরিবর্তে ব্যবহার করতে পারেন eval
এক্সসট

13

পাইথ, 31 26 19 17 16 15 বাইট

সহ এক্সপ্রেশনগুলি *অনলাইনের মূল্যায়ন করবে না, তবে তারা তাত্ত্বিকভাবে কাজ করবে।

2 বাইট মাল্টেসেনকে ধন্যবাদ।

vsm+@"*-+"._-~k

পরীক্ষার স্যুট (মূল্যায়ন সহ)।

অন্যান্য ক্ষেত্রে (মূল্যায়ন ছাড়াই)।

ইতিহাস

  • 31 বাইট: M+G@"*-+"->GH<GHv+sgMC,JsMQtJ\x60e
  • 26 বাইট: M+G@"*-+"->GH<GHv+sgVQtQ\x60e
  • 19 বাইট: vtssVm@"*-+"->Zd<~Z
  • 17 বাইট: vtssVm@"*-+"._-~Z
  • 16 বাইট: vssVm@"*-+"._-~k
  • 15 বাইট: vsm+@"*-+"._-~k

কেন গুণের কাজ অনলাইনে হবে না? যদি আপনি নিশ্চিত না হন যে এটি কাজ করে তবে উত্তর দেওয়ার আগে আরও কিছুটা পরীক্ষা করা ভাল।
ক্যালভিনের শখ 4

কারণ সুরক্ষা সামগ্রী (মূল্যায়ন কেবলমাত্র +এবং -অনলাইনের জন্যই কাজ করে )
লিকি নুন

@ হেলকাহোম্বা আমার কাছে এখনও এটি অফলাইনে চেষ্টা করার সুযোগ নেই, তবে এটি কাজ করা উচিত। অনলাইন ইন্টারপ্রেটারটি --safeস্যুইচটি ব্যবহার করে যা প্রতিস্থাপন evalকরে ast.literal_eval
ডেনিস

যথেষ্ট ঠিক পরিষ্কার.
ক্যালভিনের

নিশ্চিত করা হয়েছে, এটি অফলাইন দোভাষীর সাথে কাজ করে।
ডেনিস

12

জেলি , 18 16 15 14 বাইট

I0;ð1g×⁹⁸œṗP€S

কোনও বিল্ট-ইন ইওল ব্যবহার করে না। এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

কিভাবে এটা কাজ করে

I0;ð1g×⁹⁸œṗP€S  Main link. Input: A (list)

I               Increments; compute the deltas of all adjacent items of A.
 0;             Prepend a 0.
   ð            Begin a new, dyadic chain.
                Left argument: D (0 plus deltas). Right argument: A
    1g          Compute the GCD of 1 and each item in D.
                This yields 1 for non-negative items, -1 for negative ones.
      ×⁹        Multiply each 1 or -1 with the corresponding item of A.
                This negates every item in A that follows a - sign.
        ⁸œṗ     Partition the result by D. This splits at occurrences of non-zero
                values of D, grouping items with identical absolute value.
           P€   Take the product of each group.
             S  Sum; add the results.


1
সুন্দরভাবে সম্পন্ন. আমার পাইথনকে evalএকটি পরমাণু হিসাবে যুক্ত করা উচিত ...
ডেনিস

9
আমি আপনাকে আউট আউট। : পি
ডেনিস

খুব ভাল, আপনার পালা!
ফাঁস নুন

9

এমএটিএল , 12 বাইট

Y'^l6MdZSh*s

এটি ব্যবহার করে @ অ্যাডিটসুর রান-লেংথ এনকোডিংয়ের খুব সুন্দর ধারণা ব্যবহার করে।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

       % Take input vector implicitly
Y'     % RLE. Produces two vectors: values and lengths
^      % Rise each value to the number of consecutive times it appears. This
       % realizes the product of consecutive equal values
l      % Push 1
6M     % Push vector of values again
d      % Consecutive differences
ZS     % Sign function. Gives 1 or -1 (no 0 in this case)
h      % Concatenate horizontally with previous 1
*      % Multiply. This gives plus or minus depending on increasing character
s      % Sum of vector. This realizes the additions or subtractions
       % Display implicitly

হাহা ঠিক সেরকমই কিছু লিখেছিলেন।
আরএলই এর

@ তবুও আমি দেখছি :
লুইস মেন্ডো

7

সিজেম, 20

q~e`{~_W-g\:W@#*}%:+

এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

q~       read and evaluate the input (array of numbers)
e`       RLE encode, obtaining [count number] pairs
{…}%     map each pair
  ~_     dump the count and number on the stack, and duplicate the number
  W-     subtract the previous number (W is initially -1 by default)
  g      get the sign of the result
  \      swap with the other copy of the number
  :W     store it in W (for next iteration)
  @#     bring the count to the top, and raise the number to that power
  *      multiply with the sign
:+       add all the results together

7

জাভাস্ক্রিপ্ট (ES6), 54

p=>eval(0+p.map(v=>x+='*-+'[(p>v)+2*(p<v)]+(p=v),x=1))

eval কমা দ্বারা বিভক্ত এক্সপ্রেশনগুলির তালিকা অর্জন করে এবং সর্বশেষটির মান প্রদান করে।

পরীক্ষা

f=p=>eval(0+p.map(v=>x+='*-+'[(p>v)+2*(p<v)]+(p=v),x=1))

t=p=>(0+p.map(v=>x+='*-+'[(p>v)+2*(p<v)]+(p=v),x=1))

function Test() {
  var a=I.value.match(/\d+/g).map(x=>+x) // convert input to a numeric array
  
  var x=f(a),y=t(a)
  O.textContent='Value '+x+'\n(no eval '+y+')'
}  

Test()
#I { width:80%}
<input value='12, 0, 7, 7, 29, 10, 2, 2, 1' id=I>
<button onclick='Test()'>Test</button>
<pre id=O></pre>


4
এটি কমা অপারেটরের সবচেয়ে খারাপ ব্যবহার যা আমি এই সাইটে দেখে মনে রাখতে পারি ...
নীল

5

জুলিয়া, 76 57 বাইট

!x=[[" ""-*+"[2+sign(diff(x))]...] x]'|>join|>parse|>eval

আমার প্রথমবারের মতো জুলিয়া গল্ফ করছে, সুতরাং সম্ভবত সেখানে উন্নতি হতে পারে। এটি অনলাইন চেষ্টা করুন!

ডেনিস এক টন বাইট সংরক্ষণ করলেন।


সুন্দর কাজ. আমি বুঝতে পারি নি যে আপনি কাস্টম ফাংশনটি সংজ্ঞায়িত করতে পারেন !
Rɪᴋᴇʀ


4

পাইথ - 23 22 20 বাইট

কেনির মতো, গুণও অনলাইনে কাজ করে না।

vs.i+\+@L"*+-"._M-Vt

পরীক্ষা ছাড়াই টেস্ট স্যুট


কেভিন কে?
ফাঁস নুন

@ ল্যাকিয়ুন আপনি কিছুক্ষণ পরে আপনার নামটি ভুলে গেছি> _>
মালটিসেন

@ মালতিসেন হাহা, আপনি কেভিন-নন-
কেনে

দুঃখিত, আমি খাচ্ছিলাম, তাই আমি আমার সমাধানটি গল্ফ করতে পারি না। তোমার পালা.
ফাঁস নুন

@ ল্যাকইনুন প্রায় সেখানেই রয়েছে
মালটিসেন

3

আর, 92 বাইট

এখানে এখনও কিছু ভাল গল্ফিং হতে পারে।

eval(parse(t=paste(i<-scan(),c(ifelse(d<-diff(i),ifelse(d>0,"+","-"),"*"),""),collapse="")))

Ungolfed:

i = scan()                # Read list from stdin
d = diff(i)               # Calculate difference between each element of list
s = ifelse(d,             # If d!=0
             ifelse(d>0,  # And if d>1
                    "+",  # Return plus
                    "-"), # Else return minus
             "*")         # Else (i.e. d==0) return multiply.
s = c(s,"")               # Pad the list s with an empty string, so it's the same
                          # length as i
p = paste(i,s,collapse="")# Paste the elements of i and s into one long string.
eval(parse(t=p))          # Evaluate the string as a language object.



2

টিআই-বেসিক, 146 বাইট

মোবাইলে না থাকলে আমি এটিকে সুন্দরভাবে ফর্ম্যাট করব। ঘুম আমার হাত থেকে বাঁচে, তাই আপনি এটি পান। উপভোগ করুন।

Prompt L₁
"(→Str1
For(A,1,dim(L₁
{0,1→L₂
{0,L₁(A→L₃
LinReg(ax+b) L₁,L₃,Y₁
Equ►String(Y₁,Str2
sub(Str2,1,-1+inString(Str2,"X→Str2
If A>1
Then
L₁(A-1
2+(Ans>L₁(A))-(Ans<L₁(A
Str1+sub("+*-",Ans,1→Str1
End
Str1+Str2→Str2
End
expr(Str1

2

জাভাস্ক্রিপ্ট ES6, 64 62 অক্ষর

a=>eval(a.map((x,i)=>x+('*+-'[x<a[++i]|(x>a[i])*2])).join``+1)

3
এটি কি কোনও ফাংশন এবং aপ্যারামিটার হওয়া উচিত নয় ?
edc65

এটি যেমনটি অবৈধ।
Rɪᴋᴇʀ

@ এডসি 65, হ্যাঁ, এটি করা উচিত। তবে বাস্তবে এটি গণনা করা হয়েছিল (specified১ নির্দিষ্ট, তবে বাস্তব কোডটির দৈর্ঘ্য ৫৯ ছিল), আমি সবেমাত্র একটি নতুন কোড অনুলিপি করেছি (সম্পাদনাটি a[i+1]...a[i+1]=> a[++i]...a[i]- 2 টি কম হওয়া উচিত , তবে আমি ভুল করে পুরো কোডটি ছাড়ার জায়গায় প্রতিস্থাপন করেছি a=>)।
কিওয়ারটি

@ EᴀsᴛᴇʀʟʏIʀᴋ, এটি কেবল একটি ভুল পেস্ট। উপরে মন্তব্য দেখুন এবং আরও বিস্তৃত ইতিহাসের জন্য ইতিহাস সম্পাদনা করুন।
কিওয়ারটি

পছন্দ করুন চমৎকার উত্তর
বিটিডব্লিউ

1

জাভা, 384 বাইট

int s(int[]l){int n=l[0],m;for(int i=0;i<l.length-1;i++)if(l[i]<l[i+1])if(i<l.length-2&&l[i+1]!=l[i+2])n+=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n+=m;}else if(l[i]>l[i+1])if(i<l.length-2&&l[i+1]!=l[i+2])n-=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n-=m;}else{m=l[i];while(i<l.length-1&&l[i]==l[i+1])m*=l[i++];n+=m;}return n;}

অবহেলিত অনলাইনে চেষ্টা করুন

int s(int[] l)
{
    int n=l[0], m;

    for(int i=0; i<l.length-1; i++)
    {
        if(l[i] < l[i+1])
        {
            if (i<l.length-2 && l[i+1]!=l[i+2])
            {
                n += l[i+1];
            }
            else
            {
                m = l[i+1];
                while(i<l.length-2 && l[i+1]==l[i+2]) m *= l[(i++)+1];
                n += m;
            }
        }
        else if(l[i] > l[i+1])
        {
            if (i<l.length-2 && l[i+1]!=l[i+2])
            {
                n -= l[i+1];
            }
            else
            {
                m = l[i+1];
                while(i<l.length-2 && l[i+1]==l[i+2]) m *= l[(i++)+1];
                n -= m;
            }
        }
        else
        {
            m = l[i];
            while(i<l.length-1 && l[i]==l[i+1]) m *= l[i++];
            n += m;
        }
    }

    return n;
}

1
কিছু দ্রুত golfs: int a=l.length, &&=> &, করা int i=0হিসাবে একই "লাইনের" এ int n=l[0],m
ফাঁস নুন

ইন if(i<l.length-2&&l[i+1]!=l[i+2])n+=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n+=m;, আপনি কেবল এটি elseব্লকের ভিতরে থাকা সামগ্রীর সাথে প্রতিস্থাপন করতে পারেন ।
ফুটো নুন

1

জাভাস্ক্রিপ্ট ES6, 79 টি অক্ষর

a=>eval(`${a}`.replace(/(\d+),(?=(\d+))/g,(m,a,b)=>a+('*+-'[+a<+b|(+a>+b)*2])))

1

পার্ল, 49 বাইট

48 বাইট কোড +1 এর জন্য -p

s/\d+ (?=(\d+))/$&.qw(* - +)[$&<=>$1]/ge;$_=eval

ব্যবহার

perl -pe 's/\d+ (?=(\d+))/$&.qw(* - +)[$&<=>$1]/ge;$_=eval' <<< '12 0 7 7 29 10 2 2 1'
75

নোট

আমি এখানে শিখেছি যে আপনি পিসিআরইতে একটি চেহারা ক্যাপচার করতে পারেন, যদিও এটি কিছুটা অপ্রয়োজনীয় ( (?=(\d+))পরিবর্তে)((?=\d+)) )। এটি পড়ার পরে কোনও অর্থ হয় না যদিও আপনি শূন্য-দৈর্ঘ্যের ম্যাচটি (দৃষ্টিনন্দন) পরেটির সাথে ক্যাপচার করবেন এবং পরিবর্তে আগেরটির সাথে ম্যাচটি ক্যাপচার করবেন)।

8 বাট বাঁচানোর জন্য @ নিনজালজকে ধন্যবাদ !


@ ল্যাকইনুন আমি কখনই ঠিক বুঝতে পারি না যে এটির জন্য কী গণনা করতে হবে, আমি প্রাসঙ্গিক মেটা পোস্টটি খুঁজে পাচ্ছি না, আমি গণনাটি ঘিরে খুশি, তবে আমি ভেবেছিলাম যেহেতু আপনি -eনিখরচায় চালাতে পারেন , pএটি তৈরি করে -pe+1 করা হয়েছে ? আপাতত আপডেট হবে তবে আপনি যদি কোনও উত্স খুঁজে পেতে পারেন তবে আমি এগিয়ে যাওয়ার লিঙ্ক / লিঙ্ক দিতে পারতাম, এটি দুর্দান্ত!
ডম হেস্টিংস

3
@ ডোমহাস্টিংস 1 সঠিক, আপনি যে কারণে বলছেন + এই মেটা পোস্ট
Sp3000

ধন্যবাদ @ এসপি 3000! আমার জীবনের জন্য আমি সেই পোস্টটি খুঁজে পাইনি! Sp3000
ডম হেস্টিংস

শিকলযুক্ত শর্তসাপেক্ষ অপারেটরগুলি ব্যবহার করার পরিবর্তে, আপনি স্পেসশিপ অপারেটরটি একটি তালিকা থেকে নির্বাচন করতে পারেন: অপারেটরের $&.qw(* - +)[$&<=>$1]প্রতিস্থাপন অংশে s///
নিনজালজ

@ নিনজালজ অবশ্যই! আশ্চর্যজনক, ধন্যবাদ! -8 এর সাথে!
ডোম হেস্টিংস

1

আসলে, 30 বাইট

;2@VpXdX`i-su"+*-"E`M' @o♀+εj≡

দুর্ভাগ্যক্রমে, যেহেতু eval ( ) কমান্ড টিআইও-তে কেবল আক্ষরিক মূল্যায়ন করে, এই প্রোগ্রামটি টিআইওতে কাজ করে না।

ব্যাখ্যা:

;2@VpXdX`i-su"+*-"E`M' @o♀+εj≡
;                               duplicate input
 2@V                            overlapping sublists of length <= 2
    pXdX                        discard first and last element (length-1 sublists)
        `i-su"+*-"E`M           map: for each pair of elements
         i-su                     flatten, subtract, sign, increment (results in a 0 if b < a, 1 if b == a, and 2 if b > a)
             "+*-"E               select the correct operation
                     ' @o       put a space at the beginning of the list to pad it properly
                         ♀+     pairwise addition (since addition is not defined for strings and integers, this just zips the lists and flattens the result into a single flat list)
                           εj   join with empty string
                             ≡  eval

1

আর , 120 44 বাইট

r=rle(scan());c(1,sign(diff(r$v)))%*%r$v^r$l

এটি অনলাইন চেষ্টা করুন!

অ্যালগরিদম এই উত্তরটির মতো , তবে আমি কেবল আমার উত্তর কোডিংয়ের পরে তা বুঝতে পেরেছি। আমার আসল উত্তর যেটি ব্যবহার করছিল তার চেয়ে অনেক বেশি ভাল eval(parse)

সম্পূর্ণরূপে আর এর ভেক্টরাইজড অপারেশনগুলিকে উপকৃত করে - *প্রথমে অপারেশনটি rle(x)$values ^ rle(x)$lenghtsএই ভেক্টরটি sign( diff( rle(x)$values ) )(প্রবর্তিত 1) দিয়ে বিন্দু-পণ্য ব্যবহার করে এবং ডট-প্রোডাক্টগুলি ব্যবহার করে ।


1

05AB1E (উত্তরাধিকার) , 17 16 15 বাইট

ü.S…*-+sè‚ζJJ.E

-2 ধন্যবাদ বাইট @Emigna

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

ü                  # Pair-wise loop over the (implicit) input-list
                   #  i.e. [12,0,7,7] → [[12,0],[0,7],[7,7]]
 .S                # Calculate the signum of the pair (-1 for a<b; 0 for a==b; 1 for a>b)
                   #  i.e. [[12,0],[0,7],[7,7]] → [1,-1,0]
   …*-+sè          # Index over "*-+" (with wrap-around)
                   #  i.e. [1,-1,0] → ['-','+','*']
         ‚ζ        # Zip the two lists together (appending the operands to the numbers)
                   #  i.e. [12,0,7,7] and ['-','+','*','+']
                   #   → [[12,'-'],[0,'+'],[7,'*'],[7,' ']]
           JJ      # Join them together
                   #  [[12,'-'],[0,'+'],[7,'*'],[7,' ']] → '12-0+7*7 '
             .E    # Evaluate as Python code
                   #  i.e. '12-0+7*7' → 61

1
মডিউলার ইনডেক্সিংয়ের কারণে আপনি স্ট্রিংয়ের শেষে >গিয়ে মুছে ফেলতে পারেন +
এমিগানা

@ এমিগনা নিশ্চিত না যে আমি কীভাবে মিস করেছি .. ধন্যবাদ!
কেভিন ক্রুইজসেন

1
আপনি যদি এর পরিবর্তে ব্যবহার করেনƨ‚ζø
Emigna

@ এমিগনা ওহ, এখন এটি স্মার্ট! ধন্যবাদ। আমি জানতাম ঘেরটি কিছুটা অদ্ভুত পরিশ্রমের কাজ, তবে কীভাবে এটি ঠিক করতে হয় তা জানতাম না। ‚ζজায়গাটি পুরোপুরি একটি নিখুঁত বিকল্প কাজ, যেহেতু স্পেসটিতে স্থানটি উপেক্ষা করা হয়। আবার ধন্যবাদ. :)
কেভিন ক্রুইজসেন

0

পিএইচপি, 103 বাইট

ঝরঝরে চ্যালেঞ্জ। এটি প্রত্যাশার চেয়ে দীর্ঘ হয়েছে। আমি ব্যবহার করে মনে করিarray_map বা বা অনুরূপ বাইট গণনা উন্নতি করতে পারে না, কারণ বেনামে ফাংশনগুলি পিএইচপি তে এখনও ব্যয়বহুল।

foreach(fgetcsv(STDIN)as$v)(0<=$p?$o.=$p.('*-+'[($p>$v)+2*($p<$v)]):_)&&$p=$v;echo eval("return$o$v;");

কমান্ড লাইন থেকে চালানো, কমা দ্বারা পৃথক করা তালিকার জন্য অনুরোধ করবে, যেমন:

php array_to_math.php
12, 0, 7, 7, 29, 10, 2, 2, 1

0

পাওয়ারশেল ভি 2+, 62 বাইট

-join($args|%{"$o"+'*+-'[($o-lt$_)+2*($o-gt$_)];$o=$_})+$o|iex

স্থান-বিভাজিত কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়, যা স্বয়ংক্রিয় অ্যারেতে রূপান্তরিত হয় $args$oআমাদের পূর্ববর্তী এন্ট্রিটি কী ছিল তা স্মরণে রাখতে প্রতিটি পুনরুক্তিটি সহায়ক ব্যবহার করে আমরা প্রতিটি উপাদান দিয়ে পুনরাবৃত্তি করি। আমরা যথাযথ অপারেটর, পরোক্ষভাবে-রূপান্তরিত বুলিয়ান মান উপর গণিত করণ দ্বারা সম্পন্ন বৈঠাচালনা আউট করার জন্য একটি ইন্ডেক্স-স্ট্রিং ব্যবহার (যেমন, যদি পূর্ববর্তী এন্ট্রি ছোট, []মূল্যায়ণ 1+2*0তাই '*+-'[1]মানে +নির্বাচন করা হয়)।

সংক্ষিপ্ত স্ট্রিংগুলি পাইপলাইনে রেখে গেছে। আমরা (যেমন, বজায় রাখে ঐ সম্পর্ক স্নিপেট সব সংগ্রহ 3-, 1+, 4-একটি সঙ্গে, ইত্যাদি) -joinঅপারেশন CONCATENATE চূড়ান্ত নম্বর (পরোক্ষভাবে স্ট্রিং রূপান্তর), এবং নল এটি iex(জন্য ওরফে Invoke-Expressionএবং অনুরূপ eval)।


উদ্বেগের বিষয় হ'ল যদি কলার ইতিমধ্যে $ oa মান (বলুন $ o = 999) দিয়ে থাকে তবে এই এন্ট্রিতে প্রকাশটি সঠিক মান গণনা করবে না। এই সমাধানটিতে $ o এর একটি সূচনা সংযোজন করা দরকার।
বেভো

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

0

Japt , 25 বাইট

এটি আরও খাটো করে কাটাতে চাই, তবে আমি কোনও স্বল্প সংস্করণের কাজ করতে পারিনি।

S+Uä!- ®"*+-"gZÎì)íU
OxU

এটি অনলাইন চেষ্টা করুন!


এটিকে 22 বাইটে নামিয়ে নিয়েছে তবে এখনও মনে হয় এটি আরও উন্নত হতে পারে।
শেগি

0

জাপট -x , 21 19 বাইট

änJ f mÎí*Uò¦ ®ÎpZÊ

চেষ্টা করে দেখুন


ব্যাখ্যা

                        :Implicit input of array U
  J                     :Prepend -1
än                      :Get deltas
    f                   :Filter (remove 0s)
      m                 :Map
       Î                : Signs
        í               :Interleave
          U             :  Original input
           ò            :  Partition on
            ¦           :   Inequality
              ®         :  Map each sub-array Z
               Î        :    Get first element
                p       :    Raise to the power of
                 ZÊ     :     Length of Z
         *              :Reduce each pair of elements by multiplcation
                        :Implicitly reduce by addition and output
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.