Учитывая два параметра полосы движения и длины дороги , выведите ASCII-представление разметки полосы движения для службы дорог и дорожного движения, чтобы раскрасить дороги.
Пример ввода / вывода
Вход: BTHMLRPHU
21
Мне все равно, если вы берете два параметра или объединяете число в конце строки, это однозначно.
Входные данные могут быть взяты из STDIN, как аргумент функции, переменные окружения, все, что имеет смысл в вашем языке.
Выход:
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
Каждый символ обозначает 0,5 метра в ширину и один километр в длину.
Спецификация
Лейн разметка
На каждые 10 км отрезка дороги разметка наносится на километрах 2, 3, 9 и 10 (от «верха» выхода). Маркировка сосредоточена в переулке. За исключением велосипедной дорожки и медианы, все дорожки имеют ширину 3 метра (6 знаков).
ASCII алмазов и стрелка символов не допускается вместо маркировки , как указано в примере вывода.
B
: Велосипедная дорожка.B
маркировка. 1,5 метра (3 символа) в ширину.T
: Транзит. Алмазная маркировкаH
: Переулок с большой вместимостью.HOV3
маркировкаL
иR
: поворотная полоса. Маркировка стрелокP
Проходная полоса. Каретная маркировкаU
: Неограниченный переулок. Нет маркировки
Разделители (в порядке приоритета)
- Медиана:
##
(обозначаетсяM
во входной строке, заменяет любой другой разделитель, включая канаву) - Кювет (крайний левый и крайний правый):
!
восклицательный знак - HOV полосы чередуются между
x
и|
каждые 5 км - Обычный:
|
Ограничения
Ваша функция или программа должна:
- Печать в STDOUT (это означает эквиваленты
System.out.print
для Java,console.log
для JavaScript и т. Д.) - Уметь печатать 1 - 9 дорожек с 0 - 10 медианами
- Уметь печатать до 50 км проезжей части (50 строк выхода)
- Не используйте какие-либо стандартные лазейки
- Конечный пробел недопустим, за исключением необязательного
\n
в конце вывода
Максимально возможный вывод: 3700 байт (74 символа * 50 строк).
Наименьший возможный вывод: 5 байтов (с входом B
, 1)
Предположения
- Нет смежных медиан (подстрока
MM
не встречается) - Вторая линия маркировки может быть обрезана (например, если длина составляет 9 или 12 км)
- Дорожки могут не иметь логического смысла (возможен любой порядок, например, полоса поворота направо слева от дороги)
Это код-гольф , поэтому выигрывает самый короткий код (в байтах)!
Ответы:
Рубин, 245
Распечатайте разделительные полосы, если необходимо, затем напечатайте полосу.
Я не ожидаю победы.
Изменения
245 дросселей Stderr и эффективно разделить массивы.
263 лучший способ индексировать массив
268 просто напечатайте каждую строку, не рассчитывайте каноническую версию.
330 начальных коммитов
источник
JavaScript (ES6), 316 байт
демонстрация
Он должен работать в Firefox и Edge на момент написания статьи, Chrome / Opera требует включения экспериментальных функций.
источник
05AB1E ,
175174175 байтовДовольно плохой подход, но это работает и было весело сделать. Хотя определенно можно играть в гольф еще.
+1 байт в качестве исправления ошибки для двух соседних
HH
дорожек.Попробуйте онлайн.
Объяснение:
Шаг 1: Создайте все возможные полосы движения с размером 10:
Шаг 2. Преобразуйте входную строку в индексы (которые мы будем использовать для индексации в список, который мы создали на шаге 1):
Шаг 3: мы используем эти индексы для индексации в списке дорожек. И затем мы конвертируем этот список дорожек в правильный вывод, включая расширение / сокращение их до размера целочисленного ввода:
Смотрите этот 05AB1E наконечника шахты (разделы Как сжать строки не часть словаря? И Как сжать большие целые числа? ) , Чтобы понять , почему
Ž5E
это1289
;.•o¤[‹‡•
есть"tlrpbhmu"
;ŽDý
есть10201
;•δ~¬]•
есть1119188999
;Ž\nÿ
есть19889
.источник