আপনার পছন্দ মতো কোনও সংখ্যার (প্রায়) সমীকরণটি সমাধান করুন


27

+=-যেখানে কমপক্ষে একটি রয়েছে সেখানে অক্ষরের একটি স্ট্রিং দেওয়া হয়েছে =, সমস্ত চিহ্নগুলির মধ্যে এবং শুরুতে এবং শেষে এমন ধনাত্মক পূর্ণসংখ্যা প্রবেশ করান যাতে গণিতের সমীকরণগুলি সন্তুষ্ট থাকে।

উদাহরণস্বরূপ, ইনপুট দেওয়া

+-=-=

আপনাকে এফ এর মাধ্যমে ধনাত্মক পূর্ণসংখ্যার A প্রবেশ করানো দরকার

A+B-C=D-E=F

সমীকরণগুলি সমস্ত সন্তুষ্ট, যেমন A + B - Cএবং D - Eএবং Fসমস্ত একই সংখ্যা same

এটি করার জন্য অনেকগুলি সম্ভাব্য উপায় রয়েছে, যতক্ষণ সমীকরণগুলি কাজ করে ততক্ষণ কোনও ধরণের ধনাত্মক পূর্ণসংখ্যা ব্যবহার করা যেতে পারে। এখানে প্রতিটি লাইন ইনপুট করতে একটি সম্ভাব্য বৈধ আউটপুট +-=-=:

2+3-4=6-5=1
1+1-1=2-1=1
4+2-4=4-2=2
100+1-10=182-91=91
89+231-77=1024-781=243

নোট করুন যে এক্সপ্রেশনগুলির মানটি theোকানো সংখ্যাগুলির মতো ধনাত্মক পূর্ণসংখ্যার প্রয়োজন হয় না। উদাহরণস্বরূপ, প্রদত্ত ইনপুট ( -=-আউটপুট 1-10=8-17-9) এবং 10-1=17-8(9-তে আয়ুষ্কাল) উভয়ই সমানভাবে বৈধ। অবশ্যই কিছু ইনপুট যেমন =অভিব্যক্তি হিসাবে একটি নেতিবাচক থাকা অসম্ভব যেহেতু শুধুমাত্র ধনাত্মক সংখ্যা 5=5সন্নিবেশ করা যেতে পারে।

আরও মনে রাখবেন যে শূন্য একটি ধনাত্মক পূর্ণসংখ্যা নয়।

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

আপনি সংখ্যাগুলিকে স্ট্রিংয়ে সরাসরি ofোকানোর পরিবর্তে একটি তালিকা হিসাবে আউটপুট করতে পারেন। আপনি যদি আউটপুট স্ট্রিং করেন তবে চিহ্ন এবং সংখ্যা পৃথক করে ফাঁকা স্থান থাকতে পারে। সুতরাং, ইনপুট জন্য +-=-=, আউটপুট

2, 3, 4, 6, 5, 1

অথবা

2 + 3 - 4 = 6 - 5 = 1

আউটপুট আউট সমান

2+3-4=6-5=1

পরীক্ষার মামলা

Input | One Possible Output
= | 1=1
== | 2=2=2
+= | 1+3=4
=+ | 2=1+1
-= | 30-10=20
=- | 1=2-1
=-= | 3=7-4=3
=+= | 2=1+1=2
=== | 100=100=100=100
+=- | 3+2=7-2
-=+ | 7-2=3+2
+=+ | 3+3=3+3
-=- | 1-10=8-17
--= | 60-1-1=58
++= | 60+1+1=62
-+= | 60-9+1=52
+-= | 60+9-1=68
+-=-= | 2+3-4=6-5=1
--=-- | 2-1-1=2-1-1
==-== | 47=47=50-3=47=47
=++=+-=-+=--= | 3=1+1+1=3+1-1=1-1+3=5-1-1=3
+--++-=-+-+- | 35+10-16-29+20+107-1000=5-4+3-2+1-876
====== | 8=8=8=8=8=8=8


আমরা সূত্রের দৈর্ঘ্যের উপরের উপরের কোনও আবদ্ধ অনুমান করতে পারি?
xnor

