একটি ছোট দু: সাহসিক কাজ


14

পাঠ্য অ্যাডভেঞ্চার গেমগুলির একটি দুর্দান্ত সেট সূত্র রয়েছে; অনেকগুলি ঘর / স্পেস দিয়ে তৈরি একটি বিশ্ব রয়েছে, প্লেয়ারটি এই কক্ষগুলির চারপাশে ঘুরে বেড়াতে পারে এবং কক্ষগুলিতে কিছু আইটেম রয়েছে। আইটেমগুলি প্লেয়ার দ্বারা বাছাই করা যায়, ডাউন করা যায়, অন্যান্য কক্ষগুলিতে অ্যাক্সেস করতে ব্যবহৃত হয় (যেমন কীগুলি) এবং নতুন আইটেমগুলি তৈরি করতে অন্যান্য আইটেমগুলির সাথে মিলিত হতে পারে।

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল কয়েকটি বাইটে (কোড গল্ফ) একটি পাঠ্য অ্যাডভেঞ্চার রানটাইম লিখতে। জিনিসগুলি সহজ রাখতে, আপনার দেওয়া দরকার হ'ল প্রদত্ত সিরিজের কমান্ড একটি প্রদত্ত খেলা জিতবে কি না (কোন ইন্টারেক্টিভিটি, কোনও মানুষের বান্ধব আউটপুট ইত্যাদি নয়) তার উপর নির্ভর করে সত্য বা মিথ্যা মান আউটপুট করতে হবে 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;

জয়লাভ

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


আপনি আমাকে বিশ্বাস করতে পারেন না তবে আমি এমন একটি চ্যালেঞ্জের কথা ভেবেছিলাম যা বেশ কিছুদিন আগে এই একই রকম ...
অ্যাক্রোলিথ

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

@ নাথানমিরিল করতে পারেন, আপনি কোন ফর্ম্যাট পছন্দ করবেন? (স্ক্রিপ্টের ভিতরে থাকা পরীক্ষাগুলি ইতিমধ্যে পার্স করা বেশ সহজ তাই একই পংক্তির পুনরাবৃত্তি না করে পরীক্ষার টেবিল তৈরি করতে আমি কী করতে পারি তা নিশ্চিত ছিল না!)
ডেভ

@da হাগলেনি কিছু দিন আগেও আমার ধারণাটি পেয়েছে। আমি অনুমান করি এটি সম্ভব যে আমরা দুজনেই গত সপ্তাহে পোস্ট করা কিছু চ্যালেঞ্জ, বা নেটওয়ার্কের অন্য কোনও প্রশ্ন দ্বারা অনুপ্রাণিত হয়েছিলাম। আমি কোথায় থেকে ধারণা পেয়েছি তা মনে করতে পারছি না।
ডেভ

ব্যবহারকারীর কাছে নেই এমন একটি আইটেম ফেলে দেওয়া। এটি কি অসম্ভব (কোনও বিকল্প নেই) বা বাজে কথা (ঘটবে না)। এবং একটি বিদ্যমান আইটেম বাদ দেওয়া?
edc65

উত্তর:


5

জাভাস্ক্রিপ্ট (ES6), 244 249 267 280

সম্পাদনা সংরক্ষিত 18 (!) বাইট ধন্যবা @Neil

ইনপুট সহ একটি ফাংশন:

  • r = ঘরের সামগ্রী (10 টি স্ট্রিংয়ের অ্যারে)
  • k = সংমিশ্রণ (3 টি অক্ষরের অ্যারে - উত্স 1, উত্স 2, ফলাফল)
  • s = ইনভেন্টরি সর্বাধিক আকার (সংখ্যা)
  • সি = কমান্ড (স্ট্রিং এর অ্যারে)

সত্য বা মিথ্যা প্রত্যাবর্তন করে

(r,k,s,c,p=0,j={})=>c.some(([c,a,b])=>c<'D'?j[a]>0&j[b]>0&&!k.map(([t,u,v])=>u+t==a+b|u+t==b+a?j[j[a]=j[b]=v]=++s:0):c<'G'?j[a]>0&&!(j[++s,a]=~p):c>'G'?s&&j[a]==~p&&!(j[a]=s--):j['ABCDEFGHIJ'[a]]>0&&(p=a)>8,r.map((o,n)=>[...o].map(c=>j[c]=~n)))

একটি নতুন লাইন পৃথক সংস্করণ জন্য পরীক্ষার স্নিপেট দেখুন

