रेटिना , 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
अब हम पहले से ही अग्रदर्शी दूसरे मामले के लिए आवश्यक है और दूसरों से सच है जब मिलान कभी नहीं हो सकता x
है, तो हम बस सामान्यीकरण कर सकते हैं 1
एक करने के लिए \w
:
(\^1)?\w(?=1*x.(1+)| |$)
$2
पहला मामला वास्तव में दूसरों के साथ कुछ भी नहीं है, इसलिए हम इसे अलग रखते हैं।