Ну, виходить, дверну ручку по імені користувача на GitHub, Reddit і інші сайти KeyboardFire . Це дає мені уявлення ...
Завдання
Ви працюєте в KeyboardFire Inc., компанії, яка виробляє спеціальні клавіатури. І, маючи на увазі, "спеціально", я маю на увазі те, що кожного разу, коли ви натискаєте клавішу, щось у вашому будинку загоряється! З новою серії KeyboardFire Doorknob об'єктами, що запалюються, є дверні ручки.
Однак , через дурні урядові постанови, ваші користувачі повинні знати, які дверні ручки у їхньому будинку загоряться.
Розглянемо це мистецтво ASCII частини клавіатури QWERTY:
1|2|3|4|5|6|7|8|9|0
q|w|e|r|t|y|u|i|o|p
a|s|d|f|g|h|j|k|l
z|x|c|v|b|n|m
(Значення |
"представляють межі між ключами."
Ми можемо трактувати цей точний малюнок ASCII як "графік" сортів, де кожен символ у діапазоні [a-z0-9]
має х (горизонтальний) та у (вертикальний) індекс, де (0,0)
є 1
. Наприклад, лист d
має координати (2,6)
(труби та пробіли включаються до розрахунку координат).
Тепер давайте подумаємо про будинок кожного користувача. Кожен будинок може бути намальований видом зверху вниз як мистецтво ASCII розміром 20x4 (у цьому світі, де законно продавати руйнівні клавіатури, кожен будинок має однаковий розмір). Ми можемо використовувати D
позначення позицій кожної дверної ручки в будинку. Ось приклад:
D D D D
D
D D
Ми назвемо це «будинковою картою». (Так, це багато дверних ручок!)
Натискання будь-якої клавіші запалить найближчу дверну ручку. Наприклад, якщо взяти попередні координати листа d
, найближча дверна ручка (на відстані Манхеттена) знаходиться за координатами (1,4)
. Це дверна ручка, яка запалиться, коли грамота d
потрапила. Якби ми позначили полум’яну дверну ручку цифрою F
, результат був би:
D D D D
F
D D
Технічні характеристики
Ваша програма займе два входи:
- Рядок, що відповідає шаблону
[a-z0-9]+
. - Карта будинку. Це може бути рядок, список рядків або щось еквівалентне.
Вам потрібно пройти кожну букву рядка і запалити відповідну дверну ручку (змінити її літеру на an F
). Якщо найближча дверна ручка вже загорілася, залиште її як є. Якщо є більше однієї дверної ручки, яку можна було б запалити за допомогою цього методу, ви можете запалити ту, яку бажаєте.
Після того, як цілий рядок буде оброблений таким чином, потрібно надрукувати отриману карту будинку.
Код-гольф, тому виграє найкоротша програма. Стандартні лазівки заборонені, як зазвичай.
Приклад
Рядок:
helloworld123
Карта будинку:
D D D D
D
D D
Можливі результати:
F F F D
F
D F
Або:
F D F D
F
D F
Або:
F F D D
F
F F
Або:
F D D D
F
F F
EDIT: Ага ... чи є причина, що я маю одну відповідь, навіть із щедротою +50? Якщо ви вважаєте, що вказівки є складними / розпливчастими, я буду радий, якщо ви опублікували в коментарях чи щось таке ... або я роблю щось не так ...
EDIT 2: Баунті закінчується за день! Опублікуйте щось інше! Будь ласка! БУДЬ ЛАСКА !!!! :(
d
координати (2, 6), а не (2, 2)? 2) Чому в прикладі є стільки можливих відповідей? 3) Коли ви пояснюєте, як загоряться речі у вогні, чому ви взагалі говоритеd
? Чому б просто не сказати, що натисканняa
запалить будинок у вогні? Це тежd
робиться?