Você foi contratado como assistente de pesquisa e solicitado a criar um pequeno programa que criará labirintos de ratos. A caixa do rato é sempre 62x22 e possui uma entrada (a) e uma saída (A) para o rato, desta forma (entrada 1):
#######a######################################################
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
#################################################A############
Seu programa deve preencher a caixa com blocos (#) deixando um caminho para o rato, como este (saída 1):
#######a######################################################
####### ######################################################
####### ######################################################
####### ######################################################
####### ######################################################
####### ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
################################################# ############
#################################################A############
Isso é fácil, você pensa! Você começa a escrever um pequeno programa, cheio de confiança. No entanto, o cientista principal teve uma nova idéia - ele quer dois ratos para navegar no labirinto ao mesmo tempo. O Dr. Rattanshnorter explica que eles têm portas e saídas diferentes (entrada 2):
#b#####a######################################################
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# #
# B
# #
#################################################A############
Os ratos foram treinados para atravessar cruzamentos cruzados, mas os cruzamentos em T os deixam irremediavelmente confusos e invalidarão o experimento. Você começa sua nova tarefa mais complexa quando o bom doutor explica um requisito final: os ratos são selvagens um com o outro; se eles se virem a qualquer momento, uma briga de ratos será iniciada e vocês dois estarão diante do conselho de ética. Agora você percebe que seu programa deve gerar um labirinto semelhante a este (saída 2):
#b#####a######################################################
# ##### ######################################################
# ##### ######################################################
# ##### ####################################### ####
# ##### ####################################### ######### ####
# ##### ####### ####
# ############################################# # ####### ####
# ############################################# # ####### ####
# ############################################# # ####### ####
# ############################################# # ####### ####
# # ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### ####
################################################# ####### B
################################################# ############
#################################################A############
Quando o rato B chegar ao cruzamento, o rato A estará viajando pelo corredor para sair de A e a luta por ratos será evitada.
Regras:
Seu programa deve ler (STDIN ou arquivo) uma entrada como as acima e gerar (STDOUT ou arquivo) os mesmos dados, exceto que muitos espaços serão agora hashes (#). Você pode substituir qualquer caractere único (como
;
) em vez de\n
na sequência de entrada, mas a sequência de saída ainda requer\n
caracteres. ATUALIZADAUm caminho de rato deve ter a largura de um caractere, exceto as interseções cruzadas (todo espaço deve ter zero ou dois ortogonalmente adjacentes
#
caracteres ). Cada rato deve ter um único caminho claro, exceto cruzamentos cruzados. Não são permitidas interseções em T.Os ratos são liberados simultaneamente e se movem a uma taxa constante. Em nenhum momento dois ou mais ratos devem se ver (estar na mesma coluna ou linha sem um dos mais
#
caracteres no meio).Se nenhuma solução for possível (como pontos de entrada adjacentes), imprima
Impossible\n
e saia.As entradas e saídas podem estar de qualquer lado, porém nunca estarão nas esquinas.
Se uma entrada e uma saída correspondentes forem adjacentes (por exemplo
##aA##
:), o rato não poderá ir diretamente dea
paraA
. Deve haver uma pequena seção de corredor de 2 espaços dentro da área do labirinto.No turno em que um rato atinge seu ponto de saída (ou a qualquer momento depois disso), ele não é mais visível para outros ratos.
Seu programa pode ser projetado para calcular labirintos para 1, 2, até 26 ratos.
As brechas padrão não são permitidas.
Ponto:
Com sua solução, indique quantos ratos por labirinto (N) seu programa pode resolver. Sua pontuação é o tamanho do código em bytes dividido por este número N.
Inclua uma amostra de saída em sua resposta para que possamos ver o que seu programa produz.