পরীক্ষা

Exec=
(r,k,s,c,p=0,j={})=>
c.some(
  ([c,a,b])=>
   c<'D'?j[a]>0&j[b]>0&&!k.map(([t,u,v])=>u+t==a+b|u+t==b+a?j[j[a]=j[b]=v]=++s:0)
   :c<'G'?j[a]>0&&!(j[++s,a]=~p)
   :c>'G'?s&&j[a]==~p&&!(j[a]=s--)
   :j['ABCDEFGHIJ'[a]]>0&&(p=a)>8
  ,r.map((o,n)=>[...o].map(c=>j[c]=~n))
)

console.log = (...x) => O.textContent += x + '\n';

;`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`
.split(/;*\n/).map((srow,i)=>{
  var row=srow.split(/\s+/),
  rooms=row.slice(1,11).map(x=>x=="''"?"":x),
  ncomb=+row[11],
  comb=row.slice(12,12+ncomb),
  isize=+row[12+ncomb],
  commands=row.slice(13+ncomb),
  start='['+rooms+'] ['+comb+'] '+isize+' ['+commands+']';
  var result=Exec(rooms,comb,isize,commands),
     ok = row[0] == ['fail','pass'][~~result]
  console.log(i, ok ? 'ok':'ko', start, row[0], result)
})
<pre id=O></pre>


চমৎকার (আব) ব্যবহার .map!
ডেভ

a>8ভিতরে ()এস কেন ? হতে j[--s,a]=1পারে j[a]=s--? এছাড়াও, String.fromCharCodeঅনেক দীর্ঘ, কেন কেবল ইনডেক্স নয় "ABCDEFGHIJ"?
নীল

@ নীল ইঙ্গিতগুলির জন্য ধন্যবাদ, আমি তাদের সব পরীক্ষা করব। স্পষ্টতই এটি একটি ধারাবাহিক পরিবর্তনের ফলাফল (এক পর্যায়ে আমার জে [] ঠিক 1 হওয়া দরকার তবে এখন তারা সম্ভবত কোনও ইতিবাচক মান হতে পারে)
edc65

3

সি, 338 বাইট

আমার নিজের পরীক্ষা প্রোগ্রামটি ন্যূনতম করতে গিয়েছিলাম। আমি মনে করি এটি এখন পর্যন্ত দীর্ঘতম উত্তর হলেও এটি বেশ ভাল গেছে!

#define P c[(i<j?i:j)*25+i+j]
#define F for(q=atoi(*++v);r
#define X c[r*91+i]
r,i,j,c[2405];main(q,v)char**v;{for(r=10;--r;)for(++v;i=**v;++*v)++X;++v;F<q;++r)i=**++v,j=1[*v],P=2[*v];r=9;F&&*++v;c[i=1[*v]]&&j==68?c[i]=!++X,++q:j>79&&q*X?c[i]=!--X,--q:j==71&&c[i+17]?r=57-i:j<68&&c[i]*c[j=2[*v]]&&P?c[i]=c[j]=0,c[P]=++q:0)j=**v;return r;}

স্থান বাঁচাতে এটি কয়েকটি কৌশল ব্যবহার করে:

  • ঘরগুলি বিপরীতে লোড করা হয় যাতে 9 নম্বরের জন্য চেক করা রুম 0 যাচাই করা যায় যা সস্তা che
  • ঘর 9 এর বিষয়বস্তু কখনই গুরুত্ব দেয় না, সুতরাং ইনপুটটি পড়ার সময় এড়িয়ে যায় এবং পরিবর্তে জায় সংরক্ষণের জন্য ব্যবহৃত হয়
  • ঘরের সামগ্রী এবং আইটেমের সংমিশ্রণগুলি একই অ্যারেতে সঞ্চয় করা হয়। যেহেতু আইটেমগুলি তাদের ascii মানগুলিতে সংরক্ষণ করা হয়, সেগুলি কখনই ওভারল্যাপ হয় না।

ভাঙ্গন:

