API Ostereiersuche!
Es gibt eine API unter http://easter_egg_hunt.andrewfaraday.com, die speziell für Sie eine Ostereiersuche anbietet ...
Sie können die API-Dokumente unter der oben angegebenen Adresse anzeigen oder von hier aus versuchen.
Die API:
Alle Aufrufe dieser API sind GET-Anforderungen, die eine JSON-Zeichenfolge zurückgeben.
Diese Beispiele dienen nur zur Veranschaulichung in einem 5x5-Garten. Die API wird tatsächlich in einem 100x100-Garten ausgeführt (von Index 1 bis 100).
/new_game
Intern erzeugt die API einen Garten und versteckt darin ein Ei.
In diesem Beispiel ist das Ei bei 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Anruf
/new_game
Kehrt zurück
{game_id: 'abcde'}
/guess/:game_id/:x/:y
Die API schaut in den Garten und sagt Ihnen, wie nah Sie sind.
Wenn Sie 2 runter und 8 runter raten, sieht der Garten so aus
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Anruf
/guess/abcde/2/8
Kehrt zurück
{x: 'higher', y: 'lower'}
Dies bedeutet: * Dein x ist zu niedrig (die Ei-Position ist höher) * Dein y ist zu hoch (die Ei-Position ist niedriger)
Richtiger Anruf:
/guess/abcde/4/4
Kehrt zurück
{x: 'right', y: 'right', turns: 10}
Die Regeln
Schreiben Sie ein Programm, um das Osterei mit einer API zu finden.
- Verwenden Sie eine beliebige Sprache.
- Versuchen Sie, prägnanten, aber lesbaren Code zu schreiben.
- Ihr Programm MUSS jedes Mal '/ new_game' aufrufen und die game_id verwenden, die bei allen 'rate'-Aufrufen zurückgegeben wird. Kein Blick in den Garten!
- Versuchen Sie, das Spiel mit der geringstmöglichen Anzahl von Anrufen zu beenden.
- Dies ist kein Code Golf.
Kompetitive Antwort?
Um die Chance auf einen Gewinn zu haben, müssen wir Folgendes wissen:
- Welchen Code verwendest du? (In deiner Antwort oder einem Github-Link, wenn er größer ist, als du gerne eine Antwort eingibst.)
- Führen Sie Ihren Code zehnmal aus, notieren Sie sich die game_id und punkten Sie jedes Mal.
-game_id- : -score-
z.B
abbbbbbb : 10
Abbbbbdd : 5
(Hinweis: Die game_ids sind erforderlich, um ein Ergebnis zu überprüfen.)
Die Punktzahl wird folgendermaßen berechnet:
- Die beiden höchsten und niedrigsten Ergebnisse werden ignoriert.
- Die restlichen 6 Punkte werden addiert.
- Das ist deine Punktzahl.
- Die niedrigste Punktzahl gewinnt.
Nachtrag
Tl, dr: Die App ist ein bisschen mies.
Die API wurde in ungefähr 90 Minuten geschrieben und ist auf einem Raspberry Pi 2 implementiert. Bitte gehen Sie schonend mit meinem API-Server um. Wenn Sie dieses arme Ding DDOS, könnten Sie es für alle verderben.
Es ist auch mit NOIP implementiert, um eine statische IP-Adresse zu simulieren, aber manchmal fällt dies für eine Weile aus. Das ist es, was ich für das Null-Budget-Webhosting bekomme.
Nur zum Kichern, hier ist eine einfache statistische Analyse der gespielten Spiele ... http://easter_egg_hunt.andrewfaraday.com/stats
quelle
Antworten:
APL + WIN
Beginnt in der Mitte und konvergiert an der Position, indem die obere oder untere Grenze auf den letzten Wert gesetzt und die Hälfte der Differenz zur entsprechenden Grenze zur letzten Schätzung jeder Iteration addiert oder subtrahiert wird.
Diese Funktion verwendet die folgende Funktion, um die API-Aufrufe auszuführen:
Die Ergebnisse für 10 Versuche waren:
quelle
Ruby (+ JSON, HTTParty) - Ergebnis: 40 (6 + 7 + 7 + 7 + 7 + 6)
Das war eine lustige Herausforderung. Ich habe die binäre Suche verwendet, um das Ei zu finden und habe die folgenden Ergebnisse erhalten:
Hier ist der Code :
quelle
Python 3 (+ Anfragen), 39 Punkte
Ergebnis 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
Quelle:
quelle
PHP
Verwendung von file_get_contents und json_decode .
Soweit ich das beurteilen kann , werden für eine optimale Strategie höchstens 7 Züge benötigt, mit einem Durchschnitt von 5,8 Zügen auf einer Achse und einem Durchschnitt von 6,4786 Zügen auf zwei Achsen.
Probe von 10
Ergebnis: 6 + 6 + 6 + 6 + 6 + 7 = 37
Golf, 245 Bytes
Beispielausgabe
quelle
Haskell, Gesamtpunktzahl
6640(Bearbeiten: Verpasste den Teil über das Fallenlassen der höchsten und niedrigsten Ergebnisse in der Wertung)
Ich benutze nur die binäre Suche. Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, durchschnittlich besser als 6,5 pro Versuch zu werden, ohne zu schummeln.
Ah, übrigens sehr lustige Herausforderung. Die Idee ist einfach genug, um alle einzubeziehen, und ich beschäftige mich in meiner täglichen Arbeit normalerweise nicht mit Web-APIs, und ich wollte nur eine Ausrede ausprobieren
servant
, also danke dafür :) Wahrscheinlich nicht so toll, wenn Sie Ich hoffe auf Wettbewerb, aber ich denke, Herausforderungen wie diese könnten genutzt werden, um Codebeispiele für Anfänger und ähnliche Dinge zu sammeln.Ausführbares Skript (führt ein Spiel aus und meldet die Spiel-ID und das Ergebnis):
Ergebnisse
quelle
JavaScript, 35 Punkte
Posting ungolfed Code passt nicht gut zu mir! : D
Wertung: 5 + 6 + 6 + 6 + 6 + 6 = 35
Ich hatte sehr viel Glück, als ich bei meinem letzten Test vor dem Posten diese Punktzahl von 3 erreichte!
Versuch es
Verwenden Sie eine etwas verspielte Version des obigen Codes!
Code-Snippet anzeigen
quelle
Rost
Zufälligerweise hat Rust eine wirklich nette Deserialisierungsbibliothek,
serde
die bei diesem Programm sehr geholfen hat. Der Algorithmus selbst ist eine ziemlich einfache binäre Suche, abgesehen davon, dass er zweimal ausgeführt wurde - einmal fürx
und einmal füry
.Das URL-Makro hat einen speziellen Fall für keine Formatierungszeichenfolgen, da dies praktisch kostenlos durchgeführt werden kann und wenn die Zeichenfolge nicht formatiert wird, sie im statischen Speicher gespeichert wird.
Cargo.toml
main.rs
Zusammenfassung
5 + 6 + 7 + 7 + 7 + 7 = 39
quelle
Python 2
Golf Vesrion - 276 Bytes
Mehr lesbare Version + Kommentare
Ergebnisse
Zusammenfassung
Etwas erwartet: D
6 + 6 + 6 + 7 + 7 + 7 = 39
quelle