Es gibt ein Spiel, das ich gerne spiele. Es passiert auf einem Gitter von endlicher Größe (aber es ist wie eine Kugel gewickelt). In diesem Raster wird ein zufälliger Punkt (nur Ganzzahl) ausgewählt. Dann werde ich als Benutzer zur Eingabe einer Koordinate aufgefordert. Wenn meine Eingabe genau mit dem Zufallspunkt übereinstimmt, wird mir mitgeteilt, dass ich gewonnen habe. Ansonsten wird mir der punktweise Abstand zwischen meiner Eingabe und dem zufälligen Punkt mitgeteilt. Wenn ich zum Beispiel raten würde (2,2)
und der zufällige Punkt (4,3)
wäre, dann wäre der Abstand sqrt[(3-2)^2 + (4-2)^2] = sqrt[5]
.
Das Spiel wird fortgesetzt, bis der Spieler an der richtigen Stelle ankommt.
Ziel Erstellen Sie eine funktionsfähige Version des oben beschriebenen Spiels. Sie müssen dazu ein vollständiges Programm erstellen. Folgendes sollte Ihr Programm tun:
- Fordern Sie zwei Eingaben an: die Höhe und die Breite der Platine. Der Ursprung befindet sich oben links auf der Tafel. Diese Eingaben werden nicht überschreiten
1024
. - Wähle einen zufälligen Punkt auf diesem Brett aus. Dies wird der Punkt sein, den man erraten muss.
- Übernehmen Sie die Eingabe, die eine Kurve simuliert. Die Eingabe ist entweder ein durch Leerzeichen getrenntes Ganzzahlpaar oder zwei separate Ganzzahleingaben. In Reaktion auf diese Eingabe führt das Programm eine der folgenden zwei Aktionen aus:
- Wenn die Eingabe mit dem ausgewählten Zufallspunkt übereinstimmt, wird eine Nachricht ausgegeben, die den Sieg des Benutzers signalisiert. Ich würde vorschlagen "Du hast gewonnen!".
- Andernfalls geben Sie den Abstand zwischen dem Eingabepunkt des Benutzers und dem Zufallspunkt aus.
- Sobald der Benutzer den Sieg errungen hat, wird die Anzahl der Umdrehungen angezeigt, die der Benutzer ausgeführt hat. Das Programm wird dann beendet.
Boni
Boni werden in der Reihenfolge angewendet, in der sie in dieser Liste aufgeführt sind
- -150 Byte, wenn Ihr Programm eine Ganzzahl eingibt
D
, die die Dimension beschreibt, in der das Spiel stattfindet. WennD = 3
Sie beispielsweise einen zufälligen Punkt aus3
ganzen Zahlen erstellen ,3
ganzzahlige Eingaben vornehmen und den Abstand zwischen diesen Punkten ausgeben. - -50% (oder + 50% falls
score < 0
), wenn Sie eine grafische Darstellung der Karte (ASCII oder Bild) bereitstellen, die zeigt, wo der Benutzer das Raster vorgegebener Abmessungen und den Umdrehungszähler zuvor erraten hat. (Wenn Sie sich für den ersten Bonus entscheiden, gilt dieser Bonus nur für die Modi2D
und1D
. Wenn Sie eine grafische 3D-Ausgabe hinzufügen, erhalten Sie zusätzlich -50%.) - -60 Bytes, wenn Sie einen Gamemode bereitstellen können (der von einer Eingabe am Anfang ausgewählt wurde; wenn angegeben
0
, führen Sie den regulären Gamemode aus; wenn angegeben1
, führen Sie diesen Gamemode aus), in dem sich der Punkt pro Runde um 1 Einheit in einer zufälligen orthogonalen Richtung bewegt
Mehr zum Wickeln
Einwickeln erfolgt nur, wenn sich der sich bewegende Punkt im dritten Bonus über eine der Grenzen bewegt. In diesem Fall wird der sich bewegende Punkt wie folgt auf den entsprechenden Punkt verschoben:
... ...
..R (move right) R..
... ...
Dieses Umbruchverhalten hat keine Auswirkung auf die Vermutung des Benutzers, abgesehen von der Tatsache, dass der Punkt die Richtung geändert hat.
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert den Katalog aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamt-Bestenliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
# Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
10x10
, ist der Zufallspunkt (9,4)
und ich denke (2,2)
, ist der Abstand sqrt(13)
oder sqrt(53)
? (Hinweis für die Zukunft: Wenn Sie etwas Seltsames tun, schließen Sie nicht die Zufälligkeit ein, da es so gut wie unmöglich ist, Testfälle bereitzustellen.) 2. Soll im dritten Bonus die Distanz berechnet und ausgegeben werden, bevor oder nachdem sich der Punkt bewegt hat?