Мой робот как-то замкнулся и случайно убежал куда-то из моей лаборатории!
К счастью, всякий раз, когда он делает это, его последовательность выключения начинается, давая ему достаточно времени, чтобы случайным образом повернуть и бежать в направлении его движения в течение пяти раундов, прежде чем он выключится. Его функции гироскопа и акселерометра все еще передают данные обратно в лабораторию, пока он еще включен.
Например, данные всегда будут представлены в виде пяти наборов из двух чисел.
12:234,-135:47,-68:230,140:324,127,87
Ваша задача, игроки в гольф, состоит в том, чтобы: а) симулировать безумную последовательность бега и поворота робота, отображая пять наборов чисел в виде a1:d1,a2:d2,a3:d3,a4:d4,a5:d5
где a
(n) - угол по часовой стрелке (в градусах), так -179<=a<=+180
что робот будет поворачиваться с текущего курса ( изначально он движется с нулевым курсом до того, как он выйдет из-под контроля и повернется в первый раз), и d
(n) - это расстояние в футах, которое он прошел до следующего изменения курса, которое таково, что 0<=d<=500
ноги; и b) рассчитанный курс из лаборатории (который также ориентирован на нулевой курс), расстояние в футах (строго рекомендуется точность до 3 десятичных знаков, -5 байт, если вы это делаете) и ориентационный курс (в градусах) где мой робот, когда он выключен.
Простой пример:
Data: 0:1,45:1,90:1,90:1,90:1
Heading: 0
Distance: 1
Orientation: -45
Случайные повороты и расстояния просто случайны. Никакие установленные значения не должны быть жестко запрограммированы, мы должны видеть случайность в действии в коде.
Ограничения на случайность: нет ссылок на часы или дату, нам нужно увидеть встроенную random
ссылку в коде. Всякий раз, когда вы запускаете этот код, случайность должна показывать возможность показывать 1 из 360 возможных углов поворота с каждым раундом поворота. Таким образом, робот может поворачиваться на -36 градусов за один оборот и может поворачиваться на +157 градусов на следующий, после чего следует еще один поворот на +2 градуса, еще один поворот на -116 градусов и заключительный поворот на +42 градуса на последнем повороте. Должно быть как минимум 360 различных значений (от -179 до +180 градусов включительно) с каждым генерацией случайного угла.
Ограничения на дистанцию пробега: Аналогичным образом, существует 501 возможное расстояние, на которое робот может пробежать (от 0 до 500 футов включительно), поэтому я ожидаю, что случайность также будет доступна при определении пробега робота. Робот теоретически может бегать 45, 117, 364, 27 и 6 футов с каждым из своих соответствующих раундов ...
Подаваемые вам данные всегда будут иметь целочисленные значения ... робот будет поворачиваться в целочисленных диапазонах градусов и работать в целочисленных диапазонах расстояния. Однако выходные значения будут плавающими ...
Это код-гольф. Самый короткий код выигрывает ... А теперь иди и найди моего робота!
PS: В отношении моей «Точности до 3 десятичных знаков», если вы можете указать курс (в градусах, до МИНИМАЛЬНОГО 3 десятичных знака) и расстояние в футах (также с точностью до МИНИМАЛЬНЫХ 3 десятичных знаков), вы получит бонус -5 байт).
-180 < a <= +180
в качестве<
знака собственные средства меньше, чем AFAIK, но не включая ...Ответы:
Perl 6:
188184 символов - 5 = 180 балловГольф с пробелами:
Ungolfed:
Это превращает данные в комплексные числа с
unpolar
, помещает их сумму в$complex
, а затем получает полярные координаты как$dist
,$ang
.Совокупный угол,
$cum-angle
собирается потому, что углы относительно робота, когда он движется через лабораторию, и потому, что нам нужен конечный угол робота в нашей продукции.Пример вывода:
Единственный реальный трюк, который использует гольф, состоит в том, что он (неправильно) использует все 3 специальные переменные Perl 6 для хорошего эффекта:
$!
используется для радианов ↔ градусов$_
содержит данные, и все, что выглядит как одинокий на.method()
самом деле означает$_.method()
(за исключением внутриmap {…}
блока, где$_
фактически принимает значение пар чисел, составляющих данные)$/
содержит то, что в негольфированной версии($dist, $ang)
.$0
и на$1
самом деле означает$/[0]
, то есть$dist
, и$/[1]
, т.е.$ang
источник
$_=((-179..180).pick=>(^501).pick)xx 5;my$o;$/=([+] .map:{unpolar .value,$o+=.key/($!=180/pi)}).polar;say "Data: {.fmt("%d:%d",",")} Heading: {$1*$!} Distance: $0 Orientation: {$o*$!}"
.map:
является обязательнымRuby,
274252249245214211207204202 символов (-5 = 197)Как PHP побил Ruby по количеству символов ?! >: O Нужно найти какой-нибудь способ игры в гольф подробнее ...
Изменить: Я победил ответ PHP, но пользователь, который написал его, помог мне сделать это! Иди, проголосуй за него; он этого заслуживает :-P
Другое редактирование: Гах! Он снова прошел мимо меня! Вы очень достойный противник, @MathieuRodic; поздравляю, я должен позволить вам выиграть ;-)
Разгруженный код (и
немногоболее старая версия):Пример вывода:
источник
Orientation
секции.% 360
это?M=Math
иP=M::PI
и соответственно заменив код - и еще один символ, избавившись от пробела после второгоputs
.PHP -
238232221212203199 символов(проверьте это здесь: http://ideone.com/dNZnKX )
Версия без гольфа:
(проверьте это здесь: http://ideone.com/1HzWH7 )
источник
Python -
264259256258 - 5 = 253 символа(проверить это на http://ideone.com/FicW6e )
Безголовая версия:
(проверить это на http://ideone.com/O3PP7T )
NB: многие ответы включают в свой заголовок -5 , а их программа не представляет расстояние с точностью до 3 десятичных знаков ...
источник
Python 301-5 = 296
Ничего особенного, скорее многословного. Это одна проблема, для которой я не рад, что триггерные функции python работают в радианах.
источник
Python 2 =
376319 символов (-5 для расстояния = 314)образец вывода
источник