Los filósofos han reflexionado durante mucho tiempo sobre el problema del Trolley . Desafortunadamente, ningún humano ha resuelto este problema todavía. ¡Afortunadamente, como programadores podemos usar computadoras para resolver el problema por nosotros!
Entrada
Su programa tomará como entrada un gráfico dirigido (finito) (con como máximo un borde de x
ay
, para cualquier x
y y
), con un nodo designado, y un entero no negativo unido a cada borde (que representa el número de personas vinculadas a esa pista) . Además, cada nodo tiene al menos un borde de salida.
El carro comienza en el nodo designado. Cada turno, si el carro está en el nodox
, el utilitario selecciona un borde (x,y)
. La gente en ese borde muere, y el carro ahora está al borde y
. Este proceso continúa para siempre.
Tenga en cuenta que las personas solo pueden morir una vez, por lo que si el borde (x,y)
tienen
personas atadas a él, y el carro los atropella, digamos, 100 veces, solo dará como resultado la n
muerte.
Salida
El utilitario toma sus decisiones de tal manera que minimiza el número de personas que mueren (lo que se garantiza que es finito, ya que solo hay personas finitas). Su programa generará este número.
Formato de entrada
Puede tomar el gráfico de entrada de la manera razonable que desee. Por ejemplo, podría tomarlo como una matriz y contar el nodo designado como el etiquetado 0. O podría usar algo como x1,y1,n1;x2,y2,n2;...
. Por ejemplo, 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
para representar el problema del carro estándar (con bucles al final).
Casos de prueba
0,a,0;a,b,5;a,c,1;b,b,0;c,c,0
-> 1 (Ir de 0 a a, a a c (matar a una persona), y luego seguir girando el carro de c a c).0,0,1;0,a,5;a,a,0
-> 1 (Continúa de 0 a 0, atropellando a 1 persona por toda la eternidad),0,a,5;0,b,1;a,a,1;b,b,6
-> 6 (0 -> a -> a -> a -> a -> ... (tenga en cuenta que la codiciosa solución de ir a b sería incorrecta))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 (Tenga en cuenta que hay dos opciones diferentes que el utilitario podría tomar y que ambas matan a una sola persona)
Este es el código de golf , por lo que gana la respuesta más corta. Buena suerte.
Notas: No habrá loop de loops enfermos y la deriva multipista está prohibida. Además, aunque prefiero pensar en este problema en términos de las tres leyes (/ s) de Asimov, Peter Taylor ha notado en la caja de arena que este problema es matemáticamente equivalente al de encontrar el rho (camino de vuelta de los bucles en sí mismo) de menor peso .