Sie paddeln mit einem Kanu einen ziemlich schnellen Wildwasserfluss hinunter. Plötzlich explodieren Ihre Paddel und Sie befinden sich in einer gefährlichen Situation, die schnell und ohne Paddel den Fluss hinunter rast. Zum Glück haben Sie noch Programmierkenntnisse und beschließen, ein Programm neben Ihrem Kanu zu erstellen, um die Stromschnellen zu überstehen. Es gibt jedoch nicht viel Fläche an der Seite des Kanus, mit der Sie Ihr Programm schreiben können. Daher müssen Sie das Programm so kurz wie möglich halten.
Der Fluss kann als 8 mal 16 Raster dargestellt werden. Wir werden die Spalten mit den Zahlen 0
bis 7
und die Zeilen mit den Zahlen 0
bis beschriften 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Oben: Ein völlig ruhiger, gewöhnlicher Fluss ohne Hindernisse. Dies ist natürlich nicht der Fluss, auf dem Sie sich befinden.
Sie beginnen an der Koordinate (4, 0) und bewegen sich von dort unkontrolliert den Fluss hinauf (dh den Vektor (0,1)
), bis Sie auf einen Felsen stoßen ( o
in diesen Beispielen durch dargestellt). Wenn Sie auf einen Felsen stoßen, haben Sie eine 55% ige Chance, links am Felsen (dh am Vektor (-1,1)
) vorbeizukommen, und eine 45% ige Chance, rechts am Felsen (dh am Vektor (1,1)
) vorbeizukommen . Befindet sich das Kanu in der linken oder rechten Spalte, bewegt es sich immer in die Mitte. Wenn es keine Steine gibt, bewegt es sich gerade nach oben.
y
----x---15
----xo--14
-o--x---13
----x---12
---ox---11
---x----10
---xo---9
---ox---8
----xo--7
-----x--6
----ox--5
-o--x---4
----x---3
----xo--2
----x---1
----x---0
01234567
Oben: Eine mögliche Route, die das Kanu nehmen könnte, dargestellt anhand des Zeichens x
Schreiben Sie auf der Karte des Flusses ein Programm, das die Wahrscheinlichkeit ausgibt, dass das Kanu an einer bestimmten Spalte endet.
Akzeptieren Sie Eingaben in einer für Ihr Programm geeigneten Methode (z. B. STDIN, Befehlszeilenargument raw_input()
, Lesen aus einer Datei usw.). Der erste Teil der Eingabe ist eine einzelne Ganzzahl von 0 bis 7, die die Spalte darstellt, für die das Programm die Wahrscheinlichkeit findet. Darauf folgt eine Liste von Tupeln in der Form, x,y
die die Position der Steine darstellen.
Ein Beispiel:
Eingang:
4 4,1 5,5 3,5
Dies würde einen Fluss mit Steinen an den Positionen (4,1), (5,5) und (3,5) anzeigen und nach der Wahrscheinlichkeit fragen, dass das Kanu an der 4. Säule endet.
Ausgabe:
0.495
Beachten Sie, dass in diesem Beispiel die Positionen der Gesteine symmetrisch waren, sodass das Problem mit einer Binomialverteilung gelöst werden konnte. Dies wird nicht immer der Fall sein!
Auch der Fluss wird immer überquerbar sein. Das heißt, es wird niemals zwei Felsen geben, die horizontal nebeneinander liegen. Ein Beispiel für einen unmöglichen Fall finden Sie in Glenns Kommentar .
Dies ist Codegolf, daher gewinnt die niedrigste Anzahl von Zeichen. Fühlen Sie sich frei, Fragen in den Kommentaren zu stellen, wenn die Spezifikation nicht klar ist.