পাঠ্য অ্যাডভেঞ্চার গেমগুলির একটি দুর্দান্ত সেট সূত্র রয়েছে; অনেকগুলি ঘর / স্পেস দিয়ে তৈরি একটি বিশ্ব রয়েছে, প্লেয়ারটি এই কক্ষগুলির চারপাশে ঘুরে বেড়াতে পারে এবং কক্ষগুলিতে কিছু আইটেম রয়েছে। আইটেমগুলি প্লেয়ার দ্বারা বাছাই করা যায়, ডাউন করা যায়, অন্যান্য কক্ষগুলিতে অ্যাক্সেস করতে ব্যবহৃত হয় (যেমন কীগুলি) এবং নতুন আইটেমগুলি তৈরি করতে অন্যান্য আইটেমগুলির সাথে মিলিত হতে পারে।
চ্যালেঞ্জ
আপনার চ্যালেঞ্জটি হ'ল কয়েকটি বাইটে (কোড গল্ফ) একটি পাঠ্য অ্যাডভেঞ্চার রানটাইম লিখতে। জিনিসগুলি সহজ রাখতে, আপনার দেওয়া দরকার হ'ল প্রদত্ত সিরিজের কমান্ড একটি প্রদত্ত খেলা জিতবে কি না (কোন ইন্টারেক্টিভিটি, কোনও মানুষের বান্ধব আউটপুট ইত্যাদি নয়) তার উপর নির্ভর করে সত্য বা মিথ্যা মান আউটপুট করতে হবে is
খেলার নিয়ম
- বিশ্ব সবসময় 10 টি সংযুক্ত কক্ষ সহ একটি করিডোর দ্বারা গঠিত। প্রতিটি ঘরে প্রবেশের জন্য একটি কী প্রয়োজন, তবে কোনও চাবি ছাড়াই যে কোনও সময় বাইরে বেরিয়ে আসতে পারে (সুতরাং এটি আমার ধারণা অনুমানযোগ্য কোনও ধরণের ল্যাচ লক);
- খেলোয়াড়টি রুম 0 এ শুরু হয় এবং জিত হয় যদি তারা কখনও 9 নম্বরে প্রবেশ করে (একবার তারা 9 নম্বরে পৌঁছে যায় তারা অন্য কক্ষে যাওয়ার সাথে তারা যা খুশি তা করতে পারে, এবং তারা এখনও জিতবে);
- প্রতিটি ঘরে যে কোনও সংখ্যক আইটেম থাকতে পারে;
- এজেড নামে ২ 26 টি পর্যন্ত আইটেম রয়েছে এবং কোনও আইটেম বিশ্বের একাধিকবার প্রদর্শিত হবে না;
- প্লেয়ারটি বর্তমান ঘর থেকে আইটেমগুলি নিতে এবং তাদের তালিকাতে রাখতে পারে (তারা তাদের তালিকা থেকে বর্তমান ঘরে আইটেমগুলি ফেলে দিতে পারে);
- খেলোয়াড়ের সর্বাধিক ইনভেন্টরির আকার সীমাবদ্ধ এবং স্তর স্তরের বিশদ সরবরাহ করা হবে;
- গেমের শুরুতে প্লেয়ারের ইনভেন্টরি সর্বদা খালি থাকে;
- কোনও ঘরে আইটেমের সর্বাধিক সংখ্যার সীমা নেই (যদিও অন্তর্নিহিত সীমাটি 26 হবে, যেহেতু এটি আইটেমের মোট সংখ্যা);
- চলছে এজে কী যা ব্যবহার করা যেতে পারে লিখুন রুম 0 স্থানান্তর করতে পারেন কক্ষ 0-9 (অর্থাত খেলোয়াড় যদি তারা আছে আইটেমটি একটি রুম 1 যদি তারা বি আছে, ইত্যাদি দয়া করে মনে রাখবেন কি হয় না একটা রুম ত্যাগ করার প্রয়োজন, এবং প্লেয়ারটি 0 কক্ষে শুরু হয়, সুতরাং প্লেয়ারটি ফিরে আসতে চাইলে "A" কীটি কেবলমাত্র প্রয়োজনীয় ঘরে 0 ;
- প্লেয়ারের ইনভেন্টরির আইটেমগুলি নতুন আইটেম তৈরি করতে মিলিত হতে পারে (যা প্লেয়ারের ইনভেন্টরিতে তৈরি করা হবে) - অনুমোদিত সংমিশ্রণগুলি স্তরের বিশদ সহ সরবরাহ করা হবে;
- সংযুক্ত আইটেমগুলি আসল আইটেমগুলি গ্রাস করে (অর্থাত্ যদি আইটেমগুলির মধ্যে একটি কী ছিল তবে সেই কীটি আর ব্যবহার করা সম্ভব হবে না);
- যদি প্লেয়ার অসম্ভব কিছু করার চেষ্টা করে (যেমন বর্তমান ঘরে নেই এমন একটি জিনিস বাছাই করুন / তাদের কাছে নেই এমন একটি জিনিস ফেলে দিন / তাদের কাছে নেই এমন আইটেমগুলি একত্রিত করুন / একটি চাবি নেই এমন ঘরে যান) জন্য), কিছুই ঘটে না এবং তারা চালিয়ে যেতে পারে;
- প্লেয়ারটি কখনই কোনও আজেবাজে কমান্ড দেবে না (যেমন রুম 11 এ যান)।
সুতরাং একটি সাধারণ খেলাটি এর মতো দেখতে পারে:
v
+---+---+---+---+---+---+---+---+---+---+
| C | | J | | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
| CORRIDOR |
+---------------------------------------+
Inventory capacity: 99
রুম 0 এ আইটেম "সি" রয়েছে (যা রুম 2 এর মূল কী)। ঘর 2 এ আইটেম "জে" রয়েছে (যা রুম 9 এর মূল কী)। প্লেয়ার সি বাছাই করে, রুম 2 তে চলে, জে বাছাই করে, তারপর রুম 9 এ নিয়ে গেমটি জিততে পারে।
আরও জটিল খেলাটি হতে পারে:
v
+---+---+---+---+---+---+---+---+---+---+
| C | | X |YZ | | | | | | |
+---+---+---+---+---+---+---+---+---+---+
| CORRIDOR |
+---------------------------------------+
Inventory capacity: 10
C+X => D
Y+Z => J
এখন প্লেয়ার সি বাছাই করে, রুম 2 তে চলে যাওয়া, এক্স বাছাই করে, সি তৈরি করতে এক্সের সাথে ডি তৈরি করতে, তারপর রুম 3 এ চলে যেতে পারে They তারা এখন বাছাই করতে পারে এবং জে এবং জে জেডকে মিশ্রিত করতে পারে, তাদের অনুমতি দেয় রুমে যান 9।
ছক পূরণ করা
হ্যান্ডেল করার জন্য মোটামুটি ইনপুট রয়েছে এবং এটি একটি দুর্দান্ত বিরক্তিকর কাজ, সুতরাং ইনপুট ফর্ম্যাটটি খুব নমনীয়। আপনি নিম্নলিখিত ডেটা পাবেন এবং এটি আপনার প্রোগ্রামে কীভাবে প্রেরণ করা উচিত তা মূলত আপনার উপর নির্ভর করে:
- প্রতিটি ঘরের প্রাথমিক সামগ্রী (প্রতিটি ঘরের জন্য 0 বা আরও বেশি আইটেমের তালিকা);
- অনুমোদিত আইটেম সংমিশ্রণগুলির একটি সংকলন (প্রতিটিতে 2 টি ইনপুট আইটেম এবং তাদের আউটপুট আইটেম রয়েছে - নোট করুন যে ইনপুট আইটেমগুলি অর্ডারড নয়);
- সর্বাধিক জায়ের আকার (পূর্ণসংখ্যা, 0 <= আকার <= 26);
- প্লেয়ারটি চেষ্টা করা আদেশগুলির তালিকা।
প্লেয়ারের আদেশগুলি হতে পারে:
[P]ick up <item>
- ঘর থেকে একটি আইটেম তুলে এবং প্লেয়ারের ইনভেন্টরিতে রাখে (যদি জায়গা থাকে)[D]rop <item>
- প্লেয়ারের ইনভেন্টরি থেকে একটি আইটেম বর্তমান ঘরে into[C]ombine <item1> <item2>
- প্লেয়ারের ইনভেন্টরিতে 2 টি আইটেম একত্রিত করে একটি নতুন আইটেম তৈরি করুন[G]o to <room>
- খেলোয়াড়ের প্রয়োজনীয় কী থাকলে নির্বাচিত ঘরে ভ্রমণ করে
উদাহরণস্বরূপ, আমি পরীক্ষার জন্য যে ইনপুট ফর্ম্যাটটি ব্যবহার করেছি তা ছিল সহজ প্রোগ্রাম আর্গুমেন্ট:
./adventure YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ G9
# r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 combinations inv. size commands...
# means:
# room 0 starts with items Y & Z, all other rooms start empty
# 1 combination is possible: Y+Z => J
# max inventory size is 2
# player commands are [P]ick up Y, [P]ick up Z, [C]ombine Y and Z, [G]o to room 9
# (in this example, the player wins)
তবে যদি অন্য কোনও ফর্ম্যাটটি সহজ করে তোলে তবে তা ঠিক আছে (উদাহরণস্বরূপ বিশেষ ডিলিমিটার অক্ষর / একাধিক লাইন / বিভিন্ন ক্রম / জেএসএন-তে ক্রমিকায়িত করা ইত্যাদি)
আউটপুট ফরমেট
আপনার প্রোগ্রামটির কিছু সত্যবাদী ফলাফল পাওয়া উচিত যদি প্লেয়ারের আদেশগুলি তাদের খেলায় জিততে দেয় এবং অন্যথায় কিছু মিথ্যা আউটপুট দেয়। এটি স্টাডাউট, একটি প্রোগ্রামের রিটার্ন কোড বা আপনার পছন্দের ভাষা যা কিছু দেয় তা একটি স্বীকৃত বার্তা হতে পারে। অন্যান্য সমস্ত আউটপুট উপেক্ষা করা হবে।
পরীক্ষার কেস
নিম্নলিখিত বাশ স্ক্রিপ্ট একটি পরীক্ষার জোতা সরবরাহ করে যা বেশিরভাগ পরিস্থিতি পরীক্ষা করে। এটি উপরে বর্ণিত ফর্ম্যাটটি ব্যবহার করার জন্য লেখা হয়েছে, তবে ভিন্ন ফর্ম্যাটটি ব্যবহার করার জন্য এটি পরিবর্তন করা invoke
ফাংশনে রূপান্তর যুক্ত করার একটি বিষয় মাত্র ।
#!/bin/sh
PROG="$1";
if [[ -z "$PROG" ]]; then
echo "Usage: $0 <program-to-test>";
exit 1;
fi;
function invoke {
"$PROG" "$@"
}
RED="\033[1;31m";
GREEN="\033[1;32m";
RESET="\033[m";
FAILURES="0";
function pass {
if ! invoke "$@" >/dev/null 2>&1; then
echo "${RED}Expected pass, got fail:${RESET} $*" >&2;
(( FAILURES = "$FAILURES" + 1 ));
invoke "$@" 2>&1;
fi;
}
function fail {
if invoke "$@" >/dev/null 2>&1; then
echo "${RED}Expected fail, got pass:${RESET} $*" >&2;
(( FAILURES = "$FAILURES" + 1 ));
invoke "$@" 2>&1;
fi;
}
echo "Running tests...";
# R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 C I Cmd...
pass J '' '' '' '' '' '' '' '' '' 0 9 PJ G9;
fail '' J '' '' '' '' '' '' '' '' 0 9 PJ G9;
pass J '' '' '' '' '' '' '' '' '' 0 9 PJ PJ G9;
fail J '' '' '' '' '' '' '' '' '' 0 9 PJ;
fail J '' '' '' '' '' '' '' '' '' 0 9 G9;
pass J '' '' '' '' '' '' '' '' '' 0 9 G9 PJ G9;
pass J '' '' '' '' '' '' '' '' '' 0 1 PJ G9;
fail J '' '' '' '' '' '' '' '' '' 0 0 PJ G9;
fail J '' '' '' '' '' '' '' '' '' 0 9 PJ DJ G9;
fail J '' '' '' '' '' '' '' '' '' 0 9 PJ PJ DJ G9;
pass J '' '' '' '' '' '' '' '' '' 0 9 PJ DJ PJ G9;
pass J '' '' '' '' '' '' '' '' '' 0 9 PJ DJ PJ G9;
pass B CJ '' '' '' '' '' '' '' '' 0 2 PB G1 DB PC PJ G9;
fail B CJ '' '' '' '' '' '' '' '' 0 2 PB G1 DB PB PC PJ G9;
pass AJ '' '' '' '' '' '' '' '' '' 0 2 PA PJ G9;
pass B D '' J '' '' '' '' '' '' 0 2 PB G1 PD G3 DB PJ G9;
fail B D '' J '' '' '' '' '' '' 0 2 PB G1 PD G2 DB PJ G9;
fail B D '' J '' '' '' '' '' '' 0 2 PB G1 PD G3 PJ G9;
fail B D J C '' '' '' '' '' '' 0 2 PB G1 PD G3 PJ G9;
pass AJ '' '' '' '' '' '' '' '' '' 0 2 PA PJ G9 G0;
fail ADJ '' '' '' '' '' '' '' '' '' 0 3 PA PD PJ G3 DJ G0 PJ G9;
pass ADJ '' '' '' '' '' '' '' '' '' 0 3 PA PD PJ G3 DJ G0 G3 PJ G9;
fail ADJ '' '' '' '' '' '' '' '' '' 0 3 PA PD PJ G3 DJ G0 DD G3 PJ G9;
pass ADJ '' '' '' '' '' '' '' '' '' 0 3 PA PD PJ DD G3 DJ G0 DD G3 PJ G9;
fail ADJ '' '' '' '' '' '' '' '' '' 0 1 PA DA DA PD PJ G9;
pass ADJ '' '' '' '' '' '' '' '' '' 0 1 PA DA DA PJ G9;
fail ABCDEFGHIKLMNOPQRSTUVWXYZ J '' '' '' '' '' '' '' '' 0 26 PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PO PP PQ PR PS PT PU PV PW PX PY PZ G9;
pass ABCDEFGHIJKLMNOPQRSTUVWXYZ '' '' '' '' '' '' '' '' '' 0 26 PA PB PC PD PE PF PG PH PI PJ PK PL PM PN PO PP PQ PR PS PT PU PV PW PX PY PZ G9;
fail YZJ '' '' '' '' '' '' '' '' '' 0 2 PY PZ CYZ PJ G9;
pass YZJ '' '' '' '' '' '' '' '' '' 1 YZW 2 PY PZ CYZ PJ G9;
pass YZJ '' '' '' '' '' '' '' '' '' 1 YZW 2 PY PZ CYZ PJ CWJ G9;
fail XYZJ '' '' '' '' '' '' '' '' '' 1 YZW 2 PY PZ CYZ PX PJ G9;
fail XYZJ '' '' '' '' '' '' '' '' '' 1 YZW 2 PY PZ CYZ PX DY DZ PJ G9;
pass XYZJ '' '' '' '' '' '' '' '' '' 1 YZW 2 PY PZ CYZ PX DW PJ G9;
pass YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 CYZ G9;
pass YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ DJ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ DJ PY PZ CYZ G9;
fail WZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PW PZ CYZ G9;
fail WZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CYZ G9;
pass YZ '' '' '' '' '' '' '' '' '' 1 YZJ 2 PY PZ CZY G9;
pass YZ '' '' '' '' '' '' '' '' '' 1 ZYJ 2 PY PZ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 1 PY PZ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 1 PY PZ CYZ PY PZ CYZ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 1 PY PZ CYZ PJ G9;
fail YZ '' '' '' '' '' '' '' '' '' 1 YZJ 1 PJ G9;
pass BW UV '' '' '' '' '' '' '' '' 3 BUR WVS RSJ 2 PB PW G1 DW PU CBU DR PW PV CVW PR CRS G9;
fail BW AUV '' '' '' '' '' '' '' '' 3 BUR WVS RSJ 2 PB G1 PU CBU DR PA PB G0 DA PW G1 PV CVW PR CRS G9;
pass BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PC PA PB G0 DA PW G1 DB PV CVW PR CRS G9;
fail BCW UV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PC PA PB G0 DA PW G1 DB PV CVW PR CRS G9;
fail BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU PA PB G0 DA PW G1 DB PV CVW PR CRS G9;
fail BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PA G0 DA PW G1 DB PV CVW PR CRS G9;
fail BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PB G0 DA PW G1 DB PV CVW PR CRS G9;
fail BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PA PB G0 DA G1 DB PV CVW PR CRS G9;
fail BCW AUV '' '' '' '' '' '' '' '' 3 CUR WVS RSJ 2 PB PC G1 DB PU CCU DR PA PB G0 DA PW G1 DB CVW PR CRS G9;
pass BFK LG M N O CDE PQR U W '' 10 BPT CQS TSH HUI IWV VFA GRX MXZ ANY YZJ 5 \
PB PF PK G1 PL PG G6 DB DK DL G5 PC PD PE G6 DF G2 PM G6 DM DC G3 PN G4 PO G6 DN DO DD DE \
PB PP CBP PC PQ CCQ CTS G7 PU CUH G8 PW CWI G6 PF CVF PR PM PN CGR CMX CAN CYZ G9
fail BFK LG M N O CDE PQR U W '' 10 BPT CQS TSH HUI IWV VFA GRX MXZ ANY YZJ 5 \
PB PF PK G1 PL PG G6 DB DK DL G5 PC PD PE G6 DF G6 DM DC G3 PN G4 PO PM G6 DN DO DD DE \
PB PP CBP PC PQ CCQ CTS G7 PU CUH G8 PW CWI G6 PF CVF PR PM PN CGR CMX CAN CYZ G9
if (( "$FAILURES" == "0" )); then
echo "${GREEN}All tests passed${RESET}";
else
echo "${RED}Total failures: $FAILURES${RESET}";
fi;
জয়লাভ
স্ট্যান্ডার্ড কোড গল্ফ: সংক্ষিপ্ততম কোড (বাইটে) জিতেছে। এন্ট্রিগুলিকে অবশ্যই গেমের নিয়মাবলী অনুসরণ করতে হবে, যার অনুশীলনের অর্থ তাদের অবশ্যই সমস্ত পরীক্ষার কেস পাস করতে হবে (প্রয়োজনে আরও পরীক্ষা যোগ করা যেতে পারে)।