Given two parameters *lane pattern* and *road length*, print an ASCII representation of the lane markings for Roads and Traffic Service to paint the roads. ## Example input/output **Input:** `BTHMLRPHU`, 21 I don't care if you take two parameters or concatenate the number onto the end of the string, it's unambiguous. Input may be taken from STDIN, as a function argument, environment variables, whatever makes sense in your language. **Output:** ! | 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 ! Each character denotes 0.5 metres in width and one kilometre in length. # Specification ## Lane markings For every 10 km stretch of road, markings are painted at kilometres 2, 3, 9 and 10 (from the "top" of the output). Markings are centred in the lane. With the exception of the bike lane and median, all lanes are 3 metres (6 characters) wide. ASCII diamond and arrow characters are *not* permitted in lieu of the markings as indicated in the example output. - `B`: Bike lane. `B` marking. 1.5 metres (3 characters) wide. - `T`: Transit. Diamond marking - `H`: High-occupancy vehicle lane. `HOV3` marking - `L` and `R`: Turning lane. Arrow marking - `P`: Passing lane. Caret markings - `U`: Unrestricted lane. No markings ## Separators (in order of precedence) - Median: `##` (denoted by `M` in the input string, replaces any other separator including ditch) - Ditch (extreme left and extreme right): `!` Exclamation mark - HOV lanes alternate between `x` and `|` every 5 km - Normal: `|` ## Constraints Your function or program must: - *Print* to STDOUT (this means equivalents of `System.out.print` for Java, `console.log` for JavaScript, etc.) - Be able to print 1 - 9 lanes with 0 - 10 medians - Be able to print up to 50 km of roadway (50 lines of output) - [Not use any standard loopholes](https://codegolf.meta.stackexchange.com/q/1061/22867) - Trailing white space is not acceptable with the exception of an optional `\n` at the end of the output Largest possible output: 3700 bytes (74 characters * 50 lines). Smallest possible output: 5 bytes (with input `B`, 1) ### Assumptions - No adjacent medians (substring `MM` will not occur) - The second line of markings might be cut off (for example if the length is 9 or 12 km) - Lanes may not logically make sense (any order is possible, for example a right turn lane on the left of the road) This is [tag:code-golf], so shortest code (in bytes) wins!