জেলি , 28 বাইট
ṣ”+ṣ”xV$€)p/ZPSƭ€j⁾x^Ʋ€j“ +
এটি অনলাইন চেষ্টা করুন!
পুরো প্রোগ্রাম। দুটি বহুত্বের দুটি স্ট্রিংয়ের তালিকা হিসাবে নেয়।
ব্যাখ্যা (প্রসারিত ফর্ম)
ṣ”+ṣ”xV$€µ€p/ZPSƭ€j⁾x^Ʋ€j“ + ” Arguments: x
µ Monadic chain.
€ Map the monadic link over the argument.
Note that this will "pop" the previous chain, so
it will really act as a link rather than a
sub-chain.
ṣ”+ ṣ, right = '+'.
Split the left argument on each occurrence of
the right.
Note that strings in Jelly are lists of
single-character Python strings.
€ Map the monadic link over the argument.
$ Make a non-niladic monadic chain of at least
two links.
ṣ”x ṣ, right = 'x'.
Split the left argument on each occurrence of
the right.
V Evaluate the argument as a niladic link.
/ Reduce the dyadic link over the argument.
p Cartesian product of left and right arguments.
€ Map the monadic link over the argument.
Ʋ Make a non-niladic monadic chain of at least
four links.
Z Transpose the argument.
€ Map the monadic link over the argument.
ƭ At the first call, call the first link. At the
second call, call the second link. Rinse and
repeat.
P Product: ;1×/$
S Sum: ;0+/$
j⁾x^ j, right = "x^".
Put the right argument between the left one's
elements and concatenate the result.
j“ + ” j, right = " + ".
Put the right argument between the left one's
elements and concatenate the result.
aliasing
)
হিসাবে একই µ€
।
একটি অনুবর্তন ”
নিহিত এবং বাদ দেওয়া যেতে পারে।
অ্যালগরিদম
ধরা যাক আমাদের এই ইনপুটটি পেয়েছে:
["6x^2 + 7x^1 + -2x^0", "1x^2 + -2x^3"]
প্রথম পদ্ধতিটি পার্সিং, দুটি বহুভুজের প্রতিটিতে প্রয়োগ করা হয়। আসুন প্রথমটি পরিচালনা করি "6x^2 + 7x^1 + -2x^0"
:
প্রথম পদক্ষেপটি স্ট্রিংকে বিভক্ত করা হয় '+'
, যাতে শর্তগুলি পৃথক করা যায়। এর ফলে:
["6x^2 ", " 7x^1 ", " -2x^0"]
পরবর্তী পদক্ষেপটি প্রতিটি স্ট্রিংকে বিভক্ত করা হয় 'x'
, ঘনক থেকে গুণককে আলাদা করতে। ফলাফল এটি:
[["6", "^2 "], [" 7", "^1 "], [" -2", "^0"]]
বর্তমানে, দেখে মনে হচ্ছে এই স্ট্রিংগুলিতে প্রচুর পরিমাণে আবর্জনা রয়েছে তবে ট্র্যাশটি আসলে গুরুত্বহীন। এই স্ট্রিংগুলি সমস্ত নীলাডিক জেলি লিঙ্ক হিসাবে মূল্যায়ন করা হচ্ছে। তুচ্ছভাবে, স্পেসগুলি গুরুত্বহীন, কারণ তারা সংখ্যার অঙ্কের মধ্যে নয়। সুতরাং আমরা পাশাপাশি নীচের মূল্যায়ন করতে এবং এখনও একই ফলাফল পেতে পারে:
[["6", "^2"], ["7", "^1"], ["-2", "^0"]]
^
গুলি একটি বিট আরো ধকল চেহারা, কিন্তু তারা আসলে হয় কিছু করতে হবে না! ঠিক আছে, ^
বিটওয়াইজ এক্সওআর পরমাণু, তবে নীলাদিক শৃঙ্খলাগুলি মোনাডিক লিঙ্কগুলির মতো কাজ করে, প্রথম লিংকটি আসলে যুক্তি হিসাবে পরিবর্তিত হয়, যদি এটি নীলাডিক হয় তবে। যদি এটি না হয়, তবে লিঙ্কটির একটি যুক্তি থাকবে 0
। অভিজাতদের ^
প্রথম চর হিসাবে এটি রয়েছে এবং ^
নীলাদিক নয়, তাই যুক্তি হিসাবে ধরে নেওয়া হয় 0
। স্ট্রিং বাকি, সংখ্যা অর্থাৎ ডান যুক্তি ^
। সুতরাং, উদাহরণস্বরূপ, ^2
হয়0 এক্সওআর 2 = 2। একথাও ঠিক যে,0 এক্সওআর এন = এন। সমস্ত অভিযাত্রী পূর্ণসংখ্যা, তাই আমরা ভাল are সুতরাং, উপরের পরিবর্তে এটি মূল্যায়ন করলে ফলাফল পরিবর্তন হবে না:
[["6", "2"], ["7", "1"], ["-2", "0"]]
এখানে আমরা যাচ্ছি:
[[6, 2], [7, 1], [-2, 0]]
এই ধাপে আরো রূপান্তর করবে "-0"
করার 0
।
যেহেতু আমরা উভয় ইনপুট পার্সিং করছি তাই পার্সিংয়ের পরে ফলাফলটি এটি হতে চলেছে:
[[[6, 2], [7, 1], [-2, 0]], [[1, 2], [-2, 3]]]
পার্সিংটি এখন সম্পূর্ণ। পরবর্তী প্রক্রিয়াটি হ'ল গুণ (গুণ)।
আমরা প্রথমে এই দুটি তালিকার কার্টেসিয়ান পণ্যটি নিই:
[[[6, 2], [1, 2]], [[6, 2], [-2, 3]], [[7, 1], [1, 2]], [[7, 1], [-2, 3]], [[-2, 0], [1, 2]], [[-2, 0], [-2, 3]]]
বাম তালিকা থেকে একটি উপাদান এবং ডান থেকে একটি করে ক্রমে অনেকগুলি জোড়া তৈরি করা হয়। এটি আউটপুটটির উদ্দেশ্যযুক্ত ক্রম হিসাবেও ঘটে। এই চ্যালেঞ্জটি সত্যই আমাদের গুণক বিতরণ প্রয়োগ করতে বলে, কারণ আমরা এর পরে ফলাফলটি আরও প্রক্রিয়া না করতে বলেছি।
প্রতিটি জোড়ের জোড়গুলি এমন পদগুলিকে উপস্থাপন করে যা আমরা গুণ করতে চাই, যার সাথে প্রথম উপাদানটি সহগ হয় এবং দ্বিতীয়টি ঘনিষ্ঠ হয়। শর্তগুলিকে গুণিত করতে, আমরা সহগকে গুণিত করব এবং এক্সটেনশনগুলি একসাথে যুক্ত করব (একটি এক্সগখ এক্সঘ= একটি খ xগএক্সঘ= ক খ ( এক্সগএক্সঘ) = ( একটি খ ) এক্সসি + ডি)। আমরা যে কিভাবে করব? আসুন দ্বিতীয় যুগলটি পরিচালনা করি [[6, 2], [-2, 3]]
,।
আমরা প্রথমে জোড়াটি স্থানান্তর করি:
[[6, -2], [2, 3]]
তারপরে আমরা প্রথম জুটির পণ্য এবং দ্বিতীয়টির যোগফল নিয়ে থাকি:
[-12, 5]
কোডটির প্রাসঙ্গিক অংশটি PSƭ€
প্রতিটি শর্তাদির জন্য প্রকৃতপক্ষে এর কাউন্টারটিকে পুনরায় সেট করে না, তবে তারা যেহেতু জোড়া, তাই এটির দরকার নেই।
সমস্ত জোড়া শর্তাদি পরিচালনা, আমাদের কাছে রয়েছে:
[[6, 4], [-12, 5], [7, 3], [-14, 4], [-2, 2], [4, 3]]
এখানে, গুণগুলি সম্পন্ন হয়েছে, কারণ আমাদের মতো পদগুলি একত্রিত করতে হবে না। চূড়ান্ত পদ্ধতিটি হ'ল প্রিট্টিফাইং।
আমরা প্রথম প্রতিটি জোড় এর সাথে যোগদান করি "x^"
:
[[6, 'x', '^', 4], [-12, 'x', '^', 5], [7, 'x', '^', 3], [-14, 'x', '^', 4], [-2, 'x', '^', 2], [4, 'x', '^', 3]]
তারপরে আমরা এই তালিকায় যোগ দেব " + "
:
[6, 'x', '^', 4, ' ', '+', ' ', -12, 'x', '^', 5, ' ', '+', ' ', 7, 'x', '^', 3, ' ', '+', ' ', -14, 'x', '^', 4, ' ', '+', ' ', -2, 'x', '^', 2, ' ', '+', ' ', 4, 'x', '^', 3]
লক্ষ করুন যে তালিকায় আমরা কীভাবে এখনও নম্বর পেয়েছি, সুতরাং এটি আসলে স্ট্রিং নয়। যাইহোক, জেলি "স্ট্রিংফিকেশন" নামে একটি প্রক্রিয়া আছে, ফলাফল প্রিন্ট আউট করার জন্য একটি প্রোগ্রাম কার্যকর করার শেষে ডানদিকে দৌড়ে। গভীরতা 1 এর তালিকার জন্য, এটি প্রতিটি উপাদানকে তার স্ট্রিং উপস্থাপনে সত্যই রূপান্তরিত করে এবং স্ট্রিংগুলিকে একসাথে যুক্ত করে, তাই আমরা পছন্দসই আউটপুটটি পাই:
6x^4 + -12x^5 + 7x^3 + -14x^4 + -2x^2 + 4x^3