Chasse aux œufs de Pâques API!
Il y a une API sur http://easter_egg_hunt.andrewfaraday.com qui fournira une chasse aux œufs de Pâques spéciale, juste pour vous ...
Vous pouvez voir les documents de l'API à l'adresse ci-dessus, ou l'essayer à partir d'ici.
L'API:
Tous les appels à cette API sont des requêtes GET, qui renverront une chaîne JSON.
Ces exemples sont dans un jardin 5x5, à titre d'illustration uniquement. L'API fonctionnera réellement sur un jardin 100x100 (des index 1 à 100)
/new_game
En interne, l'API produit un jardin et y cache un œuf.
Dans cet exemple, l'œuf est à 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Appel
/new_game
Retour
{game_id: 'abcde'}
/guess/:game_id/:x/:y
L'API regarde dans le jardin et vous indique à quelle distance vous êtes.
Si vous devinez 2 en travers et 8 en bas, le jardin ressemble à ceci
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Appel
/guess/abcde/2/8
Retour
{x: 'higher', y: 'lower'}
Cela signifie: * Votre x est trop bas (la position d'oeuf est plus élevée) * Votre y est trop haut (La position d'oeuf est plus basse)
Appel correct:
/guess/abcde/4/4
Retour
{x: 'right', y: 'right', turns: 10}
Les règles
Écrivez un programme pour trouver l'œuf de Pâques avec une API.
- Utilisez n'importe quelle langue.
- Essayez d'écrire du code concis mais lisible.
- Votre programme DOIT appeler à chaque fois '/ new_game' et utiliser le game_id retourné dans tous les appels 'guess'. Pas de furtivité dans le jardin!
- Essayez de terminer le jeu avec le plus petit nombre d'appels possible.
- Ce n'est pas du golf de code.
Réponse compétitive?
Pour avoir une chance de gagner, voici ce que nous devons savoir:
- Quel code utilisez-vous (dans votre réponse, ou un lien github s'il est plus grand que celui que vous souhaitez mettre dans une réponse).
- Exécutez votre code 10 fois et enregistrez le game_id et marquez chaque fois.
-game_id- : -score-
par exemple
abbbbbbb : 10
abbbbbdd : 5
(Remarque: les game_ids sont requis pour vérifier un résultat)
Le score sera calculé ainsi:
- Les deux résultats les plus élevés et les plus bas seront ignorés.
- Les 6 scores restants seront additionnés.
- Ceci est votre score.
- Le score le plus bas l'emporte.
Addenda
Tl, dr: L'application est un peu de mauvaise qualité.
L'API a été écrite en l'espace d'environ 90 minutes et est déployée sur un Raspberry Pi 2. Soyez prudent avec mon serveur API. Si vous DDOS cette pauvre chose, vous pourriez la gâter pour tout le monde.
En outre, il est implémenté avec NOIP pour simuler une adresse IP statique, mais parfois, cela abandonne pendant un petit moment. C'est ce que j'obtiens pour l'utilisation d'un hébergement Web à budget nul.
Juste pour rire, voici une simple analyse statistique des jeux joués ... http://easter_egg_hunt.andrewfaraday.com/stats
la source
Réponses:
APL + WIN
Fonctionne en commençant au centre et converge sur l'emplacement en définissant la limite supérieure ou inférieure sur la dernière valeur et en ajoutant ou en soustrayant la moitié de la différence à la limite appropriée à la dernière estimation de chaque itération.
Cette fonction utilise la fonction suivante pour effectuer les appels d'API:
Les résultats pour 10 essais étaient:
la source
Ruby (+ JSON, HTTParty) - Score: 40 (6 + 7 + 7 + 7 + 7 + 6)
C'était un défi amusant. J'ai utilisé la recherche binaire pour trouver l'œuf et j'ai obtenu ces résultats:
Voici le code :
la source
Python 3 (+ requêtes), 39 points
Score 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
La source:
la source
PHP
Utilisation de file_get_contents et json_decode .
Pour autant que je sache , une stratégie optimale nécessite au maximum 7 mouvements, avec une moyenne de 5,8 mouvements sur un axe et une moyenne de 6,4786 mouvements sur deux axes.
Échantillon de 10
But: 6 + 6 + 6 + 6 + 6 + 7 = 37
Golfé, 245 octets
Exemple de sortie
la source
Haskell, Score total
6640(Modifier: Vous avez manqué la partie concernant la suppression des résultats les plus élevés et les plus bas dans la notation)
J'utilise juste la recherche binaire. Je ne sais pas s'il y a moyen d'obtenir mieux que 6,5 par essai en moyenne sans tricher (je suppose que je pourrais simplement continuer à exécuter des séries de 10 jusqu'à ce que j'obtienne un meilleur score, mais où est le plaisir?).
Ah, au fait défi très amusant. L'idée est assez simple pour inclure tout le monde, et je ne m'occupe généralement pas des API Web dans mon travail de jour et je voulais juste une excuse pour essayer
servant
, alors merci pour cela :) Probablement pas si bien si vous '' espérant de la concurrence, mais je pense que des défis comme celui-ci pourraient être utilisés pour rassembler des exemples de code pour les débutants et des choses comme ça.Script exécutable (exécute un jeu et rapporte le gameId et le score):
Résultats
la source
JavaScript, 35 points
Publier du code non golfé ne me convient pas ! :RÉ
Pointage: 5 + 6 + 6 + 6 + 6 + 6 = 35
J'ai eu beaucoup de chance, obtenant ce score de 3 lors de mon dernier test avant de poster!
Essayez-le
Utilisation d'une version quelque peu golfée du code ci-dessus!
Afficher l'extrait de code
la source
Rouille
En fait, Rust a une très belle bibliothèque de désérialisation appelée
serde
qui a beaucoup aidé avec ce programme. L'algorithme lui-même est une recherche binaire assez simple, sauf exécutée deux fois - une fois pourx
et une fois poury
.La macro d'URL a un cas spécifique pour les chaînes sans format car elle peut être effectuée à peu près gratuitement et lorsqu'elle n'est pas formatée, la chaîne sera stockée dans un stockage statique.
Cargo.toml
main.rs
Sommaire
5 + 6 + 7 + 7 + 7 + 7 = 39
la source
Python 2
Golf vesrion - 276 octets
Version plus lisible + commentaires
Résultats
Sommaire
Assez attendu: D
6 + 6 + 6 + 7 + 7 + 7 = 39
la source