Introdução
Eu tenho alguns carros ASCII que têm velocidade e direção. Sua velocidade é representada por seu número. Se um carro estiver <>
, ele parou. Por exemplo:
<>
1>
2>
3>
Depois de um segundo, eu recebo
<>
1>
2>
3>
Depois das duas, eu recebo
<>
1>
2>
3>
Se dois carros estiverem muito próximos, eles colidem.
1> <1
1> <2
Após um segundo, isso se torna
###
##
Se dois carros se cruzam, eles se tornam hashtags onde seriam.
Se um carro é rápido o suficiente para "pular" sobre o outro, isso não resulta em um acidente.
3><1 2><1 4><>
torna-se
<13> ### <>4>
Se um carro for deixado fora da tela, ele desaparecerá (a menos que haja um acidente). Não há como um carro sair da tela.
<11>
<1 1>
1 1>
1>
Desafio
Com base na física do carro, você deve criar um programa que possa demorar um segundo no futuro. A entrada serão carros com espaços e uma velocidade máxima de 5 (regex correspondente (<[1-5]|[1-5]>|<>| )+
). A simulação ocorrerá em uma linha, no entanto, essa linha não tem tamanho fixo.
Casos de teste
<> 1> 2> 3> 4> 5>
<> 1> 2> 3> 4> 5>
1><1 1> <1 1> <1
## ### 1><1
2><2 2> <2 2> <2 2> <2 2> <2
<22> ### ## ### 2><2
<22> <1 3> <2
### ##
<><> 1><> 2><> 3><> 4><> 5><>
<><> ### ## ### <>4> <> 5>
<><1 <2 <3 <4 <5
###<2<3<4<5
Pontuação
Isso é código-golfe , então o código com o menor número de bytes vence!
fonte
<>
significado da velocidade 0Respostas:
JavaScript (ES6), 140 bytes
Experimente online!
Comentado
fonte
JavaScript (Node.js) , 259 bytes
254 a 259 porque eu adicionei o caso de teste que não estava nos casos de teste que complicaram meu localizador de resultados regex
Experimente online!
fonte
Retina , 178 bytes
Experimente online! O link inclui casos de teste. Explicação:
Manuseie o estojo de um carro saindo da esquerda.
Temporariamente complementar os dígitos dos carros que se deslocam para a esquerda.
Coloque cada carro em sua própria linha (
$.`* $&¶
) e adicione algum recuo, dependendo da velocidade do carro; carros em movimento à esquerda obtêm a velocidade complementada, enquanto carros em movimento obtêm 5 a mais que a velocidade.Descompacte os dígitos do carro em movimento à esquerda.
Mova todos os carros 5 para a esquerda. Isso corrige o recuo para todos os carros.
Exclua todos os carros que foram movidos para a esquerda.
Classifique os carros restantes na ordem horizontal inversa.
Repita as etapas restantes até que todos os carros tenham sido processados.
Enquanto o próximo carro não bater, adicione-o ao resultado.
Adicione um carro batendo ao resultado.
fonte