Не так давно мене познайомили зі словесною грою, про яку я ніколи раніше не чув. Може, вона й справді нова, а може, і навпаки - добре забута стара. Адже з'являються ж зараз на прилавках, як гриби після дощу, книжки типу "Ігри на дозвіллі", в яких абсолютно без жодних посилань на авторські права друкують ті ігри, про які писала "Наука і життя" 20-30 років тому, а також ігри, взяті з книжок класиків цікавої математики - Г. Дьюдени, С. Лойда, Л. Керрола, М. Гарднера ...
Так чи інакше, а гра ця нескладна і цікава - тобто цілком гідна того, щоб про неї розповісти. Що я і роблю.
Пропускати хід не можна, тобто кожна названа буква повинна бути записана усіма гравцями. Всього в грі робиться не більше 36 ходів, після чого гравці проводять підрахунок своїх результатів. У грі повинно бути зроблено повне число кіл, тому загальне число ходів повинно ділитися на число гравців. Наприклад, якщо грають п'ять чоловік, то можна робити 25, 30 або 35 ходів (в будь-якому випадку, про тривалості гри потрібно домовитися перед першим ходом).
Приклад заповненого квадрата:
Як і будь-яка гра, "словесний бій" допускає купу варіантів і варіацій. Я наведу лише ті, які відразу приходять в голову, а решта залишу додумувати читачам.
Варіація 1 (спрощення): гра ведеться не на фіксованому квадраті з 36 полів, а на всій картатій площині. При цьому в ідеалі виходить щось на кшталт правильного кросворду: кожному з гравців вигідно, щоб записані ним літери потрапляли не в одне слово, а відразу в кілька. Такий варіант гри наближає її до класичного "скребблу" (відомому у нас в країні також під іменами "ерудит" і "крестословіца").
Варіація 2 (ускладнення): всі отримані слова в кінці гри читаються вголос, після чого однакові слова викреслюються і не зараховуються нікому з гравців, які це слово склали. Це правило змушує ретельно думати над тим, які слова скласти з прозвучали букв. Зрештою зазвичай перемагає той, кому вдалося скласти багато нетривіальних слів.
А тепер - завдання для тих шанувальників ігор, які люблять не тільки грати самі, але і програмувати.
Уявіть, що у вашому розпорядженні є файл-словник. Напишіть програму, яка вміє підраховувати очки в уже зіграної партії - в заповненому квадратику 6x6.
Теоретично в "словесний бій" можна грати і поодинці - для цього всього лише потрібно, щоб хтось (наприклад, комп'ютер) видавав випадковим чином чергову букву. Звичайно, краще, якщо при цьому буде враховуватися частота появи цієї літери в російських словах.
Якщо ви вирішили ці два завдання, то у вас вже є все необхідне для того, щоб грати зі словами на комп'ютері, використовуючи його і як генератор букв, і для підрахунку суми. А якщо в заповненій вами табличці ви знайшли якесь слово, якого немає у словнику комп'ютера, його можна автоматично додати в словник, чи не так? Треба тільки передбачити таку можливість.
Найцікавіші нові ігри зазвичай виходять в результаті схрещування двох старих. Спробуйте схрестити "словесний бій" і "Color Lines": кожне нове слово приносить очки, після чого всі складові його букви зникають і звільняють місце. При цьому нові літери з'являються на клітинах ігрового поля не по одній, а парами або навіть по три відразу, після чого одна з букв може бути переставлені в інше місце точно так же, як переносяться кульки в "Color Lines".
Така гра може йти досить довго, а закінчується при заповненні всього поля. В результаті умілий гравець може набрати дуже багато очок.
А тепер - найважче завдання.
Напишіть програму, яка грала б в "словесний бій" за описаним вище канонічним правилам. Знову-таки, для цього потрібен якийсь словник - вважайте, що він у вас є.
Можете спробувати реалізувати два різних варіанти гри:
а) програма сама випадковим чином визначає наступну букву (але при цьому грає чесно, тобто не використовує знання того, яка буква буде названа наступним ходом);
б) всі ходи беруться з текстового файлу (природно, від програми і тут теж потрібно "чесність").
Пишіть. я постараюся відповісти на всі листи.