отказ
Хотя я знаю, что есть этот конкретный связанный вопрос , в моем вопросе используются две гаражные двери, случайный компонент, и я также основываю это на реальных событиях, когда мой сын случайно опустил одну из указанных гаражных дверей, когда я выходил из дома. гараж на прошлой неделе ... Ничего подобного удару по голове, чтобы творческие соки текли! ;)
Фон
Лукас (мой 15-месячный сын) любит играть с гаражным пультом. На этом пульте есть две кнопки: одна для левой двери гаража и одна для правой двери гаража. Обе кнопки работают одинаково; нажмите один раз, чтобы дверь открылась, нажмите еще раз, чтобы остановить, нажмите еще раз, чтобы начать закрытие, нажмите еще раз, чтобы снова остановиться, и так далее.
Лукас любит этот пульт, он случайным образом нажимает одну из кнопок, или обе, или ни одной. Если обе кнопки нажаты, сигнал не отправляется, но нажатие одной кнопки отправит сигнал.
Итак, задача Code-Golf разделена на две части:
Первая часть
Создайте строку длиной 60 символов, представляющую случайное нажатие кнопки Лукаса в течение минуты. «Случайный» в данном случае означает «с равной вероятностью каждого входа на каждом тике». Символы следующие:
- 0: Лукас либо не нажал ни одной кнопки, или нажал обе кнопки. В любом случае, сигнал не был отправлен.
- 1: Лукас нажал кнопку левой двери гаража
- 2: Лукас нажал кнопку для правой двери гаража
Часть вторая
Используя строку, сгенерированную в первой части, смоделируйте открытие и закрытие гаража на две машины, используя числа в качестве триггеров для открытия, остановки и закрытия этих дверей.
Мои гаражные ворота довольно быстрые (см. Отказ от ответственности выше относительно того, почему). После того, как вы нажмете кнопку, для полного открытия или закрытия потребуется четыре секунды.
Итак, если закрыто:
- 0 сек: 0% открыто (закрыто); при нажатии кнопки дверь открывается
- 1 сек: 25% открытия
- 2 сек: 50% открытия
- 3 сек: 75% открытия
- 4 сек.: 100% открытие, остановка двери
И поэтому, если открыто:
- 0 сек: 100% открытия; при нажатии кнопки дверь закрывается
- 1 сек: 75% открытия
- 2 сек: 50% открытия
- 3 сек: 25% открытия
- 4 сек: 0% открыто (закрыто), дверь останавливается
Если конкретная дверь находится в движении, сигнал к той же двери остановит ее. Следующий сигнал, посланный той же двери после этого, отправит ее в противоположном направлении. Если дверь остановлена, когда она ранее находилась в движении и теперь полностью открыта или полностью закрыта, когда получен сигнал «останов», дверь будет зарегистрирована как «остановленная» в полностью открытом или полностью закрытом состоянии, готовая к двигаться в противоположном направлении, когда он получает новый сигнал.
При этом моделировании обе двери гаража будут изначально в закрытом положении. Итак, давайте посмотрим на 10-секундный список команд и посмотрим, что произойдет, если Лукас выполнит их на пульте:
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Выход
Первая часть вывода требует отображения строки длиной 60 символов, состоящей из случайных символов «0», «1» и «2», сгенерированных из первой части. например.
212022112021202211202120221120212022112021202211202120221120
Под этой строкой находится обработка этих «сигналов» в соответствии с правилами, упомянутыми выше, о том, как гаражные ворота будут вести себя с каждым соответствующим персонажем (в зависимости от секунды). В результате вы должны получить 60 строк в результате ниже начальной отображаемой строки.
Каждая из этих обработанных строк будет иметь вид:
N: (L:X% XXXXXXX, R:Y% YYYYYYY)где:
- N - это n-й символ из соответствующей случайной строки, которая будет иметь форму 0, 1 или 2.
- X% - это процент открытости левой двери (там нет заполнения нулями)
- XXXXXXX - это статус левой двери. Если дверь не находится в движении (то есть не открывается или не закрывается), применяется статус «остановлено», то есть она была остановлена в движении (возможно только при 25%, 50% или 75%) или остановлена, когда полностью открыта (100% ) или полностью закрыт (0%). В противном случае дверь будет либо «открываться», либо «закрываться».
- Y% - это процент открытости правой двери (там нет заполнения нулями)
- YYYYYYY - это статус правой двери. Если дверь не находится в движении (то есть не открывается или не закрывается), применяется статус «остановлено», то есть она была остановлена в движении (возможно только при 25%, 50% или 75%) или остановлена, когда полностью открыта (100% ) или полностью закрыт (0%). В противном случае дверь будет либо «открываться», либо «закрываться».
Пример показан ниже с использованием 10 «сигналов» и 10 обработанных строк
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
Это код-гольф, поэтому самый короткий код станет явным победителем. Я сделал это немного проще, используя такие фразы, как «открытие», «остановка» и «закрытие», которые состоят из семи букв ... так что вы можете включить это в свою стратегию.
Удачи!
1в вашем примере последняя команда не останавливает левую дверь на 75%?