Ein bestimmtes Kinderspiel, oft "Huckle Buckle Beanstalk" genannt, wird mit zwei Spielern gespielt. Hier ist eine kurze Beschreibung, wie das Spiel gespielt wird:
- Ein Spieler wird als "Hider" und der andere als "Sucher" bezeichnet.
- Der Suchende verlässt den Raum, während der Versteckte ein kleines, vorgewähltes Objekt versteckt, den "Schatz".
- Der Hider versucht dann, nach dem Objekt zu suchen, während der Suchende ihm hilfreiche Hinweise gibt:
- Wenn sich der Suchende dem Schatz nähert, ruft der Hider "wärmer!"
- Wenn sich der Suchende vom Schatz entfernt, ruft der Hider "cooler"!
- Sobald der Suchende den Schatz gefunden hat, gibt er bekannt, dass er ihn gefunden hat.
Ihre Kinder möchten, dass Sie dieses Spiel mit ihnen spielen. Sie sind jedoch sehr damit beschäftigt, Fragen zu codegolf.SE zu beantworten. Sie beschließen also, ein Programm zu schreiben, um das Spiel mit ihnen zu spielen. Sie möchten jedoch so wenig Zeit wie möglich für die Eingabe verwenden, um das Programm so wenig Zeichen wie möglich zu machen.
Wir können den Raum, in dem das Spiel gespielt wird, als zweidimensionales toroidales quadratisches Feld definieren. Die Koordinate 0,0
ist die untere linke Ecke und die Koordinate 99,99
ist die obere rechte Ecke. Der Schatz ist an einer bestimmten Position platziert , n,m
wo n
und m
beide positive ganze Zahlen zwischen 0 und 99 inklusive.
Ihr Programm wird ein Beitrag von dem Spieler erhält ihre eingebaute Benutzereingabe - Funktion (zB prompt()
, raw_input()
usw.) Wenn Ihre gewählte Sprache nicht ist eine Benutzereingabe - Funktion hat, nehmen Sie eine Eingabe von STDIN statt. Das Spiel funktioniert wie folgt:
- Das Programm "versteckt" den Schatz an einer Position
n,m
. - Das Programm fordert den Suchenden auf, eine anfängliche Suchposition einzugeben. Die Eingabe wird in Form kommen ,
x y
wox
undy
positive ganze Zahlen sind . - Das Programm gibt "korrekt" aus, wenn die anfängliche Suchposition
x,y
gleich der Position des Schatzes istn,m
und endet. Andernfalls: - Das Programm fordert den Suchenden auf, sich zu bewegen. Die Eingabe erfolgt in Form
a b
woa
undb
sind ganze Zahlen , die negativ sein können . Dies stellt den Richtungsvektor dar , in den sich der Sucher bewegt (a
ist die x-Richtung undb
ist die y-Richtung). - Befindet sich die resultierende Position des Suchers am Schatz, gibt das Programm "korrekt" aus und wird beendet. Andernfalls:
- Das Programm gibt "kühler" aus, wenn sich der Suchende vom Schatz entfernt, oder "heißer", wenn er sich dem Schatz nähert.
- Fahren Sie mit Schritt 4 fort.
Die Wörter "wegbewegen" und "wegbewegen" können mehrdeutig sein. Wenn für diese Herausforderung die resultierende Position des Suchenden nach dem Bewegen näher am Schatz liegt als seine Position vor dem Bewegen, bewegen sie sich auf den Schatz zu. Ansonsten ziehen sie weg. (Ja, dies bedeutet, dass das Programm "kühler" ausgeben sollte, wenn die resultierende und die vorherige Position gleich weit entfernt sind.)
Dies ist Code Golf, also gewinnt der kürzeste Code. Stellen Sie Fragen, wenn die Spezifikation nicht klar ist.
Antworten:
Javascript,
275279Kein Gewinner, aber das sollte den Anfang machen. Verwendet einen Trick mit
eval()
und definiert100
als "Konstante", um einige Bytes zu sparen. Ungolfed Version unten.Bearbeiten: Ich wurde Opfer der String + Number-Operationen von Javascript, weshalb
D()
es nicht richtig funktionierte. Ich habe auch einen Fehler behoben, bei dem "heißer" vor "richtig" angezeigt wurde. Dies fügt 4 Bytes hinzu.quelle
n
undm
beide (zu Testzwecken) auf Null gesetzt sind und0 1
als Ausgangsposition eingegeben werden, kehren beide0 -1
und0 1
kälter zurück.colder == cooler
Python 3 - 238 Bytes
Code:
Ungolfed:
Probelauf:
Ich werde nicht sagen, dass meine Strategie, den Schatz zu finden, die Besonderheit schnell ist ...
quelle
Groovy -
278266262Golf:
Ungolfed:
Versuch:
quelle
Groovy - 343 Zeichen
Etwas abgeleitet von LittleChilds Antwort.
Golf:
Ungolfed:
Probelauf, bei dem das Programm das Ziel zur Veranschaulichung ausgibt. Nach meinem Verständnis von OP ist die anfängliche Eingabe absolut und die nachfolgenden Eingaben sind relativ. Auch das Gitter wickelt sich um.
Lauf A:
Lauf B:
quelle
APL, 86 Zeichen
Die Entfernungsberechnung dreht sich nicht um, sondern um Bewegungen.
Ungolfed:
Beispiel:
quelle
Python 2.7, 227
Ich habe die Eingabefunktion und die Idee, das Modulo in der Entfernungsberechnung anzuwenden, anstatt die Standortaktualisierung aus der Antwort von matsjoyce.
Wir brauchen nur Entfernungen für Vergleiche: Sind wir genau am Ort? Sind wir näher als zuvor? Für beide erhalten wir das gleiche Ergebnis beim Vergleich der Quadrate der Entfernungen wie beim Vergleich der Entfernungen. Die Quadratwurzelberechnung, die erforderlich ist, um die tatsächliche Entfernung zu erhalten, ist nicht erforderlich.
Ungolfed:
Probelauf:
quelle
ECMAScript 6, 262
Ungolfed:
quelle
C
193176171Ich bin sicher, es muss Einsparungen bei der Zufallszahlengenerierung geben. Abgesehen davon ist der entscheidende Punkt, dass das Lesen in x & y nur als Versatz von 0 behandelt wird, sodass ich nur einen Scanf benötige. Es bedeutet jedoch, dass ich das Drucken bei der ersten Iteration heißer oder kühler unterdrücken muss.
Änderungen:
Setzen Sie die Position direkt in x & y und verschieben Sie diese dann zurück zu (0,0), anstatt sie in m & n zu setzen, und verwenden Sie x & y, um danach zu suchen.
Mir wurde klar, dass ich "heißer" und "korrekt" druckte, also musste ich hier drei zusätzliche Zeichen hinzufügen.
Der Druck wurde neu geschrieben, um alle Bedingungen zu erfüllen, und ein zusätzlicher Aufruf von put () erspart.
quelle
JavaScript ES6, Neuester Firefox,
177173164 ZeichenOffensichtlich kann dies die APL nicht schlagen. Diese Sprache ist verrückt! Vielleicht nur für Code-Golf-Fragen entwickelt: D: P.
Aber hier geht meine Lösung in ES6 JavaScript. Führen Sie es in der neuesten Firefox Nightly-Version (oder möglicherweise auch in der Release-Version) in der Webkonsole oder im Scratchpad aus.
Ich möchte die ungolfed Version vorerst überspringen. Kommentar, wenn du die ungolfed Version sehen willst :)
EDIT : Viel Golf gespielt! 9 Zeichen reduziert. Immer noch sehen, ob weitere Möglichkeiten des Golfspiels.
quelle
Python 226
Das
import
sieht wirklich lang und dumm aus, aber es spart mir tatsächlich 8 Zeichen.:D
Beispielspiel:
quelle
Sinclair / ZX Spectrum BASIC - 305 Bytes
Da das Spektrum jedes Schlüsselwort als ein Byte speichert, hilft es, die Größe niedrig zu halten. Nachdem es eingegeben wurde, ermitteln Sie die Größe mit
quelle