API Polowanie na jajka wielkanocne!
Interfejs API znajduje się na stronie http://easter_egg_hunt.andrewfaraday.com, który zapewni specjalne polowanie na jajka wielkanocne właśnie dla Ciebie ...
Dokumenty interfejsu API można wyświetlić pod powyższym adresem lub wypróbować tutaj.
API:
Wszystkie wywołania tego interfejsu API są żądaniami GET, które zwracają ciąg JSON.
Te przykłady znajdują się w ogrodzie 5x5, wyłącznie w celach ilustracyjnych. Interfejs API będzie działał w ogrodzie 100 x 100 (od indeksów 1 do 100)
/new_game
Wewnętrznie API tworzy ogród i ukrywa w nim jajko.
W tym przykładzie jajko ma 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Połączenie
/new_game
Zwroty
{game_id: 'abcde'}
/guess/:game_id/:x/:y
Interfejs API wygląda w ogrodzie i informuje, jak blisko jesteś.
Jeśli zgadniesz 2 w poprzek i 8 w dół, ogród wygląda tak
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Połączenie
/guess/abcde/2/8
Zwroty
{x: 'higher', y: 'lower'}
Oznacza to: * Twoje x jest za niskie (pozycja jajka jest wyższa) * Twoje y jest za wysokie (Pozycja jajka jest niższa)
Prawidłowe połączenie:
/guess/abcde/4/4
Zwroty
{x: 'right', y: 'right', turns: 10}
Zasady
Napisz program, aby znaleźć pisankę z interfejsem API.
- Użyj dowolnego języka.
- Spróbuj napisać zwięzły, ale czytelny kod.
- Twój program MUSI wywoływać „/ new_game” za każdym razem i używać game_id zwróconego we wszystkich wywołaniach typu „zgadnij”. Nie zaglądaj do ogrodu!
- Staraj się konsekwentnie kończyć grę możliwie najmniejszą liczbą połączeń.
- To nie jest kod golfowy.
Odpowiedź konkurencyjna?
Aby mieć szansę na wygraną, oto, co musimy wiedzieć:
- Jakiego kodu używasz (w swojej odpowiedzi lub linku github, jeśli jest większy niż chcesz w odpowiedzi).
- Uruchom kod 10 razy i za każdym razem zapisz identyfikator gry i zdobywaj punkty.
-game_id- : -score-
na przykład
abbbbbbb : 10
abbbbbdd : 5
(Uwaga: Game_ids są wymagane do weryfikacji wyniku)
Wynik zostanie obliczony w następujący sposób:
- Najwyższe i najniższe dwa wyniki zostaną zignorowane.
- Pozostałe 6 punktów zostanie zsumowanych.
- To jest twój wynik.
- Najniższy wynik wygrywa.
Uzupełnienie
Tl, dr: Aplikacja jest trochę tandetna.
Interfejs API został napisany w ciągu około 90 minut i jest wdrażany na Raspberry Pi 2. Prosimy o delikatność na moim serwerze API. Jeśli DDOS to biedne stworzenie, możesz zepsuć je wszystkim.
Ponadto jest zaimplementowany z NOIP w celu symulacji statycznego adresu IP, ale czasami to zniknie na chwilę. To właśnie otrzymuję za korzystanie z hostingu zero budżetu.
Tylko na chichoty, oto prosta analiza statystyczna gier, w które grałeś ... http://easter_egg_hunt.andrewfaraday.com/stats
źródło
Odpowiedzi:
APL + WIN
Działa, zaczynając od środka i zbiegając się w lokalizacji, ustawiając górną lub dolną granicę na ostatnią wartość i dodając lub odejmując połowę różnicy od odpowiedniego limitu do ostatniej domysły na każdej iteracji.
Ta funkcja wykorzystuje następującą funkcję do wykonywania wywołań API:
Wyniki dla 10 prób były następujące:
źródło
Ruby (+ JSON, HTTParty) - Wynik: 40 (6 + 7 + 7 + 7 + 7 + 6)
To było zabawne wyzwanie. Użyłem wyszukiwania binarnego, aby znaleźć jajko i uzyskałem następujące wyniki:
Oto kod :
źródło
Python 3 (+ wnioski), 39 punktów
Ocena 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
Źródło:
źródło
PHP
Korzystanie z file_get_contents i json_decode .
O ile mi wiadomo , optymalna strategia wymaga co najwyżej 7 ruchów, średnio 5,8 ruchów na jednej osi i średnio 6,4786 ruchów na dwóch osiach.
Próbka 10
Wynik: 6 + 6 + 6 + 6 + 6 + 7 = 37
Gra w golfa, 245 bajtów
Przykładowe dane wyjściowe
źródło
Haskell, łączny wynik
6640(Edycja: pominięto część dotyczącą upuszczania najwyższych i najniższych wyników w punktacji)
Używam tylko wyszukiwania binarnego. Nie jestem pewien, czy jest sposób na uzyskanie średniej lepszej niż 6,5 na próbę bez oszukiwania (przypuszczam, że mógłbym po prostu prowadzić zestawy 10, dopóki nie uzyskam lepszego wyniku, ale gdzie jest w tym zabawa?).
Ach, nawiasem mówiąc, bardzo zabawne wyzwanie. Pomysł jest na tyle prosty, że obejmuje wszystkich, a ja zwykle nie mam do czynienia z internetowymi interfejsami API w mojej codziennej pracy i po prostu szukałem wymówki, by spróbować
servant
, więc dzięki za to :) Prawdopodobnie nie tak świetnie, jeśli „ Mam nadzieję na konkurencję, ale myślę, że takie wyzwania mogą być wykorzystane do zebrania próbek kodu dla początkujących i tym podobne.Skrypt wykonywalny (uruchamia jedną grę i zgłasza identyfikator gry oraz wynik):
Wyniki
źródło
JavaScript, 35 punktów
Publikowanie nieprzypisanego kodu nie jest dla mnie dobre! :RE
Punktacja: 5 + 6 + 6 + 6 + 6 + 6 = 35
Miałem szczęście, ściągając wynik 3 na moim ostatnim teście przed opublikowaniem!
Spróbuj
Korzystanie z nieco golfed wersję powyższego kodu!
Pokaż fragment kodu
źródło
Rdza
Tak się składa, że Rust ma naprawdę ładną bibliotekę deserializacji,
serde
która bardzo pomogła w tym programie. Sam algorytm jest raczej prostym wyszukiwaniem binarnym, z wyjątkiem tego, że uruchomiono go dwukrotnie - raz dlax
i raz dlay
.Makro URL ma specyficzny przypadek braku ciągów formatujących, ponieważ można to zrobić prawie za darmo, a gdy nie sformatować, ciąg zostanie zapisany w pamięci statycznej.
Cargo.toml
main.rs
streszczenie
5 + 6 + 7 + 7 + 7 + 7 = 39
źródło
Python 2
Gra w golfa - 276 bajtów
Bardziej czytelna wersja + komentarze
Wyniki
streszczenie
Nieco oczekiwane: D
6 + 6 + 6 + 7 + 7 + 7 = 39
źródło