নম্বর বিতরণ


11

এই চ্যালেঞ্জে আপনি এখানে সংখ্যার বিপরীতে এবং সংখ্যার পার্থক্যের উপরে একটি পণ্য বিতরণ করবেন

এখানে চিত্র বর্ণনা লিখুন

উদাহরণ

  Input      |     Output
-------------|-------------
23(12+42)    | (23*12)+(23*42)
9(62-5)      | (9*62)-(9*5)
4(17+8-14)   | (4*17)+(4*8)-(4*14)
15(-5)       | -(15*5)
2(3)         | (2*3)
8(+18)       | +(8*18)
8(-40+18)    | -(8*40)+(8*18)

সবিস্তার বিবরণী

ইনপুটটি ফর্মের একটি স্ট্রিং হবে n(_), যার মধ্যে একটি একক ইতিবাচক স্বাক্ষরযুক্ত পূর্ণসংখ্যার nপরে একটি প্রথম বন্ধনী প্রকাশ হবে _। এই অভিব্যক্তিটি _যোগফল +এবং -চিহ্ন দ্বারা পৃথক হওয়া আরও ইতিবাচক-পূর্ণসংখ্যার শর্তগুলির মধ্যে একটি পরিমাণ এবং পার্থক্য নিয়ে গঠিত । প্রথম শব্দটি এর আগে কোনও +চিহ্ন, -চিহ্ন বা কোনও চিহ্ন না দিয়েই হতে পারে ।

আউটপুটে, প্রাথমিক সংখ্যাটি nপ্রতিটি পদকে গুণিত করতে বিতরণ করা উচিত। প্রত্যেকটি শব্দ aদ্বারা বাম-গুন করা উচিত nআলাদা অভিব্যক্তি উত্পাদন করতে (n*a), এবং এই নতুন পদ সঙ্গে মিলিত হবে +এবং -ঠিক একই ভাবে লক্ষণ যেমন মূল শব্দগুলি ছিলেন।

অবৈধ ইনপুট

এগুলি হ'ল ইনপুটগুলির উদাহরণ।

3(5 plus 3)
6(5 13)
(5+8)(6+6)
(5+3)8

জয়লাভ

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড।


এটি আমার কাছে ঘটে যে রেজেক্স এই সমস্যাটির জন্য সত্যই উপযুক্ত। আপনি যদি রেজি-প্রাক্তন সমাধানগুলির সাথে ঠিক না থাকেন তবে আপনি এটি নিষিদ্ধ করতে পারেন, যদিও লোকেরা ইতিমধ্যে এতে কাজ করছে।
xnor

লাইব্রেরি অনুমোদিত?
orlp

@orlp একটি নির্দিষ্ট পরিমাণে যা মেটা নিয়ে আলোচনা হয়েছিল ।
ডাউনগোট

আকর্ষণীয় কেস:8(-40+18)
ব্রেইনস্টিল

উত্তর:


2

পিপ, 28 বাইট

