Ну, оказывается, имя пользователя 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 (в этом мире, где разрешается продавать разрушительные клавиатуры, каждый дом одинакового размера). Мы можем использовать D
s, чтобы отметить позиции каждой дверной ручки в доме. Вот пример:
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
это сделать, тоже?