Aus IBM PC AT, YouTube (siehe Video) , Wikipedia (siehe Artikel) und Sesamstraße haben wir gelernt :
Der Buchstabe H
ist der gnadenloseste Buchstabe des Alphabets !
(Auch wenn es tatsächlich aus zwei Elementen in Code Page 437 besteht . Auf diese Weise ist es sogar noch gnadenloser.)
Wie die Außerirdischen in ... ähm ... Außerirdischen verfolgen die Bestien unerbittlich alle, die es wagen würden, sich ihren Eiern zu nähern. Es gibt keine Gründe dafür. Sie müssen sie zerquetschen, wenn Sie nicht zugrunde gehen wollen.
In diesem Szenario gehen wir davon aus, dass Sie Ihr letztes Leben hinter sich haben und einfache Bestien in einem Gelände ohne Eier getroffen haben (wie im Wikipedia-Screenshot). Sie haben keine Zehnertastatur und können sich nur direkt auf / ab / links / rechts bewegen ... aber die Bestien haben anscheinend eine und können sich diagonal bewegen, wenn sie an der Reihe sind.
Die Wahl der Bewegung eines Tieres unter seinen Optionen ist diejenige, die die Entfernung vom Spieler minimiert. Wenn die Abstände gleich sind, wird das Binden bevorzugt mit Links + Oben + Rechts + Unten ausgeführt, aber hier ist die Disambiguierungsmatrix, um es explizit darzustellen ... niedrigste Zahl zum Binden:
1 3 4
2 H 5
6 8 7
Ein Tier schläft nie, aber sie sind glücklicherweise etwas langsamer als der Spieler. Sie bewegen sich alle zwei Runden (geben dem Spieler einen Vorsprung, indem sie ihre Wechsel in der zweiten Runde beginnen). Sie müssen sich bewegen, wenn ein Zug möglich ist, unabhängig davon, ob dies sie weiter vom Spieler entfernt.
Du zerquetschst ein Tier, wenn du einen Zug beweglicher Mauern in eine geschlossene Lücke setzt. Diese einfachen Bestien sind 2 Punkte pro Kopf wert.
Eingang
Ein Paar von Ganzzahlen, die die Größe einer Karte in Spalten und dann in Zeilen angeben.
Zeilenanzahl der Eingabezeilen, jede der Spaltengröße ... enthält entweder eine feste Wand (
#
), eine bewegliche Wand (~
), ein Biest (H
), den Spieler (O
) oder nur ein Leerzeichen.Eingabe, die entweder U, D, L, R ist und einen Zugversuch des Spielers anzeigt ... oder W, um einfach zu warten. Beachten Sie, dass der Versuch, eine bewegliche Wand zu drücken, die blockiert ist, eine legale Eingabe ist und nur zu keiner Aktion führt.
Ausgabe
aHHHH!
wenn die Bestien den Spieler getötet haben ... oder nichts, wenn der Spieler gewonnen hat, ohne dass noch Bestien übrig sindDie Punktzahl
(Hinweis: Zu Debugging- und / oder Unterhaltungszwecken möchten Sie wahrscheinlich den Status bei jedem Schritt ausgeben können. Dies ist jedoch zu lang, um hier einen Beitrag zu verfassen.)
Klarstellungen
Karten werden garantiert von massiven Wänden begrenzt.
Die Reihenfolge, wer sich in einer Runde bewegt, ist entscheidend für das Ergebnis. Also: Der Spieler geht immer zuerst, dann erhalten die Bestien eine Reihenfolge basierend auf ihrer anfänglichen Kartenposition, wenn Sie von links nach rechts oben nach unten über den Bildschirm gefegt haben. (Eine Bestie aus Reihe 1 bewegt sich vor einer Bestie aus Reihe 2, und zwei Bestien in derselben Reihe wäre es diejenige mit der niedrigsten Spaltennummer, die sich vor der anderen bewegen würde.)
Sich diagonal bewegende Bestien können sich in jeden offenen, angrenzenden diagonalen Raum bewegen, unabhängig davon, ob ein Quetschen zwischen den Wänden erforderlich ist.
Ein Spieler kann eine beliebige Anzahl von beweglichen Wänden in eine Reihe schieben, vorausgesetzt, am anderen Ende befindet sich ein Feld oder ein Tier. Wenn Sie jedoch versuchen, eine Reihe von Mauern in ein Tier zu stoßen, das nicht zwischen Mauern eingeklemmt ist, wird das Tier als Mauer behandelt und der Umzug wird nicht zugelassen.
Die Zugentscheidung eines Tieres während eines Zuges basiert auf der Position des Spielers zu Beginn des Zuges. Die gewünschte Optimierung der "Entfernung zum Spieler" erfolgt durch eine "Luftlinie" -Berechnung. Jegliche Annäherung, die das gleiche Ergebnis ergibt, gemessen von der Mitte des Quadrats bis zur Mitte des Spielerquadrats, ist in Ordnung.
Wenn ein Tier nicht in der Lage ist, den ersten Zug in einer Runde zu machen, weil ein Tier mit höherer Priorität seinen Platz eingenommen hat, wird es die nächstbeste Wahl treffen, anstatt an Ort und Stelle zu bleiben (falls ein Zug noch möglich ist).
Musterkoffer
Einfaches Crush
Eingang
5 3
#####
#O~H#
#####
R
Ausgabe
2
Präferenzmatrix -> Tod
Eingang
5 5
#####
#O #
# ~ #
# H#
#####
WWDW
Ausgabe
aHHHH!
0
Preference Matrix -> Win
Eingang
5 5
#####
#O #
# ~ #
# H#
#####
WRD
Ausgabe
2
Warten auf den Schnitter
Eingang
5 5
#####
#O #
# ~ #
# H#
#####
WWW
Ausgabe
aHHHH!
0
Erfolgreiche Niederlage im Wikipedia-Szenario
Eingang
40 23
########################################
#~ ~ ~~ ~ ~ ~~ ~ ~~ ~ ~ ~~ #
#~~ ~ ~~ ~ ~ ~~ ~ #
#~# ~~ ~~~~ ~ ~~~~ ~ ~~~ ~#
# ~ ~ ~ ~~ #~~ ~ #
#~~ ~~~ ~ ~ ~ ~ ~~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~~~ H ~ #~ #
# O~ ~ # ~~~ ~ ~ ~~ ~ ~ ~~ #
# ~ ~H~~ ~~ ~ # ~~ ~ #
# ~~ ~ ~~~ ~~ ~~~~ ~ ~#
#~ ~ ~~~ ~ ~ ~ ~ ~~ ~~#
# ~ # ~ ~~ ~~~ ~ ~ ~ # ~#
#~ ~ ~~ ~ ~ H ~~ ~~ ~ ~ ~~~ #
# ~ ~ ~ ~ ~ ~~~ ~ #
# ~~ ~ ~ ~~ ~ ~ ~ ~ ~ #
# ~~ ~ ~ ~ ~ ~~ #
#~ ~ # ~~~~ ~ ~~~H # ~ #
# ~ ~ ~ ~ ~ ~~ ~ #
# ~ ~ #~ ~ ~~ ~ ~ ~#
# ~~ ~ ~ ~~ ~ ~ #
# ~~~ ~ ~~ ~ ~ ~ ~ #
# ~ ~ ~ ~~ ~ ~ ~ #
########################################
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
Ausgabe
8
Von mir bereitgestellte Karte, bewegt sich und wird von @bobbel ausgegeben, von mir und @Allbeert bestätigt.
Gewinnkriterien
Ich denke, das ist golffähig, also werde ich mit Code-Golfregeln weitermachen, es sei denn, die Leute beschweren sich.
Extra Gutschrift
Spielbare Unicode-Implementierung mit doppelt breiten Zeichen, die dem Bild ähneln!
Antworten:
Perl 6: 741 Zeichen, 758 Bytes
Die Golf-Version ist unten, da es im Grunde Leinen ist. Darüber ist meine vorgolfende Version. Beide sind interaktiv (sie lesen so viele Befehle wie möglich aus der Eingabedatei und verwenden dann STDIN, um Befehle abzurufen). Sie versuchen, die ursprünglichen Zeichen und Farben zu verwenden.
Die Verwendung ist wie folgt
perl6 beast.p6 beast-input
:Die Golfversion:
Frohe Ostern!
quelle
Java, 1,843
Mein erster Versuch, dieses Rätsel mit Java zu lösen. Ich weiß, dass es viele Verbesserungen gibt, die es kürzer machen. Aber am Ende klappt es erstmal.
Um es zu versuchen, müssen Sie eine Klasse erstellen
C
und den Code einfügen.args[0]
(Genau genommena[0]
) ist für die Eingabe. Die Druckmethode der Karte ist nicht enthalten, da sie für die Puzzle-Ausgabe nicht erforderlich ist.Um es auszuführen, versuchen Sie zum Beispiel:
Ausgabe des letzten großen Szenarios eine Runde bevor ein Tier den Spieler frisst:
Ohne dumme Zeilenabstände: http://pastebin.com/raw.php?i=QhpxKcCT
Der Weg des Spielers endet also nach den Zügen
RRDDDRRRWW
, denn beim letztenW
Treffer geht das Tier links nach rechts, um den Spieler zu fressen.Ein weiteres Beispiel für die ursprüngliche große Karte, aber andere Züge:
http://pastebin.com/raw.php?i=nBWjC3PZ
Siehe diese Animation: http://youtu.be/0DIhEhjWd6s
Und das letzte Beispiel mit Originalkarte und verschiedenen Zügen (gemäß den neuen Regeln für Tierbewegungen):
http://pastebin.com/raw.php?i=NNmgzx7U
Siehe auf youtube: http://youtu.be/jXPzL88TU2A
quelle
C -
1004984917Ahh, die Schönheit von C. Dem Geist der anderen Antwort folgend, habe ich auch versucht, meine zu formatieren :)
Ich stelle mir vor, dass es hier und da noch einige Verbesserungen gibt, aber das Schreiben und Golfen hat wirklich Spaß gemacht. Die Zeichenanzahl enthält alle erforderlichen Leerzeichen und neuen Zeilen.
Ich habe dies mit allen Beispielfällen und einigen weiteren getestet, und es scheint ordnungsgemäß zu funktionieren. Wenn jemand eine Situation findet, in der er nicht richtig antwortet, lass es mich bitte wissen.
Die Eingabe erfolgt von stdin und die Ausgabe von stdout. Es erfolgt keine Überprüfung auf Fehleingaben. Und es gibt die Punktzahl zurück, wenn der Spieler gefressen wird oder wenn der Spieler am Leben ist, nachdem alle Bewegungen ausgeführt wurden (auch wenn es noch welche gibt)
H
.Ungolfed-Version:
quelle
RRRUWWWRRRURWWWWRDRRWWRDWWWWD
auf der großen Karte 6 erhalten, während er 8 erhält. Er hat ein Video gemacht , Sie könnten vielleicht jeden Schritt ausdrucken und nach einer Anomalie suchen ...