トロリー問題を解く
哲学者はトロリー問題を長い間熟考してきた。残念ながら、この問題を解決した人はいません。幸運なことに、プログラマーとしてコンピューターを使用して問題を解決できます! 入力 プログラムは、(より多くても1つのエッジで入力として有向グラフを(有限の)を取るxのyいずれかのために、xおよびy)、指定されたノードと、各エッジに取り付けられた非負の整数(そのトラックに関連付けられた人々の数を表します) 。さらに、すべてのノードには少なくとも1つの出口エッジがあります。 トロリーは指定されたノードで開始します。各ターン、トロリーがnodeにあるx場合、功利主義者はedgeを選択します(x,y)。その端の人々は死に、トロリーは今や端にいyます。このプロセスは永遠に続きます。 死ぬのは一度しかできないので、端(x,y)にn人が縛られていて、トロリーがその上を100回走ったとしても、n死に至るだけです。 出力 功利主義者は、死ぬ人の数を最小限にするような方法で彼の選択をします(有限の人しかいないので、それは有限であることが保証されます)。プログラムはこの番号を出力します。 入力フォーマット 任意の合理的な方法で入力グラフを取得できます。たとえば、マトリックスとしてそれを取り、指定されたノードを0とラベル付けされたノードとしてカウントできますx1,y1,n1;x2,y2,n2;...。または、のようなものを使用することもできます。たとえば0,a,0;a,b,5;a,c,1;b,b,0;c,c,0、標準的なトロリーの問題を表すために(最後にループがある場合)。 テストケース 0,a,0;a,b,5;a,c,1;b,b,0;c,c,0 -> 1(0からa、aからc(1人を殺す)に移動してから、トロリーをcからcにループし続けます)。 0,0,1;0,a,5;a,a,0 -> 1(0から0に進み、永遠に1人以上走る)、 0,a,5;0,b,1;a,a,1;b,b,6 -> 6(0-> a-> a-> a-> a-> ...(bへ行く欲張りな解は間違っていることに注意してください) 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(実利主義者が取る可能性のある2つの異なるオプションがあり、どちらも1人だけを殺すことに注意してください) これはcode-golfなので、最短の答えが勝ちです!幸運を。 注:病気のループデループはなく、マルチトラックドリフトは禁止されています。また、私はこの問題をアシモフの3つの法則(/ s)の観点から考えることを好みますが、ピーターテイラーはサンドボックスで、この問題は重みが最小のrho(ループ自体に戻るパス)を見つけることと数学的に同等であると述べています。