В настоящее время на моей работе мы переехали в новое здание. Предполагается, что он является самым современным и имеет автоматическое освещение, автоматические жалюзи, и теперь известен как самое экологичное здание в этом городе.
Тем не менее, это не очень хорошо работает. Роллеты иногда закрываются в пасмурные дни и поднимаются, когда солнце начинает светить, а огни иногда вызывают диско-эффекты, чередуя включение и выключение каждые 5-10 минут. Кроме того, у нас нет никакого ручного способа управления этими жалюзи, ни температуры, НО у нас есть пульт для освещения.
Эти пульты, тем не менее, поставляются без инструкции по эксплуатации и содержат чуть более 20 кнопок, выполняющих все виды задач, за исключением того, что вы, кажется, хотите.
PS: я написал этот вызов 1,5 месяца назад в Песочнице. В настоящее время мы, вроде как, знаем, как работают пульты дистанционного управления.
Одно большое преимущество этого здания - снаружи 30 градусов Цельсия, но внутри него всегда остается одна и та же температура в помещении.
Итак, это было вступление, и пульт управления светом вдохновил этот вызов.
Вызов:
Допустим, у нас изначально выключена лампа:
L
Затем мы нажимаем все виды кнопок и затем выводим состояние лампы.
Мы используем следующие цифры для различных функций пульта дистанционного управления для лампы. Когда знак минус перед этим числом, мы делаем наоборот.
1
= ВКЛ;-1
= ВЫКЛ.2
= Увеличить силу на 25%;-2
= Уменьшение (уменьшение) силы на 25%.3
= Увеличить спред на 50%;-3
= Уменьшить спред на 50%.4
= Переключение типа света.
Итак, все это довольно расплывчато, поэтому давайте немного углубимся в то, что означает каждая вещь:
Итак, -1
(ВЫКЛ) довольно очевидно, и 1
перейдет в исходное состояние ВКЛ (50% для 2
и 50% для 3
):
//
//
L ====
\\
\\
2
и -2
как далеко проходит свет ( ==
добавляется на каждые 25%):
0% (equal to a light bulb that is OFF)
L
25%
L ==
50%
L ====
75%
L ======
100%
L ========
3
и -3
как далеко распространяется свет:
0%:
L ====
50%:
//
//
L ====
\\
\\
100%:
|| //
||//
L ====
||\\
|| \\
(ПРИМЕЧАНИЕ: когда 2
и 3
оба на 100%, у вас будет это состояние:
|| //
|| //
|| //
||//
L ========
||\\
|| \\
|| \\
|| \\
4
это переключить тип света.
Default:
//
L ==
\\
After toggling (note the single space before '/' instead of two):
/
L --
\
Входные данные:
Вы получите ввод, содержащий возможные нажатия кнопок. Например:
12-34
Выход:
Состояние световой лампы после последовательного нажатия всех кнопок входа. Итак, с приведенным выше примером ввода мы имеем следующий вывод:
L ------
Правила вызова:
- Вход содержит только
1234-
(и никогда не-
до4
). - Вы никогда не можете опуститься ниже 0% или выше 100%. Если число будет увеличиваться / уменьшаться за пределами этих границ, вы можете игнорировать его.
- Когда лампа выключена, вы можете игнорировать любые действия, а при повторном включении она возвращается в исходное состояние ВКЛ (50% для обоих
2
и3
, и по умолчанию4
). Например:12-1-341
просто распечатает начальное состояние ВКЛ, упомянутое выше. (СОВЕТ: Вы можете игнорировать все до1
окончания ввода - исключая-1
.) - Замыкающие пробелы, равные длине света или одной новой конечной линии, запрещены. Добавление дополнительных ненужных новых строк, однако, не так.
- Вам разрешено принимать входные данные в виде списка целых чисел вместо одной строки. Таким образом, вместо
12-34
, вы можете иметь в[1,2,-3,4]
качестве входных данных.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с соответствующими параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
12-34
L ------
12-1-341
//
//
L ====
\\
\\
14-3224333-2
|| //
|| //
||//
L ======
||\\
|| \\
|| \\
142-1-314-3-322
L --------
1324-2-3
/
/
L ----
\
\
134
| /
|/
L ----
|\
| \
1-2-2-214-3-3-3
L ----
134
?4
). Спасибо за вопрос.1
нажата, параметры сбрасываются?Ответы:
Python 2, 221 байт
Это оказалось дольше, чем я ожидал. Первая строка рассчитывает состояние лампы, остальные осуществляют печать.
Ввод осуществляется через STDIN в виде массива.
Смотрите тестовые случаи на ideone
источник
R
323320 байтUngolfed:
читает строку ввода (целые числа разделены пробелами)
инициализирует переменные a (on-ness), b (яркость), c (ширина), d (тип луча).
d
это либо ноль, либо два, что означает, что мы можем вызвать if (d) позже, а не long, если (d> 1) или аналогичный, и сохранить пару байтов.Golf-y способ записи,
while(length(z))
где z - целочисленный вектор.Остальная часть первой строки обрабатывает ввод с помощью
switch
оператора. Вторая строка распечатывается.Возможно, что некоторые из них
<-
могут быть заменены на=
, но я думаю, что вы будете съедены заживо с помощью лексического обзора ...Также обратите внимание, что в R обратные слеши должны быть экранированы.
c*(c>0)
это гольф-способ письма,max(c,0)
который сохраняет характер.Если индикатор не горит, то , так как
*
имеет более низкий приоритет , чем:
, тоfor(i in a*b:-b)
цикл только перебирает0:0
.Обновить; сохранил 3 байта, заменив цикл в первой строке символом for (а не while). Обратите внимание, что
1:sum(1|z)
символов меньше, чем1:length(z)
илиseq_along(z)
.seq(z)
будет работать в большинстве случаев, но не тогда, когда онz
имеет длину один. Данное решение не будет работать для ввода нулевой длины, но я надеюсь, что это выходит за рамки конкуренции.источник
Котлин , 445 байт
Мой первый Kotlin Golf, на 38 байт меньше, чем Java :)
С пробелами и тестами:
Интересно, что вместо того, чтобы определять функцию как обычно и /
print
илиreturn
созданную строку, было короче использовать назначение функции (fun f() =
оцененной лямбды. (Имеет ли это описание смысл?)Я просто хотел бы, чтобы у SE была правильная подсветка синтаксиса Kotlin
источник
Java 8,
484483452446440 байтНаконец-то .. Хорошо, мой собственный вызов немного сложнее, чем я ожидал ..; P
Без сомнения, это можно сделать, используя совершенно другой подход. Теперь я сначала определяю, что делать, а затем распечатываю. Печать на самом деле самая сложная в этом, имхо.
-6 байт благодаря @ceilingcat .
Объяснение:
Попробуй это здесь.
источник
Пакетная, 552 байта
Примечание:
set v=
содержит один завершающий пробел иset s=
содержит три. Это было очень неудобно, так как вы не можете легко напечатать переменное число|
s в Batch, поэтому вы должны использовать заполнитель и заменить его в выражении echo.источник
05AB1E , 106 байт
Ввод в виде списка целых чисел.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Теперь у нас есть строка:
Тогда мы будем:
Смотрите этот 05AB1E наконечника шахты (разделы Как сжать большие целые числа? И Как сжать целые списки? ) , Чтобы понять , почему
•Wθ¨S9ƒTª»þúÙ•6в
это[5,3,2,2,2,2,2,2,2,2,4,1,1,0,0,4,1,1,3,0,0,4,1,1,3,3,0,0,4,1,1,3,3,3,0,0]
; иŽ8Ã
есть2234
.источник