Вступление
Учитывая эту визуализацию игрового поля:
(0,0)
+----------------------+(map_width, 0)
| A |
|-----+-----------+----|
| D | W | B |
|-----+-----------+----|
| C |
+----------------------+(map_width, map_height)
(0, map_height)
Вся карта, на которой играется, представляет собой прямоугольник с угловыми координатами (0,0) и (map_width, map_height). Очки, имеющие право на порождение врагов - Союз
Соревнование
Напишите код, который возвращает случайную точку (x, y), которая, как гарантированно, находится внутри S. Ваш код не может вводить никакого дополнительного смещения, означающего, что вероятность каждой координаты равномерно распределена с учетом предположения о том, что вы выбираете генерацию случайности (например, функция). | библиотека | dev / urandom) беспристрастна.
Самые короткие решения в байтах выигрывают!
вход
Вам будет предоставлена в общей сложности 6 положительных целое число входных переменных в следующем порядке:
map_width, map_height, W_top_left_x, W_top_left_y, W_width, W_height
. Можно предположить, что (расчетная) площадь поверхности всех областей (A, B, C, D, W) составляет> 10, поэтому пустых пространств / областей нет.
Пример ввода: 1000, 1000, 100, 100, 600, 400
Входные данные должны содержать 6 значений, описанных выше, но они могут передаваться как меньшее количество аргументов и в любом порядке. Например, (map_width, map_height)
допускается передача в виде кортежа Python. Что не допускается, конечно, рассчитанные параметры, такие как нижняя правая точка W.
Выход
2 случайно сгенерированных целых числа (x, y) где
ИЛИ
значение хотя бы одного из приведенных выше логических выражений должно быть истинным.
Примеры
Input Output(valid random samples)
1000 1000 100 100 600 400 10 10
1000 1000 100 100 600 400 800 550
1000 1000 100 100 600 400 800 10
1000 1000 100 100 600 400 10 550
Для получения подробной информации и ограничений для ввода / вывода, пожалуйста, обратитесь к стандартным правилам ввода / вывода
2 randomly generated integers (x, y)
Ответы:
Python 2 ,
114106102101 байтПопробуйте онлайн!
источник
[i%w, i/w]
потому что диапазон,w*h/w=h
но x привязан к ширине в этом примере, а не к высоте.a/b
это уже деление по полу, еслиa
иb
являются целыми числами (которые они здесь).R ,
8973 байтаПопробуйте онлайн!
Принимает вход как
width,height,c(X,Y),c(W,H)
.источник
05AB1E ,
2321201817 байтВвод в формате
[map_width, map_height], [W_top_left_x, W_top_left_y], [W_width, W_height]
.Спасибо @Grimy за -1 байт, а также за то, что я понял, что я внес ошибку после моего последнего редактирования.
Попробуйте онлайн , выведите 10 возможных выходов одновременно или проверьте все возможные координаты . (Небольшое примечание: я уменьшил входные данные примера в 10 раз, потому что встроенный фильтр и случайный выбор довольно медленны для больших списков.)
Объяснение:
Входы
map_width, map_height, [W_top_left_x, W_top_left_y], [W_width, W_height]
упоминаются как[Wm, Hm], [x, y], [w, h]
ниже:источник
[map_height, 0]
как возможный случайный вывод без¨
. :)*ݨ¹‰
может бытьL`â<
, принимая первые два входа как[map_height, map_width]
. ТакжеII
может бытьŠ
, если я что-то пропустил.L`â<
. Что же касаетсяII+
доŠ+
, вы действительно правы , что это будет такой же .. К сожалению , я сделал ошибку , и сам он должен был²³+
вместоII+
, так как он будет использовать третий вход для обоихI
(так же , как это заняло бы в два раза третий ввод сŠ
) после первой итерации фильтра .. Так что неявно спасибо, что заставили меня понять, что у меня была ошибка. :)C # (интерактивный компилятор Visual C #) , 110 байт
Попробуйте онлайн!
источник
PowerShell ,
8573 байта-12 байт благодаря маззи
Попробуйте онлайн!
Хороший простой ответ, который объединяет массив, составленный из диапазона значений для каждого измерения, а затем выбирает один случайным образом для
x
иy
. Руководит повторно большую часть кода на первой обработкеx
, а затем перезаписать$x
с$y
и запустить его снова.источник
Юлия ,
767167 байтПопробуйте онлайн!
источник
Желе , 11 байт
Попробуйте онлайн!
Двоичное звено , которое принимает два аргумента
[map_width, map_height], [W_width, W_height]
иW_left, W_top
возвращает случайно выбранную точку отвечающих требований.объяснение
источник
Python 2 , 100 байт
Вход должен быть в форме
((map_width, W_top_left_x, W_width),(map_height, W_top_left_y, W_height))
Выход дается в виде:
[[x],[y]]
Попробуйте онлайн!
Случайные результаты, полученные из входных данных примера:
источник
Java (OpenJDK 8) , 100 байт
Попробуйте онлайн!
Использует в
java.awt.Rectangle
качестве держателя некоторых параметров. Естественно, те используютint
поля, а неfloat
илиdouble
.источник
Rectangle#contains
встроенным! : DWolfram Language (Mathematica) ,
846860 байтПопробуйте онлайн!
Принимайте входные данные как
{map_width, map_height}, {W_width, W_height}, {W_top_left_x, W_top_left_y}
.источник
Древесный уголь ,
5543 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите размер карты. (Если бы они были последними, я мог бы ввести встроенную высоту для 1-байтового сохранения.)
Введите внутренний прямоугольник. (Если бы я мог ввести в порядке,
left, width, top, height
то я мог бы использоватьF²⊞υE²N
для 3-байтового сохранения.)Создайте список всех координат в поле.
Отфильтруйте записи, где обе координаты лежат внутри прямоугольника.
Выведите случайный элемент из тех, которые остались.
источник
Perl 5
-ap
, 84 байтаПопробуйте онлайн!
источник
Scala , 172 байта
Случайность? Попался.
Веселая реализация, о которой я мог подумать.
Как это работает : Генерация случайной пары на карте. Если это во внутреннем прямоугольнике, попробуйте еще раз.
Попробуйте онлайн!
источник
J ,
54474539 байтПопробуйте онлайн!
Возьмите входные данные в виде сетки 3 x 2, например:
0?@{[
(-1&{)~
(<*/@,0<:[)
смещенного аналогично внутреннего прямоугольника2{[
. В противном случае верните исходную несмещенную случайную точку.{~&1
Другой подход, 45 байтов
Попробуйте онлайн!
Этот концептуально проще и не связан с циклом. Вместо этого мы строим матрицу из всех чисел от 0 до (wxh), сдвигаем ее на внутреннюю начальную точку, берем только точки в подсетке (0, 0) - (inner w, innner h), удаляем их из общего сетка после сглаживания обоих, выберите один случайным образом из остатка, и преобразовать целое число обратно в точку, используя divmod
<.@% , |~
источник