Dados dois padrões de faixa e comprimento da estrada , imprima uma representação ASCII das marcações da pista para o Serviço de Estradas e Trânsito para pintar as estradas.
Exemplo de entrada / saída
Entrada:, BTHMLRPHU
21
Eu não me importo se você pegar dois parâmetros ou concatenar o número no final da string, é inequívoco.
As entradas podem ser obtidas do STDIN, como argumento de função, variáveis de ambiente, o que fizer sentido no seu idioma.
Resultado:
! | 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 !
Cada caractere indica 0,5 metros de largura e um quilômetro de comprimento.
Especificação
Marcações de faixa
Para cada trecho de 10 km de estrada, as marcações são pintadas nos quilômetros 2, 3, 9 e 10 (do "topo" da saída). As marcações estão centralizadas na pista. Com exceção da ciclovia e da mediana, todas as pistas têm 3 metros (6 caracteres) de largura.
Caracteres de diamante e flecha ASCII não são permitidos no lugar das marcações, conforme indicado na saída de exemplo.
B
: Ciclovia.B
marcação. 1,5 metros (3 caracteres) de largura.T
: Transito. Marcação de diamanteH
: Faixa de veículos de alta ocupação.HOV3
marcaçãoL
eR
: Rodovia. Marcação de setaP
: Faixa de passagem. Marcações de sinal de intercalaçãoU
: Pista irrestrita. Sem marcações
Separadores (em ordem de precedência)
- Mediana:
##
(indicada porM
na sequência de entrada, substitui qualquer outro separador, incluindo vala) - Vala (extrema esquerda e extrema direita): ponto de
!
exclamação - As faixas HOV alternam entre
x
e a|
cada 5 km - Normal:
|
Restrições
Sua função ou programa deve:
- Imprimir em STDOUT (isso significa equivalentes
System.out.print
para Java,console.log
JavaScript, etc.) - Ser capaz de imprimir 1 a 9 pistas com 0 a 10 medianas
- Ser capaz de imprimir até 50 km de estrada (50 linhas de saída)
- Não use brechas padrão
- O espaço em branco à direita não é aceitável, com exceção de um opcional
\n
no final da saída
Maior saída possível: 3700 bytes (74 caracteres * 50 linhas).
Menor saída possível: 5 bytes (com entrada B
, 1)
Premissas
- Nenhuma mediana adjacente (a substring
MM
não ocorrerá) - A segunda linha de marcações pode ser cortada (por exemplo, se o comprimento for 9 ou 12 km)
- As faixas podem não fazer sentido logicamente (qualquer ordem é possível, por exemplo, uma faixa de curva à direita à esquerda da estrada)
Isso é código-golfe , então o código mais curto (em bytes) vence!
Respostas:
Ruby, 245
Imprimir a pista divide se relevante, depois imprima a pista.
Eu não espero ganhar.
Changelog
245 bloqueador stderr e dividir matrizes de forma eficaz.
263 maneira melhor de indexar array
268 apenas imprima cada linha, não calcule uma versão canônica.
330 confirmação inicial
fonte
JavaScript (ES6), 316 bytes
Demo
Ele deve funcionar no Firefox e Edge no momento da redação. O Chrome / Opera exige que os recursos experimentais sejam ativados.
fonte
05AB1E ,
175174175 bytesAbordagem bastante ruim, mas funciona e foi divertido de fazer. Definitivamente pode ser jogado um pouco mais, no entanto.
+1 byte como correção de bug para duas
HH
faixas adjacentes .Experimente online.
Explicação:
Etapa 1: crie todas as faixas possíveis com tamanho 10:
Etapa 2: converta a string de entrada em índices (que vamos usar para indexar na lista que criamos na etapa 1):
Etapa 3: usamos esses índices para indexar na lista de faixas. E então convertemos essas listas de faixas na saída correta, incluindo estendendo / encurtando-as para o tamanho da entrada inteira:
Veja esta minha dica do 05AB1E (seções Como compactar seqüências de caracteres que não fazem parte do dicionário? E Como compactar números inteiros grandes? ) Para entender por que
Ž5E
é1289
;.•o¤[‹‡•
é"tlrpbhmu"
;ŽDý
é10201
;•δ~¬]•
é1119188999
;Ž\nÿ
é19889
.fonte