API caça aos ovos de Páscoa!
Existe uma API em http://easter_egg_hunt.andrewfaraday.com que fornecerá uma caça aos ovos de Páscoa especial, apenas para você ...
Você pode ver os documentos da API no endereço acima ou experimentá-lo aqui.
A API:
Todas as chamadas para esta API são solicitações GET, que retornarão uma sequência JSON.
Estes exemplos estão em um jardim 5x5, apenas para ilustração. A API realmente funcionará em um jardim de 100x100 (dos índices 1 a 100)
/new_game
Internamente, a API produz um jardim e esconde um ovo nele.
Neste exemplo, o ovo está em 4, 4
+----------+
| |
| |
| |
| |
| E |
| |
| |
| |
| |
| |
+----------+
Ligar
/new_game
Devoluções
{game_id: 'abcde'}
/guess/:game_id/:x/:y
A API olha para o jardim e informa a sua proximidade.
Se você adivinha 2 e 8 abaixo, o jardim fica assim
+----------+
| |
| |
| |
| |
| E |
| |
| |
| g |
| |
| |
+----------+
Ligar
/guess/abcde/2/8
Devoluções
{x: 'higher', y: 'lower'}
Isso significa: * Seu x está muito baixo (a posição do ovo é mais alta) * Seu y está muito alto (a posição do ovo é mais baixa)
Chamada correta:
/guess/abcde/4/4
Devoluções
{x: 'right', y: 'right', turns: 10}
As regras
Escreva um programa para encontrar o ovo da páscoa com uma API.
- Use qualquer idioma.
- Tente escrever um código conciso, mas legível.
- Seu programa DEVE chamar '/ new_game' toda vez e usar o game_id retornado em todas as chamadas de 'palpite'. Não espreitar no jardim!
- Tente terminar o jogo de forma consistente com o menor número de chamadas possível.
- Este não é um código de golfe.
Resposta competitiva?
Para ter uma chance de ganhar, aqui está o que precisamos saber:
- Qual código você está usando (na sua resposta ou no link do github, se for maior do que você gostaria de colocar em uma resposta).
- Execute seu código 10 vezes, registre o game_id e marque cada vez.
-game_id- : -score-
por exemplo
abbbbbbb : 10
abbbbbdd : 5
(Nota: os game_ids são necessários para verificar um resultado)
A pontuação será calculada assim:
- Os dois resultados mais altos e mais baixos serão ignorados.
- As 6 pontuações restantes serão somadas.
- Esta é a sua pontuação.
- Menor pontuação ganha.
Termo aditivo
Tl, dr: o aplicativo é um pouco de má qualidade.
A API foi escrita no espaço de aproximadamente 90 minutos e é implantada em um Raspberry Pi 2. Por favor, seja cuidadoso com o meu servidor de API. Se você DDOS esta coisa pobre, você pode estragar tudo para todos.
Além disso, é implementado com o NOIP para simular um endereço IP estático, mas às vezes isso desaparece por um tempo. É o que recebo por usar para hospedagem na web com orçamento zero.
Apenas para rir, aqui está uma análise estatística simples dos jogos jogados ... http://easter_egg_hunt.andrewfaraday.com/stats
fonte
Respostas:
APL + WIN
Funciona iniciando no centro e convergindo para o local, definindo o limite superior ou inferior como o último valor e adicionando ou subtraindo metade da diferença ao limite apropriado à última tentativa em cada iteração.
Esta função usa a seguinte função para fazer chamadas de API:
Os resultados para 10 tentativas foram:
fonte
Ruby (+ JSON, HTTParty) - Pontuação: 40 (6 + 7 + 7 + 7 + 7 + 6)
Este foi um desafio divertido. Usei a pesquisa binária para encontrar o ovo e obtive estes resultados:
Aqui está o código :
fonte
Python 3 (+ pedidos), 39 pontos
Pontuação 39 (7 + 7 + 7 + 6 + 6 + 6 - 7-7-6-6)
Fonte:
fonte
PHP
Usando file_get_contents e json_decode .
Até onde eu sei , uma estratégia ideal precisa de no máximo 7 movimentos, com uma média de 5,8 movimentos em um eixo e uma média de 6,4786 movimentos em dois eixos.
Amostra de 10
Pontuação: 6 + 6 + 6 + 6 + 6 + 7 = 37
Golfe, 245 bytes
Saída de amostra
fonte
Haskell, pontuação total
6640(Editar: perdeu a parte sobre a queda dos resultados mais altos e mais baixos na pontuação)
Estou apenas usando a pesquisa binária. Não tenho certeza se existe uma maneira de melhorar em média 6,5 por tentativa sem trapacear (suponho que eu poderia continuar executando conjuntos de 10 até obter uma pontuação melhor, mas qual é a graça nisso?).
Ah, a propósito, desafio muito divertido. A idéia é simples o suficiente para ser inclusiva de todos, e eu normalmente não lido com APIs da web em meu trabalho diário e estava apenas procurando uma desculpa para experimentar
servant
, então obrigado por isso :) Provavelmente não é tão bom se você ' espero competir, mas acho que desafios como esse podem ser usados para coletar exemplos de código para iniciantes e coisas assim.Script executável (executa um jogo e relata o gameId e score):
Resultados
fonte
JavaScript, 35 pontos
A publicação de código não-protegido não fica bem comigo! : D
Pontuação: 5 + 6 + 6 + 6 + 6 + 6 = 35
Tive muita sorte, conseguindo 3 pontos no meu último teste antes de postar!
Tente
Usando um pouco versão golfed do código acima!
Mostrar snippet de código
fonte
Ferrugem
Por acaso, o Rust tem uma biblioteca de desserialização muito boa chamada,
serde
que ajudou muito nesse programa. O algoritmo em si é uma pesquisa binária bastante simples, exceto executada duas vezes - umax
vez por uma e outra pory
.A macro de URL possui um caso específico para nenhuma sequência de formatação, porque isso pode ser feito gratuitamente, e quando não for formatada, a sequência será armazenada no armazenamento estático.
Cargo.toml
main.rs
Sumário
5 + 6 + 7 + 7 + 7 + 7 = 39
fonte
Python 2
Versão Golfed - 276 bytes
Versão mais legível + comentários
Resultados
Sumário
Um pouco esperado: D
6 + 6 + 6 + 7 + 7 + 7 = 39
fonte