Ну, оказывается, имя пользователя Doorknob на 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]
имеет индекс x (горизонтальный) и y (вертикальный), где (0,0)есть 1. Например, буква dимеет координаты (2,6)(трубы и пробелы включены в расчет координат).
Теперь давайте подумаем о доме каждого пользователя. Каждый дом может быть нарисован сверху вниз как искусство 20x4 ASCII (в этом мире, где разрешается продавать разрушительные клавиатуры, каждый дом одинакового размера). Мы можем использовать Ds, чтобы отметить позиции каждой дверной ручки в доме. Вот пример:
D D D D
D
D D
Мы назовем это «карта дома». (Да, это много дверных ручек!)
Нажатие любой клавиши зажжет ближайшую ручку двери в огне. Например, если мы берем предыдущие координаты буквы d, ближайшая ручка двери (по расстоянию до Манхэттена) находится в координатах (1,4). Это дверная ручка, которая загорается при нажатии буквы d. Если бы мы пометили пылающую ручку двери F, результат был бы:
D D D D
F
D D
Спецификации
Ваша программа будет принимать два входа:
- Строка, которая соответствует шаблону
[a-z0-9]+. - Карта дома. Это может быть строка, список строк или что-то эквивалентное.
Вам нужно пройти каждую букву строки и зажечь соответствующую ручку двери (измените ее букву на F). Если ближайшая дверная ручка уже горит, оставьте ее как есть. Если с помощью этого метода можно зажечь более 1 дверной ручки, вы можете зажечь любую.
После того, как вся строка обработана таким образом, вам нужно распечатать получившуюся карту дома.
Код-гольф, поэтому самая короткая программа выигрывает. Стандартные лазейки запрещены как обычно.
пример
Строка:
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
РЕДАКТИРОВАТЬ: Э-э ... есть причина, по которой у меня есть один ответ, даже с +50 щедрости? Если вы найдете направление сложным / расплывчатым, я был бы рад, если бы вы опубликовали в комментариях или что-то ... или я делаю что-то не так ...
РЕДАКТИРОВАТЬ 2: Срок действия Bounty истекает через день! Опубликовать что-то еще! Пожалуйста! ПОЖАЛУЙСТА!!!! :(
dсмущают : 1) Почему координаты (2, 6), а не (2, 2)? 2) Почему в примере так много возможных ответов? 3) Когда вы объясняете, как все будет гореть, почему вы вообще об этом говоритеd? Почему бы просто не сказать прямо, что нажатиеaзажжет какой-то дом в огне? Имеет лиdэто сделать, тоже?