Є гра, в яку я люблю грати. Це відбувається на сітці обмеженого розміру (але вона загорнута, як сфера). На цій сітці обрана випадкова (лише ціла кількість) точка. Потім мені, користувачеві, запропоновано ввести координат. Якщо мій внесок точно відповідає випадковій точці, мені кажуть, що я переміг. В іншому випадку мені кажуть точну відстань між моїм входом та випадковою точкою. Наприклад, якби я здогадався, (2,2)
а випадкова точка була (4,3)
, то відстань була б sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
Гра триває, поки гравець не прибуде в потрібне місце точки.
Завдання Створіть описану вище функціональну версію гри. Ви повинні створити повну програму для цього. Ось що має зробити ваша програма:
- Попросіть два входи: висоту та ширину дошки. Походження знаходиться вгорі ліворуч дошки. Ці входи не перевищуватимуть
1024
. - Виберіть випадкову точку на цій дошці; це буде пункт, про який можна здогадатися.
- Прийміть вхід, що імітує поворот. Вхід буде або розділеною пропуском парою цілих чисел, або двома окремими цілими входами. У відповідь на цей вхід програма зробить одну з двох речей:
- Якщо вхід відповідає вибраній випадковій точці, виведіть повідомлення, що сигналізує про перемогу користувача. Я б запропонував «Ви перемогли!».
- В іншому випадку виведіть відстань між точкою введення користувача та випадковою точкою.
- Як тільки користувач досяг перемоги, покажіть кількість витків, які користувач здійснив. Потім програма виходить.
Бонуси
Бонуси застосовуються в тому порядку, який вони відображаються в цьому списку
- -150 байт, якщо ваша програма бере ціле число,
D
яке описує розмір, в якому відбувається гра. Наприклад, якщоD = 3
ви створюєте випадкову точку3
цілих чисел, приймаєте3
цілі введення та виводите відстань між цими точками. - -50% (або + 50%, якщо
score < 0
), якщо ви надаєте графічне зображення плати (ASCII або Picture), яке показує, де користувач раніше здогадався на сітці заданих розмірів і лічильник повороту. (Якщо ви йдете на перший бонус, то цей бонус стосується лише режимів2D
і1D
. Якщо ви додасте 3D-графічний вихід, ви отримаєте додаткові -50%.) - -60 байтів, якщо ви можете надати гамемоду (вибрану вхідним сигналом на початку; тобто, коли це дано
0
, виконайте звичайний гамемод; коли дано1
, виконайте цей гамемод), в якому точка рухається 1 одиницею у довільному ортогональному напрямку за оборот
Детальніше про обгортання
Загортання відбувається лише тоді, коли в третьому бонусі точка переміщення переміщується через будь-яку з меж; у цьому випадку рухома точка викривляється до відповідної точки, наприклад:
... ...
..R (move right) R..
... ...
Таке поводження не впливає на здогадки користувача, окрім того, що точка змінила напрямок.
Таблиця лідерів
Фрагмент стека внизу цієї публікації генерує каталог з відповідей а) як список найкоротших варіантів для кожної мови та б) як загальний таблиця лідерів.
Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:
# Language Name, N bytes
де N
розмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Якщо ви хочете включити у свій заголовок декілька чисел (наприклад, тому що ваш показник становить суму двох файлів або ви хочете окремо перерахувати штрафні санкції для перекладача), переконайтесь, що фактичний бал є останнім номером у заголовку:
# Perl, 43 + 2 (-p flag) = 45 bytes
Ви також можете зробити ім'я мови посиланням, яке з’явиться у фрагменті:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, випадкова точка є (9,4)
, і я думаю (2,2)
, відстань sqrt(13)
або sqrt(53)
? (Зверніть увагу на майбутнє: якщо ви робите щось дивне, не включайте випадковість, оскільки це майже неможливо надати тестові випадки). 2. У третьому бонусі слід обчислювати відстань і виводити до або після переміщення точки?