গো গেম স্কোর করা এমন একটি কাজ যা খুব সহজ নয়। অতীতে, ঘটতে পারে এমন সব বিস্ময়কর কোণার বিষয়গুলি কভার করার জন্য কীভাবে নিয়মগুলি তৈরি করা যায় তা নিয়ে বহু বিতর্ক হয়েছিল। ভাগ্যক্রমে, এই কাজে আপনাকে জীবন এবং মৃত্যু বা সিকি সনাক্তকরণের মতো জটিল জিনিস করতে হবে না। এই টাস্কে, আপনাকে এমন একটি প্রোগ্রাম বাস্তবায়ন করতে হবে যা কোমি ছাড়াই ট্রম্প-টেলারের নিয়ম অনুসারে একটি গেম স্কোর করে ।
স্কোরিং পদ্ধতিটি বেশ সহজ:
সি বিন্দু, রঙিন সি নয়, সি পৌঁছানোর জন্য বলা হয়, যদি পি থেকে রঙের বিন্দুতে পি এর বর্ণের (উল্লম্ব বা অনুভূমিকভাবে) সংলগ্ন পয়েন্টের একটি পথ থাকে তবে
খেলোয়াড়ের স্কোর তার বর্ণের পয়েন্ট সংখ্যা , এবং খালি পয়েন্টগুলির সংখ্যা যা কেবল তার রঙে পৌঁছায়।
উদাহরণস্বরূপ, নিম্নলিখিত বোর্ডটি বিবেচনা করুন। X
, O
এবং -
কালো, সাদা এবং রঙ না ছড়ানো ছেদগুলি চিহ্নিত করুন:
- - - X - O - - -
- - - X - O - - -
- - - X - O - - -
- - - X O - - O -
X X X O - O O - -
- - - X O - - O O
- - - X - O - - -
- - - X - O - X -
- - - - - O - - -
স্কোরিং নিয়ম প্রয়োগ করলে নিম্নলিখিত ফলাফল পাওয়া যায়। x
, o
এবং -
অনাকাক্সিক্ষত ছেদগুলি উপস্থাপন করুন যা কালো, সাদা এবং কারও পয়েন্ট হিসাবে গণনা করা হচ্ছে।
x x x X - O o o o
x x x X - O o o o
x x x X - O o o o
x x x X O o o O o
X X X O o O O o o
- - - X O - - O O
- - - X - O - - -
- - - X - O - X -
- - - - - O - - -
ডায়াগ্রাম অনুযায়ী, কালো 23 পয়েন্ট আছে, সাদা 29 টি অঞ্চল আছে। সুতরাং, আপনার প্রোগ্রামটি W+6
এই বোর্ডের জন্য মুদ্রণ করা উচিত ।
আমি আশা করি এটি এইভাবে যথেষ্ট স্পষ্ট।
ইনপুট এবং আউটপুট
ইনপুট একটি স্ট্রিং, যাতে ঠিক থাকে ছিল n ² অক্ষরের X
, O
, -
যেখানে n হল কম্পাইল সময়ে জানা যায় না। আপনার প্রোগ্রামটির ইনপুট স্ট্রিমের অন্যান্য সমস্ত অক্ষর উপেক্ষা করা উচিত। যদি কোন পূর্ণসংখ্যা আচরণ অনির্দিষ্ট হয় এন যেমন যে পরিমাণ XO-
অক্ষর সমান ছিল n ² । আপনি অনুমান করতে পারে যে এন হয় [0, 255] ।
অক্ষরের ক্রমটি এন সারি এবং কলামগুলির একটি বোর্ড হিসাবে ব্যাখ্যা করা উচিত । আউটপুট হ'ল দশমিক প্রতিনিধিত্বতে সাদা এবং কৃষ্ণবর্ণের মোট পয়েন্টের পার্থক্যের পরম মান। যদি সাদা আরও পয়েন্ট থাকে তবে এটি দ্বারা উপসর্গীকৃত হয় W+
, যদি কালোটির আরও বেশি পয়েন্ট থাকে তবে এটি উপস্থাপিত হয় B+
। উভয় খেলোয়াড়ের ক্ষেত্রে সমান পরিমাণ পয়েন্ট থাকলে আউটপুট হয় Jigo
।
ইনপুটটি বাস্তবায়িত সংজ্ঞায়িত পদ্ধতিতে পড়তে হয়। ইনপুট সোর্স কোডের অংশ নাও থাকতে পারে।
জয়ের শর্ত
এটি কোড-গল্ফ। সাধারণ কোড-গল্ফ সম্মেলনগুলি প্রয়োগ হয়। এর উত্সটিতে ন্যূনতম পরিমাণের জমা সহ জমা দেয়। কেবলমাত্র সেই প্রোগ্রামগুলি যা সম্পূর্ণরূপে স্পেসিফিকেশন প্রয়োগ করে তা জিতে পারে।
পরীক্ষার মামলা
ইনপুট:
- - - X - O - - -
- - - X - O - - -
- - - X - O - - -
- - - X O - - O -
X X X O - O O - -
- - - X O - - O O
- - - X - O - - -
- - - X - O - X -
- - - - - O - - -
আউটপুট: W+6
ইনপুট:
Xavier is insane -- says Oliver
আউটপুট: Jigo
Inpout:
Code-Golf
আউটপুট: Jigo
ইনপুট:
-XXXXXXX-XOOOOOOOXXO-OXXXOXXXOX--XOXXOOX
-
XOOXXOX--XOXXXOXXXO-OXXOOOOOOOX-XXXXXXX-
আউটপুট: B+21
ইনপুট:
- - X O O O O X X - - - - - - X O O -
- X X O X O X X O X X X X X X - X O -
- X O O X X X - O O O X O O X X X O -
- X O O O X X O O O O O O X X X O - -
- - X X O X - X X X X O O O O O O O -
- - X O O X X X - X X X O O O X X O -
- - X O - O X O X O O O O O X X X O -
- X O O - O O O X X X X X O O X O - -
- X X X O - - - O X O X X X O X O - -
X O O O O - - O - O O O O X X X O O -
X X O - - - O - - O O X X - - X X O O
X O O O - - O - O O X - - - - X O O X
- X X X O O X O O X X - - - - X X X X
X - X X X O X X O O X - - X X O X O O
X X O O X O X O X X - - - X O O O O -
X O - O X X X O X - - - - - X O - - -
O O - O X O O O O X X - X X X X O - -
O O - O O O X O X X - - X - X X O - -
- - O - - O X X X - - - - X O O O - -
আউটপুট: B+6
শীঘ্রই আরও টেস্টকেস আসবে।
রেফারেন্স বাস্তবায়ন
আমি এএনএসআই সি-তে লিখিত একটি রেফারেন্স বাস্তবায়ন তৈরি করেছি This
/* http://codegolf.stackexchange.com/q/6693/134
* reference implementation
* by user FUZxxl
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXBOARD 256
/* bit 0x01: black colour
* bit 0x02: white colour
* bit 0x04: there is a stone on the intersection
*/
enum colour {
UNCOLOURED = 0x0,
BLACK_REACHED = 0x1,
WHITE_REACHED = 0x2,
BOTH_REACHED = 0x3,
HAS_STONE = 0x4,
BLACK = 0x5,
WHITE = 0x6
};
static enum colour board[MAXBOARD * MAXBOARD] = { 0 };
static int bsize = 0;
static void read_input(void);
static void fill_board(void);
static void show_score(void);
int main()
{
read_input();
fill_board();
show_score();
return EXIT_SUCCESS;
}
static void read_input(void)
{
int n = 0;
int invalue;
while ((invalue = getchar()) != EOF) {
switch (invalue) {
case '-': board[n++] = UNCOLOURED; break;
case 'X': board[n++] = BLACK; break;
case 'O': board[n++] = WHITE; break;
}
}
while (bsize * bsize < n) bsize++;
/* your program may exhibit undefined behaviour if this is true */
if (bsize * bsize != n) exit(EXIT_FAILURE);
}
static void fill_board(void)
{
int i,j;
int changes;
enum colour here, top, bottom, left, right, accum;
do {
changes = 0;
for (i = 0; i < bsize; ++i) {
for (j = 0; j < bsize; ++j) {
here = board[i * bsize + j];
if (here >= BOTH_REACHED) continue;
top = i == 0 ? UNCOLOURED : board[(i - 1) * bsize + j];
left = j == 0 ? UNCOLOURED : board[i * bsize + j - 1];
bottom = i == bsize-1 ? UNCOLOURED : board[(i + 1) * bsize + j];
right = j == bsize-1 ? UNCOLOURED : board[i * bsize + j + 1];
accum = here | top | bottom | left | right;
accum &= ~HAS_STONE;
changes |= board[i * bsize + j] != accum;
board[i * bsize + j] = accum;
}
}
} while (changes);
}
static void show_score(void) {
int w = 0, b = 0, n;
for (n = 0; n < bsize*bsize; ++n) switch (board[n] & ~HAS_STONE) {
case BLACK_REACHED: ++b; break;
case WHITE_REACHED: ++w; break;
}
if (b != w)
printf("%s%i\n",b>w?"B+":"W+",abs(b-w));
else
printf("Jigo\n");
}
S+
(কারণ আপনি আগে পারেন যতটা সম্ভব আউটপুট তালিকাভুক্ত টাইপো ছিলো W+
, B+
বা, Jigo
) এবং আমি আমার কীবোর্ড দিকে তাকিয়ে দেখলেন S
কাছে W
... নাকি তুমি ডিভোরাক ব্যবহার করবেন?
W+7
?