Escreva um programa ou função que consiga três números inteiros, largura w, altura he contagem de passos s. Você desenhará etapas de caminhada aleatória, sem interseção, sem uma imagem 5*wpor 5*hpixel, onde cada célula de 5 por 5 pixels está vazia (bege puro) ou um desses doze "tubos" simples:
A imagem acima é ampliada para mostrar detalhes. Aqui estão os tubos no tamanho real:
(As linhas cinza são apenas para separar os tipos de tubos.)
A caminhada aleatória será um único caminho de tubo contínuo que começa em um ponto final do tubo (um dos quatro tipos inferiores de tubos) e termina em outro ponto final do tubo.
Comece com um vazio wpela hgrade e escolha aleatoriamente uma célula para ser o ponto de partida. Em seguida, escolha aleatoriamente uma das quatro direções para iniciar e desenhe o ponto final do tubo correspondente. Essa célula inicial marca o primeiro passo em sua caminhada e toda vez que você desenha uma nova célula ou sobrescreve uma existente, conta como outra etapa executada.
Agora, repetidamente, escolha aleatoriamente ir para a direita, esquerda ou reta, desenhando a célula de tubo apropriada se a direção escolhida for válida. Volte e escolha novamente se uma direção não for válida até que o scaminho completo da etapa seja formado. O caminho deve terminar com um ponto final de canal, que pode estar em qualquer lugar da grade, dependendo do curso que o caminho percorreu.
É muito importante observar que apenas as duas células de tubo reto podem ser substituídas e somente pela célula de tubo reto de orientação oposta, o resultado sendo uma célula de interseção. Caso contrário, todos os tubos devem ser colocados em células vazias.
Quando uma interseção é desenhada, a parte do caminho mais distante da célula inicial deve ser desenhada na parte superior.
Cabe a você decidir se a grade possui ou não condições periódicas de contorno (PBC), ou seja, se um tubo saindo de um lado da grade sairá do outro lado. Sem o PBC, o limite da grade conta como uma barreira na qual você pode se deparar como outros tubos.
Casos especiais
- Quando
sé 0, nenhum tubo deve ser desenhado e a saída deve ficar em branco5*wpor5*himagem (ou seja, toda bege). Quando
sé 1 um esboço de tubo únicodeve ser desenhado na célula inicial escolhida aleatoriamente.
Outros detalhes
- Você pode supor que isso
sé, no máximow*h, um caminho sempre será possível. (Embora caminhos mais longos sejam possíveis devido a interseções.) wehsempre será positivo.- Todas as escolhas aleatórias devem ser uniformemente aleatórias. por exemplo, você não deve evitar interseções quando possível, mesmo que isso facilite o problema. Geradores de números pseudo-aleatórios são permitidos.
- Quaisquer três cores visualmente distintas podem ser usadas no lugar do preto, azul e bege.
- Suas imagens de saída podem ser ampliadas para que sejam realmente
5*w*kem5*h*kpixels, ondeké um número inteiro positivo. (É recomendável ampliar qualquer exemplo que você publicar, mesmo que o seukseja 1.) - Qualquer formato de arquivo de imagem sem perda comum pode ser usado e a imagem pode ser salva em um arquivo, exibida ou vomitada no modo stdout.
O código mais curto em bytes vence.
Exemplos
(Tudo ampliado em 500%.)
Se a entrada for w=2, h=1, s=0, a saída será sempre:
Se a entrada for w=2, h=1, s=1, a saída será uma dessas imagens com a mesma chance:
Se a entrada for w=2, h=1, s=2, a saída será
ou possivelmente
se a grade tiver PBC.
(Observe que iniciar o caminho
tornaria impossível um segundo passo.)
Aqui estão algumas saídas possíveis para w=3, h=2, s=6, assumindo o PBC:
Aqui está uma saída possível para w=3, h=3, s=9, assumindo o PBC:
Observe que o caminho não precisava cobrir todas as células devido à interseção contando como duas etapas. Além disso, podemos deduzir que o ponto final do canto era a célula inicial, pois a passagem superior da interseção deve ter sido desenhada posteriormente. Assim, podemos inferir a sequência de escolhas aleatórias que foram feitas:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Finalmente, aqui estão exemplos de w=4, h=5, s=20e w=4, h=5, s=16:
You will be drawing a non-self-intersecting random walk... é auto-interseção ou não?

















