ভূমিকা: সংযুক্ত যুক্তি
সমন্নয়ের যুক্তিবিজ্ঞান (Cl) জিনিষ নামক বন্ধ ভিত্তি করে combinators , যা মূলত ফাংশন আছে। দুটি বেসিক "অন্তর্নির্মিত" সংযুক্তকারী রয়েছে S
এবং K
যা পরে ব্যাখ্যা করা হবে।
বাম-associativity
সিএল বাম-সহযোগী , যার অর্থ বন্ধনী (স্টাফ সহ) যা এ্যাথার পেয়ারের বামে থাকা বাঁশের বাঁদিকের বাম দিকে রয়েছে এটি স্টাফ ছেড়ে দেওয়ার সাথে সরিয়ে ফেলা যায়। উদাহরণস্বরূপ, এর মতো কিছু:
((a b) c)
কমে যেতে পারে
(a b c)
যেখানে (a b)
বৃহত বন্ধনীটির ডানদিকে বামদিকে রয়েছে ((a b) c)
তাই এটি সরিয়ে ফেলা যায়।
বাম-সংস্থার অনেক বড় উদাহরণ (বর্গাকার বন্ধনী ব্যাখ্যা)
((a b) c ((d e) f (((g h) i) j)))
= (a b c ((d e) f (((g h) i) j))) [((a b) c...) = (a b c...)]
= (a b c (d e f (((g h) i) j))) [((d e) f...) = (d e f...)]
= (a b c (d e f ((g h i) j))) [((g h) i) = (g h i)]
= (a b c (d e f (g h i j))) [((g h i) j) = (g h i j)]
একাধিক জোড়া একই জিনিসগুলির চারপাশে মোড়ানো হলে বন্ধনীগুলিও হ্রাস করা যায়। উদাহরণ:
((((a)))) -> a
a ((((b)))) -> a b
a (((b c))) -> a (b c) [(b c) is still a group, and therefore need brackets.
Note that this doesn't reduce to `a b c`, because
`(b c)` is not on the left.]
Builtins
সিএলে দুটি "অন্তর্নির্মিত" কম্বিনেটর রয়েছে S
এবং এটি K
(যেমন একক সংযোজক, বা একক সংযোগকারী / দলকে বন্ধনী ঘিরে রেখেছে) এর মতো চারদিকে:
K x y = x
S x y z = x z (y z)
যেখানে x
, y
এবং z
যে কোনও কিছুর জন্য স্ট্যান্ড-ইনস হতে পারে।
এর উদাহরণ S
এবং K
নিম্নরূপ:
(S K K) x [x is a stand-in for anything]
= S K K x [left-associativity]
= K x (K x) [S combinator]
= x [K combinator]
আরেকটি উদাহরণ:
S a b c d
= a c (b c) d [combinators only work on the n objects to the right of it,
where n is the number of "arguments" n is defined to have -
S takes 3 arguments, so it only works on 3 terms]
উপরেরগুলি সাধারণ সিএল স্টেটমেন্টের উদাহরণ, যেখানে বিবৃতিটি আরও মূল্যায়ন করা যায় না এবং একটি সীমাবদ্ধ সময়ের মধ্যে একটি শেষ ফলাফল অর্জন করে। অ-সাধারণ বিবৃতি রয়েছে (যা সিএল বিবৃতি যা শেষ হয় না এবং চিরকালের জন্য মূল্যায়ন করা থাকবে), তবে সেগুলি চ্যালেঞ্জের মধ্যে নেই এবং এটি আবৃত করার দরকার হবে না।
আপনি যদি সিএল সম্পর্কে আরও জানতে চান তবে এই উইকিপিডিয়া পৃষ্ঠাটি পড়ুন ।
টাস্ক:
আপনার কাজটি হ'ল অতিরিক্ত সংযুক্তকারী তৈরি করা, আর্গুমেন্টের সংখ্যা এবং এটি ইনপুট হিসাবে কী মূল্যায়ন করে যা এ জাতীয় দেওয়া হয়:
{amount_of_args} = {evaluated}
{amount_of_args}
আরগের সংখ্যার সমান ধনাত্মক পূর্ণসংখ্যা যেখানে থাকে এবং {evaluated}
এর সাথে থাকে:
1
প্রথম আর্গুমেন্ট2
হওয়া, দ্বিতীয় হওয়া, ইত্যাদি সহ আর্গুমেন্টগুলি পরিমাণ পর্যন্ত ।- আপনি নিশ্চিত হয় args পরিমাণ উপরে যে যুক্তি সংখ্যা (তাই একটি
4
যখন{amount_of_args}
শুধুমাত্র হয়3
) উপস্থিত হবে না{evaluated}
।
- আপনি নিশ্চিত হয় args পরিমাণ উপরে যে যুক্তি সংখ্যা (তাই একটি
- বন্ধনী
()
সুতরাং ইনপুট উদাহরণ:
3 = 2 3 1
4 = 1 (2 (3 4))
প্রথম ইনপুটটি R
তিনটি যুক্তি ( R 1 2 3
) সহ একটি সংযুক্তকারী (বলুন ) এর জন্য জিজ্ঞাসা করছে , যা এরপরে মূল্যায়ন করে:
R 1 2 3 -> 2 3 1
দ্বিতীয় ইনপুট এটির জন্য জিজ্ঞাসা করে (সংযুক্তকারী নাম সহ A
):
A 1 2 3 4 -> 1 (2 (3 4))
এই ফর্ম্যাটটিতে ইনপুট দেওয়া হয়েছে, আপনাকে অবশ্যই একটি স্ট্রিং ফেরত পাঠাতে হবে S
, K
এবং ()
যেটি যখন একটি সংযুক্তকারী নামের সাথে প্রতিস্থাপিত হয় এবং যুক্তিগুলির সাথে চালিত হয়, {evaluated}
কমান্ড ব্লকটি যখন এই সংযুক্তকারী নামের পরিবর্তে প্রতিস্থাপিত হয় তখন ব্লকের মতো একই মূল্যায়ন বিবৃতি প্রদান করে ।
আউটপুট কম্বিনেটর স্টেটমেন্টে এর সাদা স্থান মুছে ফেলা এবং বাইরের বন্ধনীগুলি মুছে ফেলা (S K K (S S))
হতে পারে , যাতে এর মতো কিছু রূপান্তরিত হতে পারে SKK(SS)
।
আপনি আপনার প্রোগ্রামের আউটপুট পরীক্ষা করতে চান তাহলে, @aditsu একটি সমন্নয়ের যুক্তিবিজ্ঞান পার্সার করেছেন (যার মধ্যে S
, K
, I
এবং এমনকি অন্যান্য বেশী পছন্দ B
এবং C
) এখানে ।
স্কোর:
যেহেতু এটি একটি মেটাগল্ফ , তাই এই চ্যালেঞ্জের লক্ষ্য হ'ল এই 50 টি পরীক্ষার ক্ষেত্রে প্রদত্ত সম্ভাব্য আউটপুটে সামান্যতম বাইটগুলি অর্জন করা । উত্তরে 50 টি পরীক্ষার ক্ষেত্রে আপনার ফলাফলগুলি রাখুন, বা একটি পেস্টবিন তৈরি করুন (বা অনুরূপ কিছু) এবং সেই পেস্টবিনে একটি লিঙ্ক পোস্ট করুন।
টাই হওয়ার ক্ষেত্রে, প্রাথমিক সমাধানটি জয়ী হয়।
নিয়মাবলী:
- আপনার উত্তর অবশ্যই CORRECT আউটপুট ফিরিয়ে আনবে - সুতরাং একটি ইনপুট দেওয়া হলে, এটি অবশ্যই কার্যের সংজ্ঞা অনুসারে সঠিক আউটপুট ফেরত দিতে হবে।
- আপনার উত্তর অবশ্যই প্রতিটি পরীক্ষার ক্ষেত্রে আধুনিক ল্যাপটপে এক ঘন্টার মধ্যে আউটপুট দেয়।
- সমাধানগুলির যে কোনও হার্ড-কোডিং অনুমোদিত নয়। তবে, আপনাকে 10 টি সংযুক্তকারী পর্যন্ত হার্ড-কোড করার অনুমতি দেওয়া হয়েছে।
- আপনার প্রোগ্রামটি একই ইনপুটটির জন্য প্রতিবার একই সমাধানটি ফেরত দিতে হবে।
- আপনার প্রোগ্রামকে কোনও পরীক্ষার ক্ষেত্রে নয়, প্রদত্ত যে কোনও ইনপুট দেওয়ার জন্য একটি বৈধ ফলাফল দিতে হবে।
1
, আপনি সমস্ত কিছু 1
থেকে বিয়োগ করতে পারেন এবং তারপরে সেই উত্তরটির জন্য সমাধানটি মোড়ানো করতে পারেন K()
। উদাহরণ: সমাধান জন্য 2 -> 1
হয় K
, অতএব সমাধান 3 -> 2
হয় KK
, সমাধান 4 -> 3
হয় K(KK)
ইত্যাদি