Herausforderung
Jetzt, da der Weihnachtsmann endlich herausgefunden hat, wie er in sein jetziges Gewölbe gelangen kann, merkt er, dass die Elfen irgendwie vor ihm hineingekommen sind und einige seiner Geschenke gestohlen haben! Sie haben jedoch noch nicht herausgefunden, wie sie das Gewölbe verlassen sollen, also muss der Weihnachtsmann versuchen, sie alle zu fangen. Der Weihnachtsmann und die Elfen haben beide unendlich viel Energie, um herumzulaufen, aber leider haben die Elfen eine höhere Unendlichkeit an Energie. Wenn sie also überall in Schleifen laufen, sind die Elfen frei geworden.
Bestimmen Sie anhand eines Diagramms von n
Knoten und e
Kanten mit einem zwischen zwei beliebigen Knoten vorhandenen Gang und den Positionen der Elfen und des Weihnachtsmanns, wie viele Elfen der Weihnachtsmann fangen kann, bevor er müde wird.
Die Jagd ist rundenbasiert. In jedem Zyklus bewegen sich die Elfen zuerst alle gleichzeitig (sie können sich auch untereinander und auf denselben Knoten bewegen), und dann bewegt sich der Weihnachtsmann. Wenn sich der Weihnachtsmann auf denselben Knoten wie ein Elf bewegt, hat er diesen Elfen gefangen. Jeder Elf darf sich nur in einem Schritt von einem Knoten zu seinem Nachbarn bewegen. Das gleiche gilt für den Weihnachtsmann am Anfang, aber für jeden Elfen, den er gefangen hat, kann der Weihnachtsmann einen zusätzlichen Schritt machen. Wenn der Weihnachtsmann einen Elfen gefangen hat, kann er von einem Knoten zum Nachbarn seines Nachbarn wechseln. Dies bedeutet, dass er zu einem Knoten und dann zurück gehen kann. Da der Weihnachtsmann in dieser Zeit jedoch zu schnell rennt, fängt er keine Elfen, die in den Zwischenschritten vorbeikommen (wenn er also auf A ist, ist A mit B verbunden, B ist mit C verbunden, ist ein Elf an B und der Weihnachtsmann bewegt sich von A -> B -> C, der Elf wurde noch nicht gefangen. Der Weihnachtsmann muss jedoch nicht so viele Schritte gleichzeitig bewegen. Er bewegt sich in jeder Runde bis zu 1 + (Anzahl der gefangenen Elfen).
Beachten Sie, dass sich alle Elfen in jeder Runde bewegen müssen. Wenn sich ein Elf auf den Knoten des Weihnachtsmanns bewegt, werden sie gefangen.
Alle Entitäten (Elfen, Weihnachtsmann) befinden sich am Anfang auf unterschiedlichen Knoten.
Spezifikationen und Regeln
Ihr Programm sollte theoretisch für Eingaben jeder Größe funktionieren. Die Eingabe wird als Grafik, die Positionen der Elfen und die Position des Weihnachtsmanns angegeben. Sie können das Diagramm in einem beliebigen vernünftigen Format (Liste der Knoten + Liste der Kanten, Liste der Kanten, Adjazenzmatrix, Zyklusnotation usw.) aufnehmen und die Positionen in einem angemessenen Format einnehmen, das mit Ihrem Grafikeingabeformat (Index) funktioniert in der Liste der Knoten usw.). Die Ausgabe sollte eine einzelne positive ganze Zahl sein, die die maximale Anzahl von Elfen angibt, die der Weihnachtsmann fangen kann.
Testfälle
Diese werden als Listen von Kanten und Knotennummern für Positionen angegeben.
Input -> Output
[(0, 1), (1, 2)], [0, 2], 1 -> 2 # Easy win for Santa, the elves get themselves caught :P
[(0, 1), (1, 2), (2, 3), (3, 0)], [0, 1], 2 -> 2 # The elf opposite of Santa cannot escape but the other one can always just run away each turn, until Santa catches the first elf. Then he can easily just catch the rest.
[(0, 1), (1, 2), (2, 3), (3, 0)], [1], 0 -> 0 # Santa will never catch up
[(0, 1), (1, 2), (2, 3), (3, 0), (1, 4), (4, 5), ..., (10, 11), (11, 3)], [2, 6], 0 -> 2 # The first elf moves to either 1 or 3 and then gets caught. Then, Santa can use his 2-step move to catch up to the second elf no matter what.
Ich denke, der Weihnachtsmann kann entweder keine Elfen oder alle Elfen fangen, daher könnte diese Herausforderung nur der Hinweis "Kann er einen Elfen fangen" sein
Regeln
- Standardschlupflöcher gelten
- Dies ist eine Code-Golf- Herausforderung, daher gewinnt die kürzeste Antwort in Bytes
- Es werden keine Antworten akzeptiert
Viel Spaß beim Golfen!
Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Verbindung zu dieser Site
Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .
quelle
1
Beweisen Sie einige mathematische Aussagen.2
Poste eine Jelly (/ ...) Antwort in weniger als 10 Bytes.Antworten:
Wolfram Language (Mathematica) , 129 Bytes
Probieren Sie es online aus!
Ähnliches gilt für meine Antwort auf diese Frage .
Die Funktion verwendet 3 Argumente als Eingabe: Adjazenzliste, die als Assoziation dargestellt wird ( Werkzeug zum Generieren der Adjazenzliste aus der Kantenliste ), Elfenposition und Weihnachtsmannposition.
Beachten Sie, dass dies
Clear[f]
erforderlich ist, da Funktionsübermittlungen wiederverwendbar sein müssen.Der folgende Code ist ungolfed Code mit teilweiser Erklärung. Mehr Erklärung später.
quelle