DQaUnxWa^'(xR`\d+`'(.n.`*&)`

ব্যাখ্যা:

                              a is first cmdline arg (implicit)
DQa                           Remove (DeQueue) the closing paren from a
   UnxWa^'(                   Unify n and x with a split on open paren--Python equivalent
                                n,x=a.split("(")
                              n is thus the number to be distributed, and x is the
                                addition/subtraction expression
           xR                 In x, replace...
             `\d+`            ... regex matching numbers...
                  '(.n.`*&)`  ... with the replacement pattern (n*&), where n is the
                                appropriate number and & substitutes the complete match
                              Print result (implicit)

পিপের প্যাটার্ন অবজেক্টগুলি বেশিরভাগই পাইথন রেজেক্স সিনট্যাক্স অনুসরণ করে তবে &প্রতিস্থাপনের ধরণটি সেড থেকে ধার করা হয়।

পিথ সম্পর্কে আরও পড়ুন গিথুব সংগ্রহস্থলে


9

জাভাস্ক্রিপ্ট 65 বাইট

s=>(q=s.split(/[()]/))[1].replace(/(\D?)(\d+)/g,`$1(${q[0]}*$2)`)

এটি ইনপুট নেবে। + বা - এর পরে অঙ্কগুলি পান এবং তারপরে এটি সঠিক ক্রমে প্রতিস্থাপন করুন।

ব্যাখ্যা

s=>   // Function with argument "s"
  (q= // Set q to...
    s.split(/[()]/) // Splits on parenthesis, returns array
  )
  [1] // Gets second match or text inside brackets
  .replace(/ // Replaces string 
     (\D?)  // Try to match a non-digit, the +-/* (group 1)
     (\d+)  // Then match one or more digits (group 2)
  /,
      // $1 is group 1 and $2 is group 2 q[0] is the text before the parenthesis 
  `$1(${q[0]}*$2)`
  ) 

ব্যবহার

এটি কেবল ফায়ারফক্স এবং সাফারি নাইটলি এজেতে কাজ করে ? কারণ এটি ES6 বৈশিষ্ট্য ব্যবহার করে। আপনি এটি দ্বারা চালাতে পারেন:

var টি = এস => (কিউ = এস.স্প্লিট (/ [()) /)) [1]। স্থান (/ (\ ডি?) (\ ডি +) / জি, `$ 1 ($ {কিউ [0]} * $ 2) `)

টি ( "5 (-6 + 7 + 3-8 + 9)" ); // - (5 * 6) + (5 * 7) + (5 * 3) - (5 * 8) + (5 * 9)

(.?)(\d+)ভেঙ্গে গেছে. এটি ব্যর্থ হয় 23(12+42), উত্পাদন করে 1(23*2)+(23*42)
orlp

@orlp আমি এটি স্থির করেছি

এই কোডটি কেবল তীর ফাংশনের ফায়ারফক্স বি / সি-তে কাজ করবে, তবে এটি ঠিক আছে
মেয়রমন্টি

@ স্পিডিনিজা এটি এজতেও কাজ করে। ক্রোম / অপেরার জন্য আপনাকে "পরীক্ষামূলক জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি" সক্ষম করতে হবে।
rink.attendant.6

\D?পরিবর্তে ব্যবহার করা যেতে পারে[+-]?
edc65

6

পাইথন ২.7, 110 108 বাইট

import re
p=re.findall('([+-]?)(\d+)',raw_input())
print"".join("%s(%s*%s)"%(e[0],p[0][1],e[1])for e in p[1:])

প্রোগ্রামটি স্টিডিনের কাছ থেকে ইনপুট নেয়, ([+-]?)(\d+)রেগেক্সের বিরুদ্ধে ম্যাচগুলির সন্ধান করে এবং আউটপুট স্ট্রিং তৈরি করে।
এটি পরীক্ষা করা -

<< 23(12+42)
>> (23*12)+(23*42)

<< 9(62-5)
>> (9*62)-(9*5)

<< 4(17+8-14)
>> (4*17)+(4*8)-(4*14)

<< 15(-5)
>> -(15*5)

<< 2(3)
>> (2*3)

<< 8(+18)
>> +(8*18)

<< 8(-40+18)
>> -(8*40)+(8*18)

4

রেটিনা , 40 বাইট

+`(\d+)\((\D)?(\d+)
$2($1*$3)$1(
\d+..$
<empty line>

প্রতিটি লাইনের নিজস্ব ফাইলে যাওয়া উচিত তবে আপনি -sপতাকা সহ একটি ফাইল হিসাবে কোড চালাতে পারেন । উদাহরণ:

>echo -n "8(-40+18)"|retina -s distributing_numbers
-(8*40)+(8*18)

প্রথম দুটি লাইন প্রত্যাশিত আকারে প্রতিটি সংখ্যার পাশে গুণককে ধাক্কা দেয়:

8(-40+18)
-(8*40)8(+18)
-(8*40)+(8*18)8()

শেষ দুটি লাইন অপ্রয়োজনীয় পিছনের অংশটি সরিয়ে দেয়:

-(8*40)+(8*18)8()
-(8*40)+(8*18)

3

সেড, 105 বাইট

শুধু দেখতে চেয়েছিলাম এটি সেড দিয়ে করা যায় কিনা।
কিছুটা পুরানো স্কুল হতে পারে তবে এটি কাজ করে।

$ cat distnum.sed
s@\([0-9]*\)(\([0-9]*\)\([+-]*\)\([0-9]*\)\([+-]*\)\([0-9]*\))@(\1*\2)\3(\1*\4)\5(\1*\6)@
s@([0-9]*\*)@@g

$ cat distnum.txt
23(12+42)
9(62-5)
4(17+8-14)
15(-5)
2(3)
8(+18)
8(-40+18)

$ sed -f distnum.sed distnum.txt
(23*12)+(23*42)
(9*62)-(9*5)
(4*17)+(4*8)-(4*14)
-(15*5)
(2*3)
+(8*18)
-(8*40)+(8*18)


2

REGXY , 45 বাইট

REGXY ব্যবহার করে, একটি রেজেক্স প্রতিস্থাপন ভিত্তিক ভাষা।

/(\d+)\((\D)?(\d+)/\2(\1*\3)\1(/
//
/\d+\(.//

কিভাবে //কাজ করে? আমি মনে করি স্ট্রিংটি পরিবর্তন না হওয়া পর্যন্ত এটি শীর্ষে চলে যায় তবে কেন এটির পাতায় খুঁজে পাচ্ছি না।
এলোমেলো


1
আমি এখনও পাই না কেন সর্বদা মেলে //যেমন অনন্ত লুপ তৈরি করে না nothingতাই আমরা সবসময় প্রথম লাইনে ফিরে যাই।
এলোমেলো

তুমি কি জানো? আসলে আমি জানি না কেন। আপনি একেবারে ঠিক বলেছেন, এখন এটি সম্পর্কে চিন্তা করে এটি কোনও যৌক্তিক ধারণা দেয় না, তবে এটি অবশ্যই সংকলন সরবরাহ করে এবং সরবরাহকারী দোভাষীকে চালায়। এমনকি সংকলিত পার্লের দিকে তাকানো এটি আমাকে বিভ্রান্ত করে, কারণ এটি আরও স্পষ্ট দেখায় যে এটি একটি অসীম লুপ হওয়া উচিত: পেস্টবিন.
com

2

পার্ল, 36 বাইট

35 বাইট কোড + 1 বাইট কমান্ড লাইন

($a,$_)=split/[()]/;s/\d+/($a*$&)/g

ব্যবহার:

echo "4(17+8-14)" | perl -p entry.pl

1

পাইথ, 39 38 বাইট

একটি ভয়ানক রেইগেক্স সমাধান:

P:eJcz\("([+-]?)(\d+)"X"\\1(_*\\2)"3hJ

আমি মনে করি না এটি অনলাইন দোভাষীতে চালানো যায় ।
ব্রেইনস্টিল

@ ব্রেনস্টিল এটি অফলাইন দোভাষীটিতে কাজ করে, এটি হিরকুতে সমস্যা বলে মনে হচ্ছে।
orlp

@orlp এটি হিরকুর সমস্যা নয়। হ্যাকের সম্ভাবনা কমাতে গতিশীল আমদানিগুলি নিরাপদ মোডে অক্ষম করা হয় এবং পুনরায় মডিউলটি গতিশীল আমদানি করে। সুতরাং পুনরায় অনলাইন সহ নিরাপদ মোডে ব্যবহার করা যাবে না।
isaacg

1

রুবি, 94 বাইট

gets.scan(/(\d+)\(([[-+]?\d+]+)/){|a,b|b.scan(/([-+]?)(\d+)/).map{|c,d|$><<"#{c}(#{a}*#{d})"}}

1

সিজেম, 50 বাইট

l__'(#_@<'*+@@)>);'+/'-f/\ff{1$'(@@++')+L?}'-f*'+*

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

সিজেমে রেগেক্স সমর্থন বা স্ট্রিং অনুসন্ধান এবং বিভাজনের বাইরে এমন কিছু নেই যা এক্সপ্রেশন পার্স করার জন্য খুব সুবিধাজনক। এখানে কিছু শ্রম জড়িত আছে।

ব্যাখ্যা:

l__   Get input and push 2 copies for splitting.
'(#   Find index of '(.
_     Copy index, will be used twice.
@<    Get one copy of input to top, and slice to get first multiplier.
'*+   Append '* to first multiplier.
@@    Get another copy of input and '( index to top.
)>    Increment and slice to get everything after '(.
);    Remove trailing ').
'+/   Split at '+.
'-f/  Split each part at '-.
\     Swap first multiplier to top.
ff{   Apply block to nested list of second multipliers.
  1$    Copy term. Will use this copy as condition to skip empty second multipliers
        that result from unary + or -.
  '(    Opening parentheses.
  @@    Get first and second multiplier to top.
  ++    Concatenate it all.
  ')+   Concatenate closing parentheses.
  L     Push empty string for case where term is skipped.
  ?     Ternary if to pick term or empty string.
}     End of loop over list of second multipliers.
'-f*  Join sub-lists with '-.
'+*   Join list with '+.

1

gawk - 60 58

$0=gensub(/(.*\()?(+|-)?([0-9]+))?/,"\\2("$0+0"*\\3)","G")

ভাই ... কিছুক্ষণের মধ্যেই রেজিপ্লেক্সের সাথে কাজ করেনি।


1

পার্ল 5, 70 60 55 44 বাইট + 1 জরিমানা

একটি পার্ল সমাধান যা কেবল স্প্লিট এবং 1 নিয়মিত এক্সপ্রেশন ব্যবহার করে।
দীর্ঘতর ইনপুটগুলিও গণনা করে।

($a,$_)=split/[()]/;s/(\D?)(\d+)/$1($a*$2)/g

পরীক্ষা

$ echo "8(9-10+11-12+13-14)"|perl -p distnums.pl   
(8*9)-(8*10)+(8*11)-(8*12)+(8*13)-(8*14)

একটি সংস্করণ যা পরামিতি নেয়

($a,$_)=split/[()]/,pop;s/(\D?)(\d+)/$1($a*$2)/g;print

এমন একটি সংস্করণ যা কেবল নিয়মিত এক্সপ্রেশন ব্যবহার করে।

s/(\d+)\((.*)\)/$2:$1/;s/(\D?)(\d+)(?=.*:(\d+)).*?/$1($3*$2)/g;s/:.*//

এটি ইতিবাচক চেহারা এবং অলস মিলনের মধ্যে একটি ক্যাপচার গ্রুপের মাধ্যমে কাজ করে। পার্ল 5 যদি এটি সমর্থন করে তবে সম্ভবত একটি ইতিবাচক চেহারাটি ব্যবহার করতে পারত তবে হায়! আমাকে কিছুটা সময় নিলো যে রেজেক্সের মাধ্যমে এই ধরণের জিনিসটি সম্ভব।


1
আরে লুক, আপনি -pকমান্ড লাইন বিকল্পটি ব্যবহার করে কিছু অক্ষর সংরক্ষণ করতে সক্ষম হবেন (আমি মনে করি এটি +1 চার বনাম 9 ,<>এবং এর জন্য ;print) ডিফল্টরূপে splitকাজ করবে $_(যা যা হবে তাতে <>) এবং মুদ্রণটি লুপের মধ্যে অন্তর্ভুক্ত করা হয়েছে ! আশা করি এইটি কাজ করবে!
ডোম হেস্টিংস

1
ধন্যবাদ! এটা সাহায্য করেছিল. -P বিকল্পটি কেবল আমার মন অতিক্রম করে নি। সম্ভবত যেহেতু এটি এমন কোনও বিষয় যা গল্ফ প্রসঙ্গে খুব কমই ব্যবহৃত হয়। আপনি কেন এটি +1 চর মনে করেন? এই চ্যালেঞ্জটিতে সুইচগুলি ব্যবহারের জন্য জরিমানার বিষয়ে কিছু উল্লেখ করা হয়নি।
LukStorms

আমি এখনই পোস্টটি খুঁজে পাচ্ছি না, তবে এই মেটা পোস্টে পার্লের পতাকাগুলির জন্য স্কোরিংয়ের কথা উল্লেখ করেছে
ডোম হেস্টিংস

1
আমার খারাপ, দেখে মনে হচ্ছে আমি এসেছি এবং আপনার সাথে খুব অনুরূপ সমাধান পোস্ট করেছি, যা কার্যকরভাবে আপনার আরও কিছুটা গল্ফ সংস্করণ! মূলত আপনার [+ -] ক্যাপচার করার দরকার নেই কারণ আপনি যে কোনও উপায়ে তাদের প্রতিস্থাপনে অক্ষত রেখেছেন
a

চমৎকার. আপনার কারণে, পার্ল এই চ্যালেঞ্জে এমনকি পাইথ / সিজাম সমাধানগুলিকেও মারধর করে। সেই বিভাজনটি বন্ধনীগুলি সরিয়ে দেওয়ার পরেও আমার অবৈধ ইনপুটগুলির যত্ন নেওয়া উচিত হয়নি।
LukStorms

1

রেটিনা , 50 51 43 বাইট

আমি মনে করি এটি আমার প্রথম রেটিনা প্রোগ্রাম হতে পারে। যদি তা না হয় তবে এটিই আমার প্রথম রেটিনা প্রোগ্রাম যা এই জটিল (সত্যিই জটিল নয়, Each) প্রতিটি লাইন নিজস্ব ফাইলে চলে।

+`(\d+)\((\D?)(\d+)
$1($'$2($1*$3)
.+?\)
$'

আমি আসলে এটি রেটিনার সাথে পরীক্ষা করিনি, আমি একাধিকবার রেজেক্স-রিপ্লেসম টেস্টার ব্যবহার করে এটি পরীক্ষা করেছি, তবে এটি কাজ করা উচিত।

প্রথম উদাহরণের জন্য বর্ণনা:

যেহেতু এখানে ফাইলগুলির সংখ্যা রয়েছে তাই রেটিনা প্রতিস্থাপন মোড ব্যবহার করে। প্রথম প্রতিস্থাপন (প্রথম দুই ফাইল) একটি সংখ্যা বিতরণ করা সরিয়ে ফেলবে এবং যে বন্টন যুগল যোগ (23*12)দান শেষ পর্যন্ত 23(+42)(23*12)+`শুরুতে রেটিনাকে বারবার প্রতিস্থাপন করতে বলে প্যাটার্নটি মেলে না, এবং যেহেতু এটি আবার মিলছে, প্যাটার্নটি এটি দিয়ে প্রতিস্থাপন করে 23()(23*12)+(23*42)। এটি আর মেলে না, সুতরাং পরবর্তী প্রতিস্থাপনের জন্য পরবর্তী 2 টি ফাইল ব্যবহৃত হয়। এইবার, এটি কেবল অপসারণ করে 23()। এটি দুর্দান্তভাবে কাজ করে: যেহেতু পণ্যগুলি শেষের সাথে যুক্ত হয়, তাই কোনও সংখ্যার চিহ্ন না থাকলে আমার কোনও অদ্ভুত কিছু করতে হবে না, কারণ চিহ্ন ছাড়া কেবল একমাত্র প্রথম সংখ্যা।

সম্পাদনা: $'প্রতিস্থাপনে ম্যাচের পরে স্ট্রিংয়ের বাকি অংশগুলি উপস্থাপন করে, তাই আমি পিছনের (.*)গুলি সরিয়ে ফেলতে পারি ।


0

কে, 98 বাইট

খুব গল্ফ হয় না।

{,/(*x){(s#y),("*"/:(x;(s:(*y)in"+-")_y))/:$"()"}/:1_x@:&~~#:'x:((0,&~x in .Q.n)_x){x_'x?'y}/"()"}

অ-অঙ্কে বিভক্ত করুন, প্যারেনগুলি সরিয়ে ফেলুন, খালি স্ট্রিংগুলি সরিয়ে ফেলুন, তারপরে xপ্রথম স্ট্রিং হিসাবে ধ্রুবক ধরে রাখুন , *প্রতিটি অবশিষ্ট স্ট্রিংয়ের সাথে একত্রিত করুন, প্রথম yবন্ধনী করুন, এবং উপস্থিত থাকলে চিহ্নটিতে সরান; একক স্ট্রিং মধ্যে আউটপুট সমতল।

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