2
@xnor আপনি ধরে নিতে পারেন ইনপুটটি 2 ^ 16 অক্ষরের চেয়ে কম লম্বা যদি এটি সাহায্য করে।
ক্যালভিনের

উত্তর:


16

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

[-+]
$&1
\B((\+1)|(-1))*
$._$*1$#3$*1$#2$*_$&
+`1_

1+
$.&

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

একই বাইট গণনায় বিকল্প সমাধান:

((\+)|(-))*
$._$*1$#3$*1$#2$*_$&
+`1_

([+-])1*
$+1
1+
$.&

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

ব্যাখ্যা

মূল ধারণাটি হ'ল সমস্ত +গুলি ও -সরল +1এবং -1ক্রিয়াকলাপগুলিতে পরিণত করা এবং তারপরে পর্যাপ্ত পরিমাণে সংশোধন করা যা সমস্ত সমীকরণকে কাজ করে। সমীকরণগুলিকে ম্যাচ করার জন্য, আমরা কেবল তাদের প্রতিটিের জন্য একই সংখ্যাটি প্রিনেন্ড করতে পারি এবং তারপরে একে একে একে কমিয়ে দিতে এবং তার পরেরটির জন্য একে একে +1বাড়িয়ে দিতে -1পারি। যেহেতু আমরা অবিচ্ছিন্ন সংখ্যার সাথে কাজ করব, একমাত্র ধরাটি হ'ল প্রথম সংখ্যাটি যথেষ্ট পরিমাণে বড় হওয়া দরকার যা আমরা এটিকে 1 টি পর্যাপ্ত পরিমাণে হ্রাস করতে পারি।

[-+]
$&1

আমরা 1প্রতিটি -বা পরে একটি সন্নিবেশ দ্বারা শুরু +

\B((\+1)|(-1))*
$._$*1$#3$*1$#2$*_$&

\Bনিশ্চিত করে যে এই ম্যাচ ইনপুট শুরুতে পারেন, অথবা একটি মধ্যবর্তী =এবং একটি +বা -, অর্থাত্ সব অবস্থানের যেখানে আমরা একটি অভিব্যক্তি নেতৃস্থানীয় সংখ্যা সন্নিবেশ করতে চান। ((\+1)|(-1))*অংশ তারপর কেবল সংখ্যা, মোট ছাত্র +1s এবং -1দলে দলে গুলি 2এবং 3যথাক্রমে। এখন আসুন প্রতিস্থাপনের স্ট্রিংটি ভেঙে দিন:

$._$*1   # For each character in the current string, insert a 1. This is
         # an offset which is the same for each expression and is guaranteed
         # to be large enough that all subsequent +1s can be cancelled.
