একটি যৌক্তিক অভিব্যক্তি কনজেক্টিভ স্বাভাবিক আকারে রূপান্তর করুন


10

গোল:

একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা প্রস্তাবিত যুক্তিতে একটি সূত্র গ্রহণ করে (এখন থেকে লজিক্যাল এক্সপ্রেশন বা অভিব্যক্তি হিসাবে উল্লেখ করা হয় ) এবং সেই সূত্রটি সম্মিলিত স্বাভাবিক আকারে আউটপুট করে । দুই ধ্রুবক আছে, এবং সত্য এবং মিথ্যা, একটি ইউনারী অপারেটর প্রতিনিধিত্বমূলক ¬অস্বীকৃতি প্রতিনিধিত্বমূলক, এবং বাইনারি অপারেটর , , , এবং সংশ্লেষ, সমানতা, একত্রে, এবং বিচ্ছিন্ন অবস্হা প্রতিনিধিত্বমূলক যথাক্রমে যা স্বাভাবিকের লজিক্যাল অপারেশন সমস্ত (আনুগত্য কর DeMorgan আইন , ডবল অস্বীকৃতি বর্জন ইত্যাদি))

কনজেক্টিভ স্বাভাবিক ফর্ম নীচে হিসাবে সংজ্ঞায়িত করা হয়:

  1. যে কোনও পারমাণবিক এক্সপ্রেশন (সহ এবং ) সম্মিলিত স্বাভাবিক আকারে।
  2. পূর্বে নির্মিত কোনও অভিব্যক্তির অবহেলা সম্মিলিত স্বাভাবিক আকারে in
  3. পূর্বে যে কোনও দুটি নির্মিত এক্সপ্রেশনর বিভাজনটি কনজেক্টিভ স্বাভাবিক আকারে।
  4. পূর্বে যে কোনও দুটি নির্মিত ভাবের সংমিশ্রণটি কনজেক্টিভ স্বাভাবিক আকারে।
  5. অন্য কোনও অভিব্যক্তি সম্মিলিত স্বাভাবিক আকারে নয়।

যে কোনও যৌক্তিক অভিব্যক্তি কনজেক্টিভ স্বাভাবিক আকারে ( এই অ্যালগরিদমটি দেখুন ) যৌক্তিক সমতুল্য অভিব্যক্তিতে (অদ্বিতীয়ভাবে) রূপান্তরিত হতে পারে । আপনার সেই নির্দিষ্ট অ্যালগরিদম ব্যবহার করার দরকার নেই।

ইনপুট:

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

আউটপুট:

কনজেক্টিভ সাধারণ ফর্মুলায় সূত্র আবার কোনও সুবিধাজনক বিন্যাসে। এটি আপনার ইনপুটের মতো একই ফর্ম্যাটে থাকা উচিত নয়, তবে কোনও ভিন্নতা থাকলে আপনার ব্যাখ্যা করা উচিত।

পরীক্ষার কেস:

P ∧ (P ⇒ R) -> P ∧ R
P ⇔ (¬ P) -> ⊥
(¬ P) ∨ (Q ⇔ (P ∧ R)) -> ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))

মন্তব্য:

  1. যদি ইনপুট এক্সপ্রেশনটি টাউটোলজি হয় তবে এটি একটি বৈধ আউটপুট হবে। একইভাবে, যদি ইনপুট এক্সপ্রেশনটি একটি বৈপরীত্য হয় তবে এটি একটি বৈধ আউটপুট হবে।
  2. আপনার ইনপুট এবং আউটপুট উভয় ফর্ম্যাটগুলিতে সমস্ত সম্ভাব্য যৌক্তিক অভিব্যক্তি প্রকাশে সক্ষম অপারেশনের একটি সু-সংজ্ঞায়িত ক্রম থাকা উচিত। আপনার কোনও প্রকারের প্রথম বন্ধনীর প্রয়োজন হতে পারে।
  3. যৌক্তিক ক্রিয়াকলাপের জন্য আপনি ইনফিক্স, উপসর্গ, বা পোস্টফিক্স স্বরলিপিগুলির কোনও সু-সংজ্ঞায়িত পছন্দ ব্যবহার করতে পারেন। যদি আপনার পছন্দটি মান থেকে পৃথক হয় (প্রত্যাখ্যান উপসর্গ, বাকিগুলি ইনফিক্স), দয়া করে আপনার উত্তরে এটি ব্যাখ্যা করুন।
  4. কনজেক্টিভ স্বাভাবিক ফর্ম সাধারণভাবে অনন্য নয় (এমনকি পুনরায় অর্ডারিং পর্যন্ত নয়)। আপনি শুধুমাত্র আউটপুট প্রয়োজন একটি বৈধ ফর্ম।
  5. তবে আপনি যদি পারমাণবিক ভাবের প্রতিনিধিত্ব করেন তবে এগুলি অবশ্যই যৌক্তিক ধ্রুবক, অপারেটর এবং গোষ্ঠীকরণের প্রতীকগুলি (যদি আপনার কাছে থাকে) থেকে পৃথক হওয়া উচিত।
  6. অন্তর্নিহিত স্বাভাবিক ফর্মের গণনা যা বিল্ট-ইনগুলিকে অনুমোদিত।
  7. স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ।
  8. এটি ; সংক্ষিপ্ত উত্তর (বাইটে) জেতা