#define P c[(i<j?i:j)*25+i+j]       // item combination lookup (input: i,j)
#define X c[r*91+i]                 // room item lookup (input: r,i)
r,i,j,c[2405];                      // globals default to 0
main(q,v)char**v;{                  // K&R syntax to save bytes
    for(r=10;--r;)                  // Load rooms 0-8, store as 9-1
        for(++v;i=**v;++*v)
            ++X;
    ++v;                            // Skip room 9
    for(q=atoi(*++v);r<q;++r)       // For each combination
        i=**++v,
        j=1[*v],                    // Use index[array] syntax to avoid (brackets)
        P=2[*v];                    // Record combination
    r=9;                            // Begin in room 0 (9 in memory)
    for(q=atoi(*++v);               // Load inventory size
                     r              // While not in room 9 (0 in memory)...
                      &&*++v;       // ...and still have user commands
                                    // (ISO C promises a NULL at the end of argv)
        c[i=1[*v]]&&j==68?          // If 'D'rop, and we have the item:
            c[i]=!++X,              //  Drop it
            ++q:                    //  Increase our inventory capacity
        j>79&&                      // If 'P'ick up, and...
              q                     // ...we have capacity in our inventory and...
               *X?                  // ...the item is in the room:
            c[i]=!--X,              //  Pick it up
            --q:                    //  Decrease our inventory capacity
        j==71&&c[i+17]?             // If 'G'o to room, and we have the key:
            r=57-i:                 //  Go to the room
        j<68&&                      // If 'C'ombine, and...
              c[i]*c[j=2[*v]]       // ...we have the items and...
                             &&P?   // ...they can be combined
            c[i]=c[j]=0,            //  Remove the items
            c[P]=++q:               //  Add the combined item and increase capacity
        0                           // Unrecognised or invalid command
    )
        j=**v;                      // 'j' is the command letter (happens first)
    return r;                       // Return the final room (0 = truthy in shell)
}

আংশিক @ edc65 এর উত্তর দ্বারা অনুপ্রাণিত।