$#3$*1   # For each -1, insert a 1.
$#2$*_   # For each +1, insert a _.
$&       # Re-insert the string of +1s and -1s.
+`1_

বার বার 1_স্ট্রিং থেকে ড্রপ , +1এস থেকে প্রয়োজনীয় বাতিলকরণ প্রয়োগ করে ।

1+
$.&

অবশেষে, এরের সমস্ত স্ট্রিংগুলি 1দৈর্ঘ্যের সাথে প্রতিস্থাপিত করে আনারি থেকে দশমিক রূপান্তর করতে।


8

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

lambda e:sum([[len(e+s)-2*s.count('+')]+[1]*len(s)for s in e.split('=')],[])

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


3
আপনি একটি ব্যাখ্যা যোগ করতে পারেন?
ক্যালভিনের

1
@ হেলকাহোম্বা ধারণাটি মোটামুটি সহজ: প্রথমে প্রতিটি ইনপুট বিভক্ত করে সমান চিহ্ন দিয়ে বিভক্ত করুন। প্রতিটি খণ্ডের প্রথম সংখ্যাটি বেছে নিন eqtn_len + plus_signs + minus_signs - 2 * plus_signs = eqtn_len + minus_signs - plus_signs। তারপরে যেহেতু খণ্ডে থাকা সমস্ত অন্যান্য সংখ্যা একই, তাই অংশটির জন্য মোট পরিমাণ কাজ করে eqtn_len + minus_signs - plus_signs - minus_signs + plus_signs = eqtn_len। সমীকরণের দৈর্ঘ্যটি ইতিবাচক হতে হবে, তাই সমস্ত কিছুই কার্যকর হয়।
FryAmTheEggman

6

পাইথন 2, 199 179 178 172 162 158 156 152 151 বাইট

উপায় খুব দীর্ঘ, তবে সমাধানটি তৈরি করা সহজ ছিল।

from itertools import*
i=input()
k='%s'
s=k+k.join(i)+k
for p in product(*[range(1,65537)]*-~len(i)):
    if eval((s%p).replace('=','==')):print s%p;break

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

এটি সমাধান না পাওয়া পর্যন্ত এটি প্রতিটি সম্ভাবনার চেষ্টা করবে। প্রোগ্রামটি অত্যন্ত ধীর। এটি প্রতিটি পুনরাবৃত্তিতে স্ট্রিং প্রতিস্থাপনও সম্পাদন করে। "172" সম্পাদনাটি এটিকে মারাত্মকভাবে ধীর করে তোলে , যেহেতু এটি একটি ছোট পরিসীমা দিয়ে শুরু করার চেয়ে সর্বাধিক থেকে শুরু হয়। উদাহরণস্বরূপ, কোনও সমাধানে পৌঁছানোর আগে ইনপুটগুলি -=বা =+2 ** 32 টি চেষ্টা করে দেখতে হবে।

প্রোগ্রামটির গতি বাড়ানোর জন্য, সম্পাদনা ইতিহাস থেকে 178 বাইট সহ সংস্করণটি ব্যবহার করুন।


rangeপাইথন 2 এ তাত্ক্ষণিকভাবে তালিকা হিসাবে পুরো পরিসীমা তৈরি করে না ? আইআইআরসি আপনি xrangeপরিবর্তে এটি ব্যবহার করে এটির গতি বাড়িয়ে দিতে পারেন , কারণ আমি মনে করি এটি অলস-লোডিং সংস্করণ (পাইথন 3 ডিফল্ট হিসাবে অলস ব্যবহার করে range)
ডেলিথ

1
@ ডেলিওথ যা অন্য একটি বাইট ব্যবহার করে, যদিও। লক্ষ্যটি হ'ল বাইটগুলি সরিয়ে ফেলা । এছাড়াও, এটি আসলে খুব বেশি গতিবেগ সরবরাহ করতে পারে না, কারণ বেশিরভাগ ধীরগতি হ'ল পুনরাবৃত্তির সংখ্যা থেকে, তালিকার তৈরি নয়, যা কেবল একবারই ঘটে। আমি দৌড়ে এসেছি print range(1,65537)এবং এটি 0.034 এস-এ শেষ হয়েছে।
mbomb007

ঠিক আছে, অবশ্যই - এটির এত দীর্ঘ সময় লাগার উদ্বেগের কারণে আরও একটি "এটি ঠিক একই পদ্ধতিটির সাথে এটির গতি বাড়িয়ে তুলতে পারে"। মেমরি থ্র্যাশিং উল্লেখযোগ্য মন্দার কারণ হতে পারে। এছাড়াও, আপনি সেট না করে কিছু বাইট (সম্ভবত কেবলমাত্র 1) কেটে ফেলতে পারেন l=..., তবে ডানদিকে রেখে product(range(...),repeat=len(s)+1)। আপনার যদি প্রথম বন্ধনী প্রয়োজন তবে এটি কেবল একটি বাইট সংরক্ষণ করে (\ n)
ডেলিথ

@ ডেলিওথ এমনকি যদি আমার চারপাশে পেরেনগুলির প্রয়োজন হয় তবে আমি len(s)+1তার -~len(s)পরিবর্তে ব্যবহার করতে পারতাম , যার জন্য পেরেনগুলির প্রয়োজন হবে না।
mbomb007

আহ ঠিক. আমি সর্বদা বিটওয়াইজ অপারেশন এবং কৌশলগুলি সম্পর্কে ভুলে যাই frআমর জাভাস্ক্রিপ্টে আমার পাইথনের দক্ষতাটি গ্রহণ করা টোলটি হতে হবে!
বিতরণ করুন

5

জাভাস্ক্রিপ্ট (ES6), 92 82 বাইট

@ Xnor এর কৌশল দ্বারা গল্ফড 8 বাইট

let f =
x=>x.split`=`.map(q=>(x+q).length-2*~-q.split`+`.length+[...q,''].join(1)).join`=`
<input oninput="if(/^[+=-]+$/.test(value))O.innerHTML=f(value)" value="="><br>
<pre id=O>1=1</pre>

এখানে কৌশলটি হ'ল 1প্রতি +বা তার পরে একটি সন্নিবেশ করানো -, তারপরে প্রতিটি অভিব্যক্তিটিকে এমন সংখ্যায় প্রম্পেন্ড করুন যা অভিব্যক্তিটিকে ইনপুটটির দৈর্ঘ্যের সমান করে। এইভাবে আমরা গ্যারান্টি দিতে পারি যে সংখ্যাটি সর্বদা ইতিবাচক থাকে; যেহেতু =স্ট্রিংয়ে সর্বদা কমপক্ষে 1 থাকে তাই এর সংখ্যা +কখনই স্ট্রিংয়ের দৈর্ঘ্যে পৌঁছতে পারে না, তাই বাকিটি সর্বদা কমপক্ষে থাকে 1। আপনি +উপরের স্নিপেটে একটি নির্বিচার সংখ্যায় টাইপ করে এটি যাচাই করতে পারেন ।


5

পাইথন 2 , 120 119 বাইট

-1 বাইট mbomb007 ধন্যবাদ

a=['1'+(n and('1'.join(n)+'1'))for n in input().split('=')]
print'='.join(`max(map(eval,a))-eval(c)+1`+c[1:]for c in a)

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

প্রথমে আমি 1প্রতিটি অবস্থানে সন্নিবেশ করান , সর্বোচ্চ মানটি পরীক্ষা করতে, তারপরে এটি প্রতিটি সমীকরণের অফসেট হিসাবে যুক্ত করুন add এই কাজটি কারণ আপনি নেতিবাচক সংখ্যা যুক্ত করতে পারবেন না, তাই সর্বনিম্ন ফলাফল +কেবলমাত্র সমীকরণের পরিমাণ দ্বারা দেওয়া হয় +


আপনি কয়েকটি জায়গা সরিয়ে ফেলতে পারেন।
mbomb007

5

জিএনইউ প্রোলগ, 156 বাইট

x(L,R,V)-->{E#>0},({L=[E|R],E=V};x(L,[E|R],X),("+",{V#=X+E};"-",{V#=X-E})).
q(L,R,V)-->x(L,T,V),({T=R};"=",q(T,R,V)).
s(Q,L):-q(L,[],_,Q,[]),fd_labeling(L).

ব্যাখ্যা

সমাধানের জন্য আমরা একগুচ্ছ সমীকরণ পেয়েছি, সুতরাং কেন আসল সমীকরণ সমাধানকারী ব্যবহার করবেন না?

xমূলত ফর্মের সমীকরণের জন্য একটি সমীকরণ মূল্যায়নকারী +-+; সমীকরণ নিজেই ছাড়াও, এর দুটি অতিরিক্ত যুক্তি রয়েছে (একটি পার্থক্য তালিকা L,Rযাতে সমীকরণের মান থাকে এবং একটি মান Vযা সমীকরণকে মূল্যায়ন করে)। Prolog মধ্যে স্বাভাবিক হিসাবে, এটা কোন ভাবেই বৃত্তাকার ব্যবহার করা যেতে পারে (যেমন আপনি নির্দিষ্ট করতে পারেন Vএবং একটি পেতে L,Rউল্লেখ L,Rএবং একটি পেতে Vউভয় নির্দিষ্ট করতে ও যাচাই করুন যে মান সঠিক হয়, অথবা তন্ন তন্ন নির্দিষ্ট ক্ষেত্রে উপযুক্ত সীমাবদ্ধতার উভয় উপর স্থাপন করা হবে Vএবং L,R)। "বর্তমান উপাদান" এর L,Rনামকরণ করা হয়েছে E, এবং আমরা একটি দৃ include়তাও অন্তর্ভুক্ত করেছিE0 এর চেয়ে বড় (কারণ প্রশ্নের ইতিবাচক সংখ্যার ব্যবহার প্রয়োজন)। এই ফাংশনটি আমি যা চাই তার চেয়ে কিছুটা বেশি [E|R]ভার্বোজ , যেমন তালিকাগুলি ডান-অ্যাসোসিয়েটিভ তবে সংযোজন এবং বিয়োগফল বাম-সহযোগী হিসাবে এই কারণে, আমাকে প্যাটার্ন ম্যাচ / মিল দুটিবার লিখতে হয়েছিল । দুঃখের বিষয়, কাজ করার জন্য আমাদের নিজস্ব বাম-সহযোগী তালিকা প্রকারের কনস সেলগুলির বাইরে আবিষ্কারের পরিবর্তে একটি প্রকৃত তালিকা ব্যবহার করা উচিত fd_labeling

qঅনুরূপ x, কিন্তু অন্তর্ভুক্ত =। এটি মূলত কেবল কল করে xএবং নিজেই পুনরাবৃত্তি করে। উল্লেখ্য যে, তা কিভাবে পার্থক্য তালিকা কাজ করে, দেখাচ্ছে যে আপনি দুই পার্থক্য তালিকা কনক্যাটেনেট করতে পারেন একটি খুব স্পষ্ট বিক্ষোভের এর L,Tএবং T,Rএকটি একক পার্থক্য তালিকায় L,R। মূল ধারণাটি হ'ল একটি পার্থক্য তালিকাটি একটি আংশিক ফাংশন যা আর্গুমেন্ট গ্রহণ করে Rএবং সেই মানটি দেয় Lযা Rতালিকার সাথে এটি নিজেই চাপিয়ে দেওয়া হয়। সুতরাং, একটি পার্থক্য তালিকার যুক্তি এবং অন্যটির রিটার্ন মান সনাক্ত করে আমরা ফাংশনগুলি রচনা করতে পারি, এবং এইভাবে তালিকাগুলিকে একত্রিত করতে পারি।

অবশেষে, sযা ফানসিটন যা কার্যত প্রশ্নের সমাধান করে, এটি একটি মোড়ক ফাংশন যা qআর্গুমেন্টের সাথে কল করে। আমরা পার্থক্য তালিকাটিকে []তার যুক্তি হিসাবে সরবরাহ করে একটি নিয়মিত তালিকায় রূপান্তর করি এবং fd_labelingআমরা যে সমীকরণটি তৈরি করেছি তার সমাধান খুঁজে পেতে ব্যবহার করি। (ডিফল্টরূপে, এটির কাছে মানগুলি সেট করা অন্য কোনও কিছুতে সেট করার কোনও কারণ নেই বলে মনে হয় However তবে এটি কনফিগার করা যেতে পারে; value_method(random)উদাহরণস্বরূপ, সর্বত্র 1s স্থাপনের চেয়ে আরও "আকর্ষণীয়" সমাধান দেয়, এবং এখনও খুব দ্রুতগতিতে। )

নমুনা আউটপুট

প্রোগ্রাম হিসাবে লিখিত হিসাবে:

| ?- s("=++=+-=-+=--=", V).

V = [3,1,1,1,3,1,1,3,1,1,5,1,1,3] ?

আমি যদি প্রোগ্রামটি যুক্ত করতে কিছুটা দীর্ঘ করি তবে value_method(random)ফলাফলটি পরিবর্তিত হয়, তবে এরকম কিছু দেখাচ্ছে:

| ?- s("=++=+-=-+=--=", V).

V = [68,6,12,50,85,114,131,45,3,26,71,1,2,68] ? 

উভয় ক্ষেত্রেই, ?আউটপুটটির শেষে অর্থ হ'ল একাধিক সমাধান হতে পারে। (অবশ্যই, এক্ষেত্রে আমরা জানি যে একাধিক সমাধানের চেয়ে অনেক বেশি আছে !)


4

গণিত, 116 বাইট

Join@@(Prepend[#^2,1-Min[Tr/@c]+Tr@#]&/@(c=Characters@StringSplit["0"<>#<>"0","="]/."+"->-1/."-"->1/."0"->Nothing))&

খাঁটি ফাংশন ইনপুট হিসাবে একটি স্ট্রিং গ্রহণ এবং ইতিবাচক পূর্ণসংখ্যার একটি তালিকা ফেরত। বেসিক কৌশল: আমরা কেবল 1 টি যোগ করি এবং 1 টি বিয়োগ করি এবং সমস্ত কিছুকে সমান করার জন্য আমরা প্রতিটি অভিব্যক্তির প্রাথমিক সংখ্যা নির্বাচন করি।

c=Characters@StringSplit[#,"="]/."+"->-1/."-"->1প্রত্যেক সমান সাইন ইনপুট স্ট্রিং বিভক্ত করতে চায়, তবে একে প্রতিস্থাপন +দ্বারা -1এবং প্রতিটি -দ্বারা 1। যাইহোক, যদি শুরুতে বা শেষে সমান চিহ্ন থাকে তবে তা উপেক্ষা করা হবে। অতএব আমরা কৃত্রিমভাবে প্রতিটি প্রান্তে নতুন অক্ষর যুক্ত করি ( "0"<>#<>"0") এবং স্ট্রিং-বিভাজন সম্পূর্ণ ( /."0"->Nothing) সম্পূর্ণ হওয়ার পরে এটিকে দূরে সরিয়ে দেয় ।

প্রতিটি সাবলিস্টের মোট এখন একটি পূর্ণসংখ্যা সমান যা আমরা প্রতিটি এক্সপ্রেশনকে সমান করতে +এস এবং -এস এর সামনে রাখতে পারি । 1-Min[Tr/@c]এটি সর্বনিম্ন পূর্ণসংখ্যা যা সেগুলি সমস্ত ধনাত্মক করে তুলতে আমরা প্রতিটি সংখ্যায় যুক্ত করতে পারি। সুতরাং Prepend[#^2,1-Min[Tr/@c]+Tr@#]&প্রতিটি সাবলিস্ট গ্রহণ করে ( ^2তাদের সমস্ত এন্ট্রিগুলিতে পরিণত হয় 1) এবং এটি সর্বকালের সবচেয়ে ক্ষুদ্রতম ক্ষতিপূরণ পূর্ণসংখ্যার দ্বারা স্থানান্তরিত প্রিপেন্ড করে। ফলাফলগুলি তালিকা Joinআউটপুট উত্পাদন একসাথে এড হয়।


3

রুবি, 76

->s{(?1+s.gsub(/./){|a|a+?1}).split(?=).map{|e|e[0]="#{5**8-eval(e)}";e}*?=}

5**8গল্ফের কারণে এক্সপ্রেশনগুলির জন্য লক্ষ্য মানটি বিয়োগ 1 এ স্থির করা হয়েছে ! মূলত আমি s.size+1বিয়োগ 1 ব্যবহার করছিলাম ।

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->s{(?1+s.gsub(/./){|a|a+?1}).           #add a 1 at the beginning and after every symbol
       split(?=).                          #split into an array of expressions at = signs
       map{|e|                             #for each expression string
         e[0]="#{5**8-eval(e)}";e          #change the first number to 5**8-eval(e)
       }*?=                                #and rejoin the strings
}


puts f["="] 
puts f["=="] 
puts f["+="] 
puts f["=+"]
puts f["-="]
puts f["=-"]
puts f["=-="]
puts f["=+="]
puts f["==="]
puts f["+=-"]
puts f["-=+"]
puts f["+=+"]
puts f["-=-"]
puts f["--="]
puts f["++="]
puts f["-+="]
puts f["+-="]
puts f["+-=-="]
puts f["--=--"]
puts f["==-=="]
puts f["=++=+-=-+=--="]
puts f["+--++-=-+-+-"]
puts f["======"]

আউটপুট

390624=390624
390624=390624=390624
390623+1=390624
390624=390623+1
390625-1=390624
390624=390625-1
390624=390625-1=390624
390624=390623+1=390624
390624=390624=390624=390624
390623+1=390625-1
390625-1=390623+1
390623+1=390623+1
390625-1=390625-1
390626-1-1=390624
390622+1+1=390624
390624-1+1=390624
390624+1-1=390624
390624+1-1=390625-1=390624
390626-1-1=390626-1-1
390624=390624=390625-1=390624=390624
390624=390622+1+1=390624+1-1=390624-1+1=390626-1-1=390624
390624+1-1-1+1+1-1=390625-1+1-1+1-1
390624=390624=390624=390624=390624=390624=390624

2

পিএইচপি, 207 204 197 114 বাইট

সরাসরি পদ্ধতির: অনেক খাটো এবং দ্রুত

foreach(explode("=",$argn)as$t)echo"="[!$c],strlen($argn)+($c=count_chars($t))[45]-$c[43],@chunk_split($t,!!$t,1);

এটি দিয়ে চালান echo '<input>' | php -nR '<code>'বা এটি অনলাইনে পরীক্ষা করুন

ভাঙ্গন

foreach(explode("=",$argn)as$t) // loop through terms
    echo                            // print ...
        "="[!$c],                       // 1. "=" if not first term
        strlen($argn)                   // 2. maximum number
            +($c=count_chars($t))[45]   //    + number of "-"
            -$c[43],                    //    - number of "+"
        @chunk_split($t,!!$t,1);        // 3. each operator followed by "1"
  • !$cপ্রথম পুনরাবৃত্তিতে সত্য, 1স্ট্রিং ইন্ডেক্সিংয়ের জন্য কাস্ট করা ; "="[1]খালি.
    এর পরে, $cসেট করা এবং !$cমিথ্যা, প্রথম চরিত্রটিতে castালাই 0এবং "="[0]হয়।
  • যে কোনও পদটির সর্বাধিক মান প্লাস +1 এর বেশি হওয়া উচিত নয়;
    সুতরাং ইনপুটটির দৈর্ঘ্যের সাথে আমরা অবশ্যই নিরাপদ। সমস্ত শর্তাবলী এটি মূল্যায়ন করবে।
  • chunk_split($s,$n,$i)$iপ্রতিটি $nঅক্ষরের পরে সন্নিবেশ করান $s- এবং শেষে।
    খালি শর্তাবলীতে পরিণত হওয়া রোধ 1করতে খণ্ডের দৈর্ঘ্য সেট করে একটি ত্রুটি বাধ্য করা হয় 0

1

রাদা , 112 110 109 বাইট

f x{[(`:$x:`/"=")()|{|p|p~=":",""a=p;a~=`\+`,""b=p;b~="-","";["=",#x-#b+#a];{(p/"")|{|o|[o,"1"*#o]}_}}_][1:]}

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

এই প্রোগ্রামটির সাথে আমি যেমন ইচ্ছা তেমন স্প্লিট ফাংশন কাজ করে নি। উদাহরণস্বরূপ, split("", sep="")কিছুই না করে একটি খালি স্ট্রিং প্রদান করে। কীভাবে যৌক্তিক? এই কারণে প্রোগ্রামটি বিভক্ত শব্দার্থক আদর্শ হলে এটি হতে পারে তার চেয়ে প্রায় 20 বাইট বড় larger

এই উত্তরের ধারণাটি আমরা জানি যে ইনপুট স্ট্রিংয়ের দৈর্ঘ্য সমীকরণের মানের চেয়ে বড় বা সমান হতে হবে, সুতরাং আমরা স্ট্রিংয়ের দৈর্ঘ্য হিসাবে সমীকরণের মানটি সংজ্ঞায়িত করি। সমীকরণের প্রতিটি অংশের জন্য, আমরা মনে করি প্রতিটি অপারেটর হচ্ছে +1বা -1বিয়োগ করে তাদের সমীকরণের মানতে যুক্ত করে।

Ungolfed:

function f(x) {
    /* Adds ":"s around the string to prevent "=" being split wrong. */
    [split(`:$x:`, sep="=") | for p do
        p ~= ":", ""          /* Removes colons. */
        a := p; b := p        /* Initializes a and b to be p. */
        a ~= "\\+", ""        /* The lengths of a and are now equal to the */
        b ~= "-", ""          /* numbers of "-" and "+" characters in x. */
        push("=", #x-#b+#a)   /* Prints "=" and the value of the equation */
                              /* minus number of "+"s plus number of "-"s. */
        split(p, sep="") | for o do /* For each operator: */
            push(o)                 /* Prints the operator. */
            push(1) if [o != ""]    /* Prints 1 unless the operator is "". */
        done
    done][1:] /* Removes the first character of the output ("="). */
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.