लक्ष्य:
एक संपूर्ण कार्यक्रम या फ़ंक्शन लिखें जो प्रस्तावक तर्क में एक सूत्र लेता है (इसलिए तार्किक अभिव्यक्ति या अभिव्यक्ति के रूप में संदर्भित ) और उस सूत्र को सामान्य सामान्य रूप में आउटपुट करता है । दो स्थिरांक हैं, ⊤
और ⊥
सच्चे और झूठे, एक एकल ऑपरेटर का प्रतिनिधित्व ¬
निषेध का प्रतिनिधित्व करने, और बाइनरी ऑपरेटरों ⇒
, ⇔
, ∧
, और ∨
निहितार्थ, तुल्यता, संयोजन के रूप, और अलगाव का प्रतिनिधित्व क्रमश: जो सामान्य तार्किक कार्यों के सभी (पालन DeMorgan के नियम , डबल निषेध उन्मूलन , आदि।)।
संयोजक सामान्य रूप निम्नानुसार परिभाषित किया गया है:
- कोई भी परमाणु अभिव्यक्ति (सम्मिलित
⊤
और सम्मिलित⊥
) सामान्य रूप में होती है। - किसी भी पूर्व निर्मित अभिव्यक्ति की उपेक्षा, संयुग्मित सामान्य रूप में है।
- किन्हीं दो पूर्व निर्मित अभिव्यक्तियों का विघटन सामान्य रूप में होता है।
- किसी भी दो पूर्व निर्मित अभिव्यक्तियों का संयुग्मन सामान्य रूप में होता है।
- कोई भी अन्य अभिव्यक्ति सामान्य रूप में नहीं है।
किसी तार्किक अभिव्यक्ति को गैर-विशिष्ट रूप से एक तार्किक रूप से समतुल्य अभिव्यक्ति के रूप में सामान्य रूप में परिवर्तित किया जा सकता है ( यह एल्गोरिथ्म देखें )। आपको उस विशेष एल्गोरिथ्म का उपयोग करने की आवश्यकता नहीं है।
इनपुट:
आप किसी भी सुविधाजनक प्रारूप में इनपुट ले सकते हैं; उदाहरण के लिए, एक प्रतीकात्मक तार्किक अभिव्यक्ति (यदि आपकी भाषा इसका समर्थन करती है), एक स्ट्रिंग, कुछ अन्य डेटा संरचना। आपको सच्चे, झूठे और तार्किक ऑपरेटरों के लिए समान प्रतीकों का उपयोग करने की आवश्यकता नहीं है जैसा कि मैं यहां करता हूं, लेकिन आपकी पसंद सुसंगत होनी चाहिए और आपको अपने उत्तर में अपनी पसंद स्पष्ट नहीं करनी चाहिए। आप किसी अन्य इनपुट को स्वीकार नहीं कर सकते हैं या अपने इनपुट प्रारूप में किसी भी अतिरिक्त जानकारी को एनकोड नहीं कर सकते हैं। आपके पास परमाणु अभिव्यक्तियों की एक मनमानी संख्या को व्यक्त करने का कोई तरीका होना चाहिए; जैसे कि पूर्णांक, वर्ण, तार, आदि।
आउटपुट:
किसी भी सुविधाजनक प्रारूप में फिर से सामान्य सामान्य रूप में सूत्र। यह आपके इनपुट के समान प्रारूप में होने की आवश्यकता नहीं है, लेकिन यदि कोई अंतर हो तो आपको समझाना चाहिए।
परीक्षण के मामलों:
P ∧ (P ⇒ R) -> P ∧ R
P ⇔ (¬ P) -> ⊥
(¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))
टिप्पणियाँ:
- यदि इनपुट एक्सप्रेशन एक टॉटोलॉजी है,
⊤
तो एक मान्य आउटपुट होगा। इसी तरह, यदि इनपुट अभिव्यक्ति एक विरोधाभास है,⊥
तो एक वैध आउटपुट होगा। - आपके इनपुट और आउटपुट प्रारूप दोनों के पास सभी संभावित तार्किक अभिव्यक्तियों को व्यक्त करने में सक्षम संचालन का एक सुव्यवस्थित क्रम होना चाहिए। आपको किसी प्रकार के कोष्ठक की आवश्यकता हो सकती है।
- आप तार्किक कार्यों के लिए infix, उपसर्ग या पोस्टफ़िक्स संकेतन के किसी भी अच्छी तरह से परिभाषित विकल्प का उपयोग कर सकते हैं। यदि आपकी पसंद मानक से भिन्न है (नकारात्मकता उपसर्ग है, तो बाकी सब infix हैं), कृपया अपने उत्तर में स्पष्ट करें।
- संयोजी सामान्य रूप सामान्य रूप से विशिष्ट नहीं है (पुन: व्यवस्थित होने तक भी नहीं)। आपको केवल एक वैध फॉर्म का उत्पादन करने की आवश्यकता है ।
- हालाँकि, आप परमाणु अभिव्यक्तियों का प्रतिनिधित्व करते हैं, वे तार्किक स्थिरांक, ऑपरेटर और समूहन प्रतीकों (यदि आपके पास हैं) से अलग होना चाहिए।
- अंतर्निर्मित सामान्य रूप की गणना करने वाले अंतर्निहित इन्स को अनुमति दी जाती है।
- मानक खामियों को मना किया जाता है।
- यह कोड-गोल्फ है ; सबसे छोटा जवाब (बाइट्स में) जीतता है।
P
और (P ∨ Q) ∧ (P ∨ (¬Q))
दोनों सामान्य सामान्य रूप में हैं।