2 + 2 = 2 * 2 (এবং অনুরূপ) প্রমাণ করুন


12

আউটপুট যেমন ধরনের বিবৃতি একটি পূর্ণ আনুষ্ঠানিক সমকামী 1+2=3, 2+2=2*(1+1)ইত্যাদি

Introuction

আপনি যদি পেনো অ্যারিমেটিক জানেন তবে আপনি সম্ভবত এই বিভাগটি এড়িয়ে যেতে পারেন।

প্রাকৃতিক সংখ্যাগুলি আমরা কীভাবে সংজ্ঞায়িত করব তা এখানে:

(Axiom 1) 0 is a number
(Axiom 2) If `x` is a number, the `S(x)`, the successor of `x`, is a number.

সুতরাং, উদাহরণস্বরূপ S(S(S(0)))একটি সংখ্যা।

আপনি আপনার কোডে যে কোনও সমতুল্য উপস্থাপনা ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এই সমস্তগুলি বৈধ:

0    ""    0           ()       !
1    "#"   S(0)        (())     !'
2    "##"  S(S(0))     ((()))   !''
3    "###" S(S(S(0)))  (((()))) !'''
...
etc

নিম্নরূপে সংজ্ঞা সংজ্ঞায়িত করার জন্য আমরা বিধিগুলি প্রসারিত করতে পারি।

(Rule 1) X+0 = X
(Rule 2) X+S(Y)=S(X)+Y

এটির সাহায্যে আমরা নিম্নলিখিত হিসাবে 2 + 2 = 4 প্রমাণ করতে পারি

         S(S(0)) + S(S(0)) = 2 + 2
[Rule 2 with X=S(S(0)), Y=S(0)]
         S(S(S(0))) + S(0) = 3 + 1
[Rule 2 with X=S(S(S(0))), Y=0]
         S(S(S(S(0)))) + 0 = 4 + 0
[Rule 1 with X=S(S(S(S(0))))
         S(S(S(S(0))))     = 4

নিম্নলিখিত হিসাবে আমরা গুণগুলি সংজ্ঞায়িত করতে এই বিধিগুলি প্রসারিত করতে পারি

(Rule 3) X*0 = 0
(Rule 4) X*S(Y) = (X*Y) + X

যদিও এটির অনুমতি দেওয়ার জন্য আমাদের প্রথম বন্ধনীগুলির কাঠামোগত ভূমিকা সংজ্ঞা দেওয়া দরকার।

(Axiom 3) If X is a number, (X) is the same number.

সংযোজন এবং গুণক অপারেটরগুলি কঠোরভাবে বাইনারি হয় এবং বন্ধনী সর্বদা স্পষ্ট থাকতে হবে। A+B+Cভাল সংজ্ঞায়িত করা হয় না, (A+B)+Cএবং A+(B+C)হয়।

উদাহরণ

গুণনের বিষয়ে একটি উপপাদ্য প্রমাণ করার জন্য এখন আমাদের পর্যাপ্ত পরিমাণ রয়েছে: 2 + 2 = 2 * 2

2 + 2
(2) + 2
(0 + 2) + 2
((0*2) + 2) + 2
(1*2) + 2
2*2

আবশ্যকতা

একটি প্রমাণ যাA=B একটি তালিকা এক্সপ্রেশন যেমন:

  • প্রথমটি হ'ল A,
  • শেষটি B, এবং
  • প্রথমটিতে পৃথক তালিকার প্রতিটি অভিব্যক্তি একটি নিয়মের অধীনে রূপান্তর করে পূর্বের কাছ থেকে প্রাপ্ত হতে পারে।

আপনার প্রোগ্রামটি ইনপুট হিসাবে দুটি বৈধ এক্সপ্রেশন গ্রহণ করবে , প্রতিটি অভিব্যক্তিতে উপরে সংজ্ঞায়িত হিসাবে সংখ্যা, সংযোজন, গুণ, এবং প্রথম বন্ধনী রয়েছে।

আপনার প্রোগ্রামটি প্রমাণ হিসাবে প্রমাণিত হবে, উপরের সংজ্ঞায়িত হিসাবে একটি তালিকা, যে দুটি এক্সপ্রেশন সমান, যদি এমন প্রমাণ উপস্থিত থাকে।

যদি দুটি এক্সপ্রেশন সমান না হয়, আপনার প্রোগ্রামটি কিছুই আউটপুট দেবে না।

সীমিত সংখ্যক পদক্ষেপে প্রমাণ বা অসন্তুষ্টি সর্বদা সম্ভব, কারণ প্রতিটি অভিব্যক্তি একক সংখ্যায় কমিয়ে আনা যায় এবং এই সংখ্যাগুলি সাম্যের জন্য তুচ্ছ পরীক্ষা করা যেতে পারে।

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

সংক্ষেপে, গ্রহণযোগ্য ইনপুটগুলির জন্য স্বাভাবিক আউটপুট হ'ল ইনপুট সহ সমান সংখ্যার একটি তালিকা, যা নিম্নলিখিত নিয়ম দ্বারা উত্পাদিত হয়।

(Axiom 1) 0 is a number
(Axiom 2) If `x` is a number, the `S(x)`, the successor of `x`, is a number.
(Axiom 3) If X is a number, (X) is the same number

(Rule 1) X+0 = X
(Rule 2) X+S(Y)=S(X)+Y
(Rule 3) X*0 = 0
(Rule 4) X*S(Y) = (X*Y) + X
(Rule 5) X = (X)              (Axiom 3 expressed as a transformation rule.)

ইনপুট এবং আউটপুট সংখ্যা কোন উপযুক্ত উপস্থাপনা, অনুমতি দেওয়া হয় যেমন 0=""=(), 3="###"=(((())))ইত্যাদি হোয়াইটস্পেস অপ্রাসঙ্গিক।

বিধিগুলি অবশ্যই উভয় দিকেই প্রয়োগ করা যেতে পারে। আপনার প্রোগ্রামটিতে কোন নিয়ম ব্যবহৃত হচ্ছে তা আউটপুট দিতে হবে না, কেবল পূর্বের এক্সপ্রেশনটিতে তার ক্রিয়া দ্বারা উত্পাদিত এক্সপ্রেশন।

সংক্ষিপ্ততম কোড জিতেছে।


উত্তর:


5

পার্ল, 166 + 1 বাইট

-p(1 বাইট পেনাল্টি) দিয়ে চালান ।

$r='\((S*)';(@b,@a)=@a;push@a,$_ while+s/\+S/S+/||s/$r\+\)/$1/||s/$r\*\)//||s/$r\*S(S*)/(($1*$2)+$1/||s/$r\)/$1/;$\.=/[^S]./s;$_=$b[-1]eq$a[-1]?join'',@b,reverse@a:""

আরও পঠনযোগ্য:

                           # অন্তর্নিহিত: ইনপুট একটি লাইন read _ পড়ুন
                           # আমরা নিউলাইনটি চালু করি
$ r = '\ ((এস *)'; # আমরা এই রেজেক্স টুকরোগুলি প্রচুর ব্যবহার করি, এটিকে ফ্যাক্টর করি
(@ বি, @ এ) = @ এ; # বি @ বি এ @ সেট করুন, @ এ খালি রাখতে
@ টিপুন, push _ যখন # প্রতিটি সময় লুপের চারদিকে,, _ এ @ এ যোগ করুন
+ S / \ + + এস / এস + + / || # বিধি 2: "S +" তে "+ এস" পরিবর্তন করুন
S / $ R \ + + \) / $ 1 / || # নিয়ম 1: পরিবর্তন "(এক্স + 0)" থেকে "এক্স"
S / $ R \ * \) // || # বিধি 3: "(এক্স * 0)" "থেকে" "পরিবর্তন করুন
এস / $ আর \ * এস (এস *) / (($ 1 * $ 2) + $ 1 / || # নিয়ম 4: পরিবর্তন "(এক্স * ওয়াই" থেকে "((এক্স * ওয়াই) + এক্স"
S / $ R \) / $ 1 /; # নিয়ম 5: পরিবর্তন "(এক্স)" এক্স "
$ \ = / [^ গুলি] ./ গুলি। # আমরা যদি নিউলাইন চরিত্রটিতে 1 যুক্ত করি
                           # যেকোনও এস-এর পরে অনুসরণ করুন
$: _ = $ খ [-1] EQ $ একটি [-1]? # যদি @ বি এবং @ এ একইভাবে শেষ হয়
  যোগদান '', @ বি, বিপরীত @ এ # তারপর $ _ @ বি অনুসরণ করে (@ একটি পিছন দিকে)
  : "" # অন্যথায় খালি $ _
                           # অন্তর্নিহিত: আউটপুট $ _

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

অ্যালগরিদম আসলে একটি খালি রেখার সাথে ইনপুটটির প্রথম লাইনটি, প্রথমটির সাথে দ্বিতীয়টি, দ্বিতীয়টির সাথে তৃতীয়টি এবং এই জাতীয় আরও কিছু তুলনা করে। এটি প্রশ্নের প্রয়োজনীয়তা পূরণ করে। এখানে একটি উদাহরণ রান করুন:

আমার ইনপুট:

(এস এস + + এস এস)
(এস এস * এস এস)

প্রোগ্রাম আউটপুট:

(এসএসএস + + এস)
(এখন কি করা উচিত + +)
এখন কি করা উচিত
এখন কি করা উচিত
(এখন কি করা উচিত + +)
((এস এস + +) এস এস + +)
(((এস এস *) এস এস + +) এস এস + +)
(((এস এস *) এস + + এস) এস এস + +)
(((এস এস *) + + এস এস) এস এস + +)
((এস এস * এস) এস এস + +)
((এস এস * এস) এস + + এস)
((এস এস * এস) + + এস এস)

সদৃশ SSSSমাঝখানে বিরক্তিকর কিন্তু আমি স্থির স্পেসিফিকেশন লঙ্ঘন করা হয়নি, এবং এটি কম বাইটে এটি ছেড়ে আছে।

অবৈধ ইনপুট-এ, আমি 1নিউলাইন চরিত্রটিতে সংযোজন করি , সুতরাং 1আউটপুট শেষে আপনি বিপথগামী ছিটানো।


echo -e "((SS+)+(S+S))\nSS*SS" | perl -p /tmp/x.plআউটপুট 1
স্প্রেফ

এটি সঠিক, আপনি দ্বিতীয় লাইনে বন্ধনীগুলি মিস করছেন (যা বলা উচিত (SS*SS))। "সংযোজন এবং গুণক অপারেটরগুলি কঠোরভাবে বাইনারি হয় এবং বন্ধনী অবশ্যই সর্বদা স্পষ্ট হওয়া উচিত" "
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.