রেটিনা , 53 43 42 41 40 35 বাইট
^[^x]+ |(\^1)?\w(?=1*x.(1+)| |$)
$2
গণনা উদ্দেশ্যে প্রতিটি লাইন পৃথক ফাইলে যায় তবে আপনি রেটিনার সাথে অনুরোধ করে উপরেরটিকে একক ফাইল হিসাবে চালাতে পারেন -s
পতাকাটির ।
এটি প্রত্যাশা করে যে ইনপুট স্ট্রিংয়ের নম্বরগুলি আনারিতে দেওয়া হবে এবং একই ফর্ম্যাটে আউটপুট দেবে। যেমন
1 + 11x + -111x^11 + 11x^111 + -1x^11111
-->
11 + -111111x + 111111x^11 + -11111x^1111
পরিবর্তে
1 + 2x + -3x^2 + 2x^3 + -1x^5
-->
2 + -6x + 6x^2 + -5x^4
ব্যাখ্যা
কোডটি একটি একক রেজেক্স বিকল্পকে বর্ণনা করে, যা মূলত 4 টি বিকল্প একটিতে সংকুচিত হয়। মনে রাখবেন যে কেবলমাত্র একটি শাখাই গ্রুপ পূরণ করবে $2
তাই অন্য তিনটি ম্যাচের কোনও হলে ম্যাচটি কেবল স্ট্রিং থেকে মুছে ফেলা হবে। সুতরাং আমরা আলাদাভাবে চারটি আলাদা কেসের দিকে নজর দিতে পারি:
^[^x]+<space>
<empty>
যদি স্ট্রিংয়ের শুরু থেকে কোনও জায়গায় না পৌঁছানো সম্ভব হয় তবে এর x
অর্থ প্রথম পদটি হ'ল ধ্রুবক শব্দ এবং আমরা এটি মুছতে পারি। লোভের কারণে +
, এটি ধ্রুবক শব্দটির পরেও প্লাস এবং দ্বিতীয় স্থানের সাথে মিলবে। যদি কোনও স্থির মেয়াদ না থাকে তবে এই অংশটি কখনও মিলবে না।
x(?= )
<empty>
এটি x
একটি স্পেসের সাথে অনুসরণ করে যা x
লিনিয়ার টার্মের (এটি উপস্থিত থাকলে) এর সাথে মিলে যায় এবং এটি সরিয়ে দেয়। আমরা নিশ্চিত হতে পারি যে এর পরেও একটি জায়গা রয়েছে, কারণ বহুবর্ষের ডিগ্রি সর্বদা কমপক্ষে 2 হয়।
1(?=1*x.(1+))
$1
এটি সূচক দ্বারা গুণকের গুণফল করে। এটি 1
সহগের সাথে একটির সাথে মেলে এবং লুয়াহেডের মাধ্যমে এটি পুরো সম্পর্কিত এক্সপোনেন্ট দ্বারা প্রতিস্থাপন করে।
(\^1)?1(?= |$)
<empty>
এটি পেছনের সাথে মিল রেখে বাকী সমস্ত এক্সপোজারকে হ্রাস করে 1
(লুকোয়ার্ড দ্বারা নিশ্চিত করা হয়)। যদি এটি মিলানো সম্ভব হয় ^11
(এবং একটি শব্দের সীমানা) আমরা এর পরিবর্তে এটি সরিয়ে ফেলি, যা লিনিয়ার শব্দটি সঠিকভাবে প্রদর্শন করার জন্য যত্ন নেয়।
সংক্ষেপণের জন্য, আমরা লক্ষ্য করেছি যে বেশিরভাগ শর্তগুলি একে অপরকে প্রভাবিত করে না। (\^1)?
তৃতীয় ক্ষেত্রে যদি চেহারাটি সত্য হয় তবে এটি মিলবে না, সুতরাং আমরা সেই দু'জনকে একসাথে রাখতে পারি
(\^1)?1(?=1*x.(1+)| |$)
$2
এখন আমরা ইতিমধ্যে lookahead দ্বিতীয় ক্ষেত্রে জন্য প্রয়োজন আছে এবং অন্যদের সত্য যখন মিলে হতে পারে না x
, তাই আমরা কেবল সাধারণের করতে 1
একটি থেকে \w
:
(\^1)?\w(?=1*x.(1+)| |$)
$2
প্রথম ক্ষেত্রে অন্যের সাথে সত্যিকারের মিলের কিছু নেই, তাই আমরা এটিকে আলাদা রাখি।