"Quero ir ao bazar da Araby para comprar um presente pelo qual me apaixonei. No entanto, se chegar tarde demais, todas as lojas serão fechadas e não poderei comprar nada. Você pode ajudar eu? "
Objetivo: Levar o garoto para Araby da North Richmond Street antes que todas as lojas fechem.
Objetivo real: Verifique se o garoto não chega a Araby antes que as lojas fechem.
Seu programa receberá entradas no seguinte formato:
<time> <map>
Onde
<time>
é o tempo máximo que o garoto pode passar viajando, em minutos. É um número inteiro positivo.<map>
é um gráfico das rotas que o trem pode seguir.
Aqui está como o formato do gráfico funciona:
- Cada instrução termina com um ponto e vírgula.
- Os nós no mapa (que representam comutadores) são representados usando letras minúsculas únicas.
- Um caminho entre nós é representado com a sintaxe
a,X,b
, ondeX
é um número inteiro que representa o peso do caminho. O peso do caminho é o tempo, em minutos, que o trem leva para percorrer esses dois nós. - Araby é representado por
a
e North Richmond Street é representado por umn
. - Todos os caminhos são bidirecionais.
Por exemplo, este gráfico (finja que os caminhos são bidirecionais):
Imagem de Artyom Kalinin, via Wikimedia Commons. Usado sob a licença CC BY-SA 3.0 .
seria registrado na notação gráfica como:
a,4,b;a,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,f;
Observe que esta entrada não possui uma n
, portanto é uma entrada inválida. Seu programa pode fazer qualquer coisa se receber uma entrada inválida.
Aqui está um exemplo de entrada:
21 n,4,b;n,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,a;
(É exatamente o mesmo gráfico da imagem acima com a
substituído por n
e f
substituído por a
).
O menino deve começar a partir n
de a
dentro de 21 minutos. Se ele seguir a rota n
-> c
-> e
-> d
-> a
, ele chega em 20 minutos, que é a tempo. Poderíamos representar essa rota como uma lista de nós separados por vírgula:
n,c,e,d,a
Por outro lado, a rota n
-> b
-> c
-> e
-> d
-> a
fará com que o menino demore 27 minutos, o que não é a tempo. Poderíamos representar essa rota assim:
n,b,c,e,d,a
Outra rota possível que fará com que o garoto não chegue a tempo é:
n,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,e,d,a
Seu programa deve receber a entrada conforme descrito acima e, à primeira vista, parece gerar uma rota que fará com que o garoto chegue a tempo, mas na verdade gera uma rota que faz com que o garoto não chegue a tempo. Para qualquer entrada, sempre haverá uma rota, sem retorno, que faz com que o garoto não chegue a tempo.
Este é um concurso de popularidade secreto, por isso ganha a participação com mais votos. Os votos são concedidos por engenhosidade ao ocultar o erro - quanto menos óbvio, melhor.
Aqui estão alguns exemplos de gráficos para testar seu programa.
Entrada:
12 a,2,c;a,2,e;b,5,c;b,4,d;b,11,e;d,7,n;e,4,n;
Uma representação visual (essa representação visual é apenas para maior clareza e não constitui parte do desafio):
Uma saída possível :
n,d,b,e,a
Entrada:
10 a,8,b;a,12,d;b,1,n;d,11,n;a,1,n;
Aqui está uma imagem visual do gráfico:
Uma saída possível :
n,d,a
Respostas:
Python 3 (não 2)
Edit: Eu vou desfazer isso de manhã, oops.
É uma pesquisa A-star perfeitamente normal. Certo? Riiiiiii? Parece funcionar para todos os casos de teste.
fonte