O modelo de tráfego Biham-Middleton-Levine é um autômato celular de auto-organização que os modelos simplificados de trânsito.
Consiste em vários carros representados por pontos em uma treliça com uma posição inicial aleatória, onde cada carro pode ser de dois tipos: aqueles que apenas se movem para baixo (mostrados em azul neste artigo) e aqueles que apenas se movem em direção à direita (mostrada em vermelho neste artigo). Os dois tipos de carros se revezam para se mover. Durante cada turno, todos os carros do tipo correspondente avançam um passo se não forem bloqueados por outro carro.
Sua tarefa é visualizar esse modelo como uma animação. Aqui estão algumas boas demonstrações.
Entrada
Um número de ponto flutuante entre 0 e 1 representando densidade e dois números inteiros representando a altura e a largura da grade exibidas. Suponha que as entradas sejam válidas e que os parâmetros para uma função ou leitura da entrada do usuário estejam corretos.
Exemplo: 0.38 144 89
(corresponde à imagem acima)
Resultado
Uma grade, pelo menos 80x80, que exibe a animação desse modelo em execução. No início, os carros são colocados aleatoriamente na grade até que a grade atinja a densidade de entrada, com meio vermelho e meio azul (ou seja, densidade vezes o número total de quadrados da grade, arredondados da maneira que você desejar). A densidade deve ser esse valor, o que significa que você não pode preencher cada célula com densidade como uma probabilidade. Para cada etapa, um tipo de carro se move para baixo ou para a direita, contornando se ultrapassarem a borda. O tipo de carro que se move alterna cada etapa. Para tornar a animação visível, deve haver pelo menos 10 ms entre cada etapa.
Regras
Os carros podem ter qualquer cor ou símbolo, desde que sejam distinguíveis entre si e com o plano de fundo, e cada tipo de carro tenha a mesma cor ou símbolo.
Console e saída gráfica são permitidos. Para a saída do console, qualquer símbolo imprimível é bom, mas a saída deve ser como uma grade de caracteres.
Especifique que tipo de saída você produziu se não tiver uma captura de tela ou gif.
A simulação deve ser executada para sempre.
A saída é um pouco complexa, portanto, se você tiver alguma dúvida, comente.