1
পুনর্নির্মাণের জন্য সিএনএফ স্বতন্ত্র নয়: সমতুল্য এক্সপ্রেশন Pএবং (P ∨ Q) ∧ (P ∨ (¬Q))উভয়ই সম্মিলিত স্বাভাবিক আকারে।
গ্রেগ মার্টিন

1
টাউটোলজি / বৈপরীত্যের জন্য অনুসন্ধান করা সিএনএফ রূপান্তরের সাথে সম্পর্কিত নয় এমন একটি দ্বিতীয় কাজ, তাই আমি এই প্রয়োজনীয়তাটি বাদ দিয়ে নিজের চ্যালেঞ্জের মধ্যে রাখার পরামর্শ দেব would
লাইকনি

@ লাইকনি খুব সত্য। আমি প্রশ্নটি আপডেট করে বলেছিলাম যে এটি প্রয়োজনীয় আউটপুটগুলির চেয়ে টাউটোলজিস এবং দ্বন্দ্বগুলির সম্ভাব্য আউটপুট।
নেজেনিসিস

উত্তর:



8

তুমি আমাকে ঘৃণা করবে ...

গণিত, 23 বাইট

#~BooleanConvert~"CNF"&

ইনপুট ব্যবহার করবে Trueএবং Falseপরিবর্তে এবং খুব প্রশ্নই স্বরলিপি সেটির মতো হবে, কিন্তু অন্যথায়: অক্ষরের সব ¬, , , , এবং ম্যাথামেটিকাল (ইন স্বীকৃত হয় যখন সঙ্গে হল UTF-8 টি অক্ষর 00AC, F523, 29E6, 2227 ইনপুট , এবং 2228 যথাক্রমে) এবং বন্ধনীগুলি আপনার প্রত্যাশা অনুযায়ী কাজ করে।

ডিফল্টরূপে, আউটপুট ম্যাথমেটিকার পছন্দের প্রতীক ব্যবহার করবে: উদাহরণস্বরূপ, শেষ পরীক্ষার ক্ষেত্রে (! P || ! Q || R) && (! P || Q || ! R)পরিবর্তে আউটপুট আসবে ((¬ P) ∨ ((¬ Q) ∨ R)) ∧ ((¬ P) ∨ (Q ∨ (¬ R)))। যাইহোক, ফাংশনটি এতে পরিবর্তন করা হচ্ছে

TraditionalForm[#~BooleanConvert~"CNF"]&

আউটপুটটিকে সুন্দর দেখায় এবং এই স্বাভাবিক চিহ্নগুলির সাথে সামঞ্জস্য করে:

প্রথাগত ফর্ম


2

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

f=(s,t='',p=s.match(/[A-Z]/),r=RegExp(p,'g'))=>p?'('+f(s.replace(r,1),t+'|'+p)+')&('+f(s.replace(r,0),t+'|!'+p)+')':eval(s)?1:0+t

আই / ও ফর্ম্যাটটি নিম্নরূপ (অগ্রাধিকারের ক্রমে):

  • (: (
  • ): )
  • : 1
  • : 0
  • ¬: !
  • : <=
  • : ==
  • : &
  • : |

উদাহরণ:

P&(P<=R) -> ((1)&(0|P|!R))&((0|!P|R)&(0|!P|!R))
P==(!P) -> (0|P)&(0|!P)
(!P)|(Q==(P&R)) -> (((1)&(0|P|Q|!R))&((0|P|!Q|R)&(1)))&(((1)&(1))&((1)&(1)))

বিচ্ছিন্ন স্বাভাবিক ফর্ম উত্পাদন করতে ফাংশনটি তুচ্ছভাবে পুনরায় লেখা হয়:

f=(s,t='',p=s.match(/[A-Z]/),r=RegExp(p,'g'))=>p?'('f(s.replace(r,1),t+'&'+p)+')|('+f(s.replace(r,0),t+'&!'+p)+')':eval(s)?1+t:0

এই সংস্করণ থেকে 8 বাইট সংরক্ষণ করা যেতে পারে যদি আমাকেও আউটপুটে উপরের অগ্রাধিকারটি ধরে নিতে দেওয়া হয়, যা আউটপুট উদাহরণ থেকে সমস্ত বন্ধনী সরিয়ে ফেলবে:

P&(P<=R) -> ((1&P&R)|(0))|((0)|(0))
P==(!P) -> (0)|(0)
(!P)|(Q==(P&R)) -> (((1&P&Q&R)|(0))|((0)|(1&P&!Q&!R)))|(((1&!P&Q&R)|(1&!P&Q&!R))|((1&!P&!Q&R)|(1&!P&!Q&!R)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.