এটি একটি কোড-গল্ফ চ্যালেঞ্জ, যার মাধ্যমে আপনাকে এমন একটি প্রোগ্রাম তৈরি করতে হবে যা মেশিন শেখার চিত্রিত করার জন্য নিজেকে রুপান্তরকারী কোয়াইন বা শিকলের মতো কাজ করে।
পটভূমি
এখানে 'প্যাঙ্গোলিন গেম' নামে একটি প্রাথমিক কৃত্রিম বুদ্ধিমত্তার প্রোগ্রাম রয়েছে যা এখানে বর্ণিত হয়েছে । প্রাথমিক ধারণাটি হ'ল প্রোগ্রামটি যখন প্রথমবার চালিত হয় তখন জিজ্ঞাসা করে:
ঠিক আছে, দয়া করে কিছু ভাবুন
এটি কি প্যাঙ্গোলিন?
এরপরে আপনি উত্তর দিতে পারেন:
হাঁ
এই ক্ষেত্রে এটি বলে:
ভাল. এটা খুব সহজ ছিল।
বা যদি না এটি বলে:
উহু. আচ্ছা আপনি তখন জিতলেন - আপনি কী ভাবছিলেন?
আপনি যা বলতে পারেন:
একটি কুকুর
যা এটা বলবে
দয়া করে আমাকে একটি কুকুর সম্পর্কে একটি প্রশ্ন দিন, তাই আমি কুকুর এবং পাঙ্গোলিনের মধ্যে পার্থক্য বলতে পারি
আপনি উত্তর দিতে পারে
এটি কি পিঁপড়া খায়?
এটি তখন জিজ্ঞাসা করবে:
কুকুরের উত্তর কী?
যা বলতে আপনি
না
এবং এটা বলতে হবে
ধন্যবাদ
পরের বার এটি চলার পরে এটি উপরের প্রশ্নটি জিজ্ঞাসা করবে এবং এ জাতীয় প্রশ্নের একটি বাইনারি গাছ তৈরি করবে।
চ্যালেঞ্জ
পটভূমি যথেষ্ট। এই চ্যালেঞ্জটি একটি স্ব পরিবর্তনকারী প্যাঙ্গোলিন প্রোগ্রাম লেখার জন্য write নিয়মগুলি নিম্নরূপ:
প্রোগ্রাম আউটপুট (উপরে বর্ণিত হিসাবে) হওয়া উচিত
STDERR
। চূড়ান্ত প্রতিক্রিয়া সর্বদা "ভাল। এটি খুব সহজ ছিল।" বা "ধন্যবাদ"। এর পরে, এটি হয় প্রোগ্রামটির বর্তমান সংস্করণ বা প্রোগ্রামটির নতুন সংস্করণ যা ফলাফলকে যুক্ত করেSTDOUT
। কোন উত্তর একটি ভাষা যে লিখিতভাবে সমর্থন করে না লেখাSTDOUT
এবংSTDERR
বা থেকে পড়াSTDIN
কার্যকর থাকবে।ইউনিক্সের অধীনে অন্য কথায় আপনি এইভাবে প্রোগ্রামটি চালাতে পারেন:
উদাহরণ:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- প্রোগ্রামটিতে নির্দিষ্ট প্রম্পটগুলি অবশ্যই ব্যবহার করতে হবে (কারণ প্রম্প্টগুলি সংক্ষিপ্ত করা কোনও দক্ষতা দেখায় না)। অনুরোধগুলি হ'ল (উদ্ধৃতি ব্যতীত এবং যেখানে% s প্রতিস্থাপন করা হয়) নীচে রয়েছে:
তালিকা:
"OK, please think of something"
"Is it %s?"
"Good. That was soooo easy."
"Oh. Well you win then -- What were you thinking of?"
"Please give me a question about %s, so I can tell the difference between %s and %s"
"What is the answer for %s?"
"Thanks"
যখন হ্যা / না উত্তর আশা, আপনার প্রোগ্রাম গ্রহণ করা উচিত
y
বাyes
'হ্যাঁ' এর জন্য কোনো ক্ষেত্রে, এবংn
বাno
জন্য 'না' কোনো ক্ষেত্রে। আপনি অ-সঙ্গতিপূর্ণ ইনপুটগুলি দিয়ে যা করেন তা আপনার উপর নির্ভর করে। উদাহরণস্বরূপ যদি আপনি কোন উত্তর যে দিয়ে শুরু হয় নেওয়া সিদ্ধান্ত নিতে পারেy
অথবাY
'হাঁ' হিসাবে, এবং কোন হিসাবে অন্য কিছু।আপনি ধরে নিতে পারেন যে সরবরাহিত জিনিসগুলির নাম এবং প্রশ্নগুলিতে কেবলমাত্র ASCII অক্ষর, সংখ্যা, স্পেস, হাইফেনস, প্রশ্ন চিহ্ন, কমা, পুরো স্টপস, কোলোন এবং সেমিকোলন থাকে, অর্থাত্ সেগুলি রেগেক্সের সাথে মিলে যায়
^[-?,.;: a-zA-Z]+$
। আপনি যদি এর চেয়ে বেশি (বিশেষত আপনার নির্বাচিত ভাষায় উদ্ধৃত চরিত্রগুলি) মোকাবেলা করতে পারেন তবে আপনি স্মাগ হয়ে যাবেন, তবে কোনও অতিরিক্ত পয়েন্ট পাবেন না।তোমার প্রোগ্রাম পড়তে বা লিখতে নাও হতে পারে কোনো ফাইল (ব্যতীত
STDIN
,STDOUT
আরSTDERR
), অথবা নেটওয়ার্ক থেকে; বিশেষত এটি ডিস্ক থেকে নিজস্ব কোড না পড়তে বা লিখতে পারে না। এর রাষ্ট্রটি অবশ্যই প্রোগ্রাম কোডে সংরক্ষণ করতে হবে।যখন প্রোগ্রামটি চালানো হয় এবং উত্তরটি সঠিকভাবে অনুমান করে, তখন এটি অবশ্যই একটি কুইন হিসাবে সম্পাদন করতে হবে, অর্থাত্ এটি অবশ্যই
STDOUT
তার নিজের কোডটিতে লিখতে হবে , অপরিবর্তিত।যখন প্রোগ্রামটি চালিত হয় এবং উত্তরটি সঠিকভাবে অনুমান করে, তখন অবশ্যই প্রদত্ত নতুন প্রশ্ন এবং উত্তরটি নিজের কোডের মধ্যে এনকোড করে এটিকে নিজের কোডে লিখতে হবে
STDOUT
, সুতরাং এটি তার মূল অনুমান এবং সরবরাহিত নতুন বস্তুর মধ্যে পার্থক্য করতে সক্ষম সমস্ত পূর্ববর্তী প্রদত্ত বস্তুর মধ্যে পার্থক্য ছাড়াও।আপনাকে অবশ্যই সফ্টওয়্যারটির একাধিক ক্রমিক রানের সাথে মোকাবিলা করতে সক্ষম হতে হবে যাতে এটি অনেকগুলি অবজেক্ট সম্পর্কে জানতে পারে। একাধিক রানের উদাহরণের জন্য এখানে দেখুন ।
টেস্ট রানগুলি মাথার লিঙ্কে দেওয়া হয় (স্পষ্টতই কেবলমাত্র
STDIN
এবংSTDERR
ডায়ালগটি covering েকে দেওয়া)।স্ট্যান্ডার্ড লুফোলগুলি বাদ দেওয়া হয়েছে।