¡Búsqueda de huevos de Pascua API!
Hay una API en http://easter_egg_hunt.andrewfaraday.com que proporcionará una búsqueda especial de huevos de Pascua, solo para ti ...
Puede ver los documentos de la API en la dirección anterior, o probarlo desde aquí.
La API:
Todas las llamadas a esta API son solicitudes GET, que devolverán una cadena JSON.
Estos ejemplos se encuentran en un jardín de 5x5, solo a modo de ilustración. La API realmente operará en un jardín de 100x100 (de los índices 1 a 100)
/new_game
Internamente, la API produce un jardín y esconde un huevo en él.
En este ejemplo, el huevo está a las 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Llamada
/new_game
Devoluciones
{game_id: 'abcde'}
/guess/:game_id/:x/:y
La API mira en el jardín y te dice qué tan cerca estás.
Si adivina 2 de ancho y 8 de abajo, el jardín se ve así
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Llamada
/guess/abcde/2/8
Devoluciones
{x: 'higher', y: 'lower'}
Esto significa: * Su x es demasiado baja (la posición del huevo es más alta) * Su y es demasiado alta (La posición del huevo es más baja)
Llamada correcta:
/guess/abcde/4/4
Devoluciones
{x: 'right', y: 'right', turns: 10}
Las normas
Escribe un programa para encontrar el huevo de Pascua con una API.
- Usa cualquier idioma.
- Intenta escribir código conciso pero legible.
- Su programa DEBE llamar a '/ new_game' cada vez, y usar el game_id devuelto en todas las llamadas 'adivinar'. No echar un vistazo al jardín!
- Intenta terminar el juego constantemente con el menor número de llamadas posible.
- Este no es el código de golf.
Respuesta competitiva?
Para tener la oportunidad de ganar, esto es lo que necesitamos saber:
- ¿Qué código estás usando (en tu respuesta, o un enlace de github si es más grande de lo que te gustaría poner en una respuesta)?
- Ejecute su código 10 veces y registre el game_id y anote cada vez.
-game_id- : -score-
p.ej
abbbbbbb : 10
abbbbbdd : 5
(Nota: los game_ids son necesarios para verificar un resultado)
La puntuación se calculará así:
- Los dos resultados más altos y más bajos serán ignorados.
- Las 6 puntuaciones restantes se sumarán.
- Este es tu puntaje.
- La puntuación más baja gana.
Apéndice
Tl, dr: La aplicación es un poco mala.
La API se escribió en el espacio de unos 90 minutos y se implementa en una Raspberry Pi 2. Por favor, sea amable con mi servidor API. Si DDOS esta pobre cosa, podría estropearlo para todos.
Además, se implementa con NOIP para simular una dirección IP estática, pero a veces esto desaparecerá por un tiempo. Eso es lo que obtengo por usar para alojamiento web de presupuesto cero.
Solo por risas, aquí hay un análisis estadístico simple de los juegos jugados ... http://easter_egg_hunt.andrewfaraday.com/stats
fuente
Respuestas:
APL + WIN
Funciona comenzando en el centro y converge en la ubicación al establecer el límite superior o inferior en el último valor y sumar o restar la mitad de la diferencia al límite apropiado para la última suposición en cada iteración.
Esta función utiliza la siguiente función para hacer las llamadas a la API:
Los resultados para 10 intentos fueron:
fuente
Ruby (+ JSON, HTTParty) - Puntuación: 40 (6 + 7 + 7 + 7 + 7 + 6)
Este fue un desafío divertido. Utilicé la búsqueda binaria para encontrar el huevo y obtuve estos resultados:
Aquí está el código :
fuente
Python 3 (+ solicitudes), 39 puntos
Puntuación 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
Fuente:
fuente
PHP
Usando file_get_contents y json_decode .
Hasta donde puedo decir , una estrategia óptima necesita como máximo 7 movimientos, con un promedio de 5.8 movimientos en un eje y un promedio de 6.4786 movimientos en dos ejes.
Muestra de 10
Puntuación: 6 + 6 + 6 + 6 + 6 + 7 = 37
Golfizado, 245 bytes
Salida de muestra
fuente
Haskell, puntaje total
6640(Editar: se perdió la parte sobre la caída de los resultados más altos y más bajos en la puntuación)
Solo estoy usando la búsqueda binaria. No estoy seguro de si hay una forma de obtener un promedio de 6.5 por intento sin hacer trampa (supongo que podría seguir corriendo series de 10 hasta obtener una mejor puntuación, pero ¿dónde está la diversión en eso?).
Ah, por cierto desafío muy divertido. La idea es lo suficientemente simple como para incluir a todos, y generalmente no trato con API web en mi trabajo diario y solo estaba ansioso por una excusa para probar
servant
, así que gracias por eso :) Probablemente no sea tan bueno si usted ' Espero la competencia, pero creo que desafíos como este podrían usarse para reunir ejemplos de código para principiantes y cosas así.Script ejecutable (ejecuta un juego e informa el ID del juego y la puntuación):
Resultados
fuente
JavaScript, 35 puntos
¡Publicar código no golfizado no me sienta bien! :RE
Puntuación: 5 + 6 + 6 + 6 + 6 + 6 = 35
¡Tuve mucha suerte, sacando esa puntuación de 3 en mi última prueba antes de publicar!
Intentalo
¡Usando una versión algo golfizada del código anterior!
Mostrar fragmento de código
fuente
Oxido
Resulta que Rust tiene una biblioteca de deserialización realmente agradable llamada
serde
que ayudó mucho con este programa. El algoritmo en sí mismo es una búsqueda binaria bastante sencilla, excepto que se ejecutó dos veces, una parax
y otra paray
.La macro URL tiene un caso específico para cadenas sin formato porque se puede hacer de forma bastante gratuita, y cuando no se formatea la cadena se almacena en almacenamiento estático.
Cargo.toml
main.rs
Resumen
5 + 6 + 7 + 7 + 7 + 7 = 39
fuente
Python 2
Vesrion Golfed - 276 bytes
Versión más legible + comentarios
Resultados
Resumen
Algo esperado: D
6 + 6 + 6 + 7 + 7 + 7 = 39
fuente