Відмова від відповідальності
Хоча я знаю, що існує цей конкретний пов'язаний питання , моє запитання використовує дві гаражні двері, компонент рандомізації, і я також грунтуюся на цьому на подіях реального життя, бачачи, як мій син випадково опустив одну із зазначених гаражних дверей, поки я виходив із гараж минулого тижня ... Нічого, як удар по голові, щоб творчі соки витікали! ;)
Фон
Лукас (мій 15-місячний син) любить грати з дистанційним гаражем. На цьому пульті є дві кнопки, одна - для лівої гаражної двері та одна - для правої гаражних дверей. Обидві кнопки працюють однаково; натисніть один раз, щоб двері почали відкриватися, знову натисніть, щоб зупинитися, знову натисніть, щоб почати закриватися, натисніть знову, щоб знову зупинитися, і так далі.
Лукас любить цей пульт, він випадково натисне одну з кнопок, або обидві, або взагалі жодну. Якщо обидва натиснуті, сигнал не надсилається, але натискання однієї кнопки передасть сигнал.
Отже, завдання з кодовим гольфом розділено на дві частини:
Частина перша
Створіть рядок довжиною 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% - відсоток відкритості правої двері (немає нульової прокладки)
- РРРРРР - статус правильних дверей. Якщо двері не перебувають у русі (тобто не відкриваються та не закриваються), стан "зупинено" набуває чинності, тобто вона зупиняється в русі (можливо лише на 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%?