চূড়ান্ত বিভ্রান্তির জন্য আমি কোডটি পাওয়ার ;*++*v;এবং কাছে c[P][c]আনার খুব কাছাকাছি ছিলাম , তবে দুর্ভাগ্যক্রমে অন্যান্য বিকল্পগুলি সংক্ষিপ্ত আকারে পরিণত হয়েছিল :(


2

হাস্কেল, 354 325 323 বাইট

(#)=elem
(#)=elem
(%)=filter.(/=)
m!s=g""0.zip[0..]where g _ p _[]=p>8;g i p r(c:d)|p>8=1<2|'P':[k]<-c,k#x,length i<s=g(k:i)p((p,k%x):r)d|'D':[k]<-c,k#i=g(k%i)p((p,k:x):r)d|'C':q@[k,l]<-c,k#i,l#i,[y]<-[f|[d,e,f]<-m,q==[d,e]||q==[e,d]]=g(y:k%(l%i))p r d|'G':n<-c,y<-read n,['A'..]!!y#i=g i y r d|1<2=g i p r d where Just x=lookup p r

!ক্রমে গ্রহণ করে এমন একটি ফাংশন সংজ্ঞায়িত করে

  • 3 অক্ষরের স্ট্রিংয়ের তালিকা হিসাবে সম্ভাব্য সংমিশ্রণগুলি
  • জায় সর্বাধিক আকার
  • 9 টি স্ট্রিংয়ের তালিকা হিসাবে ঘরগুলি
  • প্লেয়ার স্ট্রিংগুলির তালিকা হিসাবে আদেশ দেয়

রিটার্ন Trueবা False। উদাহরণ কল:

*Main> (!) ["YZW"] 2 ["YZJ","","","","","","","","",""] ["PY","PZ","CYZ","PJ","CWJ","G9"]
True

সমস্ত পরীক্ষার কেস

অনেকগুলি বাইট গেমের রাজ্যকে চারপাশে চালাতে ব্যয় করা হয়। হাস্কেল ধ্বংসাত্মকভাবে ঘর এবং জায়গুলির মতো ডেটা স্ট্রাকচার আপডেট করতে পারে না।

কাজটি ফাংশন দ্বারা সম্পন্ন হয় gযা 4 টি পরামিতি লাগে: ইনভেন্টরি (স্ট্রিং), বর্তমান ঘর (পূর্ণসংখ্যা), কক্ষগুলি (এসো-তালিকা, কী সহ: রুম নম্বর এবং মান: আইটেম) এবং কমান্ডগুলি বাম (স্ট্রিংয়ের তালিকা) ।

g _ p _[] = p>8                     -- base case. if no commands left, return
                                    -- True if we are in room 9
g i p r(c:d)
  | p>8 =   1<2                     -- reached room 9
  | 'P':[k]<-c,                     -- 'Pickup', if
        k#x,                        --   key is in room and
        length i<s                  --   inventory not full
        = g(k:i)p((p,k%x):r)d       --   adjust inventory and room
  | 'D':[k]<-c,                     -- 'Drop', if
        k#i                         --   key is in inventory
        = g(k%i)p((p,k:x):r)d       --   adjust inventory and room
  | 'C':q@[k,l]<-c,                 -- 'Combine', if
        k#i,l#i,                    --   both keys are in inventory and
        [y]<-[f|[d,e,f]<-m,q==[d,e]||q==[e,d]]
                                    --   combination is possible
        = g(y:k%(l%i))p r d         --   adjust inventory
  | 'G':n<-c, y<-read[n],           -- 'Goto', convert digit to integer  
        ['A'..]!!y#i                --   key for room is in inventory
        = g i y r t                 --   go to room
  | 1<2                             -- impossible command
        = g i p r d                 --   ignore it

সম্ভবত নিম্নলিখিত জিনিসগুলি কিছু বাইট সংরক্ষণ করতে পারে

  • গেম রাজ্যের জন্য রাজ্য মোনাড
  • কীগুলির জন্য একটি একক সহযোগী তালিকা (কী: চিঠির চিঠি, মান: -1ইনভেন্টরির জন্য রুম নম্বর ) নং / ইনভেন্টরি নংয়ের পরিবর্তে , এই জাতীয় প্রাথমিক এসো-তালিকা তৈরি করে সর্বাধিক জায়ের আকারের জন্য চেক করা ব্যয় সাশ্রয়ের চেয়ে বেশি খরচ হয় একটি কম পরামিতি সহ।

খুশী হলাম। আমি চেক করার মতো পর্যাপ্ত পরিমাণে হাস্কেল জানি না, তবে আপনি পরীক্ষা sচালিয়ে যাওয়া এড়াতে আপনার ইনভেন্টরি ব্যবহারের পরিবর্তন হিসাবে বৃদ্ধি বা হ্রাস করে কিছু বাইট সংরক্ষণ করতে সক্ষম হবেন length i(আপনি s0 এর পরিবর্তে চেক করতে পারেন )
ডেভ

@ ডেভ: আমি মনে করি না এটির মূল্য পরিশোধ হয়েছে, কারণ পরিবর্তনের sফলে এটি পঞ্চম প্যারামিটার হয়ে যাবে gএবং এটি প্রায় পাস করতে হবে। আমার কাছে 5 পুনরাবৃত্ত কল রয়েছে g, একটি অতিরিক্ত প্যারামিটারের কমপক্ষে 6 বাইট খরচ হয়।
নিমি

1

পাইথন 3, 321 311 বাইট

-10, ধন্যবাদ ডেভ

S,F=set,frozenset
def f(r,c,i,m):
 w,v,r,c=0,S(),list(map(S,r)),{F(k):S(x)for*k,x in c}
 for a,*q in m:
  p=F(q)
  if a<'D'and p in c and p<=v:v-=p;v|=c[p]
  elif a=='D'and p<=v:r[w]|=p;v-=p
  elif a=='G'and F(chr(65+int(q[0])))<=v:w=int(q[0])
  elif a>'G'and p<=r[w]and len(v)<i:r[w]-=p;v|=p
  if w==9:return 1

রুম (আর), সংমিশ্রণ (সি) এবং চাল (এম) সমস্ত স্ট্রিংয়ের তালিকা। সর্বাধিক তালিকা (i) একটি অন্তর্নিহিত।

মোটামুটি সরাসরি এগিয়ে বাস্তবায়ন ঘরের বিষয়বস্তু এবং আপডেট আপডেট করা সহজ করার জন্য জায়গুলির জন্য সেট () গুলি ব্যবহার করুন। সংমিশ্রণের একটি অভিধান কী করতে হিমশীতল ব্যবহৃত হয়, যাতে 2 ইনপুট আইটেমগুলির ক্রম অপ্রাসঙ্গিক হয়।


কুল। এটির সাথে পরীক্ষার সেটটিতে এটি যাচাই করা হয়েছে: import sys;r=sys.argv[1:11];nc=int(sys.argv[11]);c=sys.argv[12:12+nc];i=int(sys.argv[12+nc]);m=sys.argv[13+nc:];exit(not f(r,c,i,m))(সেমিকোলন -> নিউলাইনস)। যাইহোক, দেখে মনে হচ্ছে আপনি ,dbg=Falseসেখানে রেখে গেছেন ; আপনি এটি সরিয়ে 10 বাইট সংরক্ষণ করতে পারেন!
ডেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.