Os filósofos há muito refletem sobre o problema do carrinho . Infelizmente, nenhum humano resolveu esse problema ainda. Felizmente, como programadores, podemos usar computadores para resolver o problema para nós!
Entrada
Seu programa terá como entrada um gráfico direcionado (finito) (com no máximo uma borda de x
para y
, para qualquer x
e y
), com um nó designado e um número inteiro não negativo anexado a cada borda (representando o número de pessoas vinculadas a essa faixa) . Além disso, cada nó tem pelo menos uma borda de saída.
O carrinho inicia no nó designado. A cada turno, se o carrinho estiver no nó x
, o utilitário selecionará uma aresta (x,y)
. As pessoas nessa borda morrem e o carrinho está agora na borda y
. Esse processo continua para sempre.
Observe que as pessoas só podem morrer uma vez; portanto, se a borda (x,y)
tiver n
pessoas ligadas a ela, e o carrinho as atropelar, digamos, 100 vezes, isso ainda resultará em n
mortes.
Resultado
O utilitarista faz suas escolhas de forma a minimizar o número de pessoas que morrem (o que é garantido que é finito, pois existem apenas pessoas finitas). Seu programa produzirá esse número.
Formato de entrada
Você pode pegar o gráfico de entrada da maneira que desejar. Por exemplo, você pode tomá-lo como uma matriz e contar o nó designado como o denominado 0. Ou você pode usar algo como x1,y1,n1;x2,y2,n2;...
. Por exemplo, 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
para representar o problema do carrinho padrão (com loops no final).
Casos de teste
0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
-> 1 (Vá de 0 a a, a a c (matando uma pessoa) e continue fazendo o loop do carrinho de c a c).0,0,1;0,a,5;a,a,0
-> 1 (continue de 0 a 0, atropelando uma pessoa por toda a eternidade),0,a,5;0,b,1;a,a,1;b,b,6
-> 6 (0 -> a -> a -> a -> a -> ... (observe que a solução gananciosa de ir para b estaria incorreta))0,a,1;0,b,5;a,b,1;b,a,1
-> 3 (0 -> a -> b -> a -> b -> ...)0,a,1;0,b,1;a,a,0;b,b,0
-> 1 (Observe que existem duas opções diferentes que o utilitarista pode tomar que matam apenas uma pessoa)
Isso é código-golfe , então a resposta mais curta vence! Boa sorte.
Notas: Não haverá loops de loop doentes e o desvio de faixas múltiplas é banido. Além disso, embora eu prefira pensar nesse problema em termos das três leis (s) de Asimov, Peter Taylor observou na caixa de areia que esse problema é matematicamente equivalente ao de encontrar o rho (caminho em que os loops retornam) de menor peso .