Есть игра, в которую я люблю играть. Это происходит на сетке конечного размера (но она обернута, как сфера). На этой сетке выбирается случайная (только целочисленная) точка. Затем мне, пользователю, предлагается ввести координаты. Если мои данные точно совпадают со случайной точкой, мне говорят, что я выиграл. В противном случае мне сообщают точечное расстояние между моим входом и случайной точкой. Например, если бы я угадал, (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 или рисунок), которая показывает, где пользователь ранее угадал на сетке заданных размеров и счетчика поворотов. (Если вы идете в первый бонус, то этот бонус применяется только к2D
и1D
режимам. При добавлении графического вывода 3D, вы получаете дополнительные -50%) . - -60 байт, если вы можете предоставить игровой режим (выбранный входом в начале; то есть, если дано
0
, выполнить обычный игровой режим; когда дано1
, выполнить этот игровой режим), в котором точка перемещается на 1 единицу в случайном ортогональном направлении за ход
Подробнее об упаковке
Свертывание происходит только тогда, когда в третьем бонусе движущаяся точка перемещается через любую из границ; в этом случае точка перемещения деформируется в соответствующую точку, например так:
... ...
..R (move right) R..
... ...
Такое поведение обтекания не влияет на догадки пользователя, за исключением того факта, что точка изменила направление.
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# 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. В третьем бонусе следует вычислять и выводить расстояние до или после перемещения точки?