Моя электрическая дверь гаража работает так:
- Есть только одна кнопка для управления дверью
- Если дверь полностью закрыта, и я нажимаю кнопку, дверь начинает открываться. Требуется 10 секунд, чтобы полностью открыть
- Если дверь полностью открыта, и я нажимаю кнопку, дверь начинает закрываться. Для полного закрытия требуется 10 секунд
- Если дверь частично открывается или закрывается, и я нажимаю кнопку, то дверь останавливается и остается частично открытой.
- Всякий раз, когда дверь перестает двигаться, либо из-за автоматического завершения открытого или закрытого действия, либо из-за ручного прерывания путем нажатия кнопки на полпути во время действия, механизм перевернется и запомнит свое направление для следующего действия.
- Если кнопка нажата, когда дверь остановлена, но частично открыта, то время, необходимое ей для завершения своего действия, составит долю в 10 секунд пропорционально количеству, которое необходимо переместить для выполнения действия.
Предположим, что дверь полностью закрыта в начале.
Будет введен список целых чисел. Эти целые числа - это количество секунд, которые я жду между последовательными нажатиями кнопки управления.
Выведите две вещи:
- процент, указывающий состояние двери после того, как все нажатия кнопок завершены, и дверь достигла устойчивого состояния. Вывод
%
символа не является обязательным. - однозначное указание направления движения двери при следующем нажатии кнопки. Это может быть
up
/down
,U
/D
,+
/-
,1
/0
или все, что вы выберете.
Вы можете предположить, что дверь занимает бесконечно меньше 10 секунд, чтобы завершить действие открытия или закрытия.
Пример входных данных:
<empty list> # button was pushed just once
20 # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7
Ожидаемые результаты, соответствующие вышеуказанным данным
100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U
Сработал пример последнего теста
- Дверь начинается с закрытой. Кнопка нажата
- Подождите 11 секунд. Дверь заканчивается полностью открытой. Кнопка нажата.
- Подождите 10 секунд. Дверь заканчивается полностью закрытой. Кнопка нажата.
- Подождите 9 секунд. Кнопка нажата. Дверь останавливается при открытии на 90%.
- Подождите 8 секунд. Кнопка нажата. Дверь начинает закрываться.
- Подождите 7 секунд. Кнопка нажата. Дверь останавливается при открытии на 20%. Следующее направление будет вверх.
Ответы:
Lua,
258248242 байтаUngolfed
Я не понимаю, как ваши тесты могут быть правильными ...Фиксированный ОПисточник
Pyth,
504539 байт6 байтов благодаря Sp3000.
Тестирование.
источник
JavaScript (ES6),
109106 байтисточник
Рубин, 152 байта
Тестовые случаи:
источник
->v{
в->*v{
(я думаю). Кроме того , вам нужно пространство перед:
тем , а также после того, как ? И ты уверен, что:a<=0
не разбирает(:a) <= 0
?:a<=0
, я бы получил,ArgumentError: comparison of Symbol with 0 failed
если бы это не сработало. Я думаю, потому что он проанализировал?
и знает, что это троичный оператор, он просто работает. Правила действительно странные. Я поставил пробелы или скобки в местах, которые необходимы, чтобы избежать синтаксических ошибок, таких какSyntaxError: unexpected tLABEL
иNoMethodError: undefined method
u? '`.a=u ? a+w : a-w
и изменить его на то,a=a+w*d
гдеd
находится1
или в-1
зависимости от направления, но я еще не решил это.Python 3.5,
193187185181175173172 байта:Принимает ввод в виде разделенных запятыми чисел, например
1,2,3,4,5
или даже1.2,3.4,7.8,9.2
. Выводит, идет ли дверь на следующем шаге вверх или вниз с помощьюU
илиD
, соответственно. Будет ли гольф больше со временем.Попробуйте онлайн! (Идеально) (Здесь ввод берется в виде списка, состоящего из разделенных запятыми чисел, например
[1,2,3,4,5]
.)источник
PHP,
128120 байтКод обернут здесь, чтобы поместиться в поле кода. Поместите все в одну строку, поместите перед ним маркер открытия PHP и сохраните его в файл. Или запустите его из командной строки, используя
php -d error_reporting=0 -r '...the code...' [arguments]
.Исходный код ungolfed, набор тестов и примеры использования можно найти на github .
источник