Inspirado pela grande caça aos ovos de Páscoa da API!
Sumário
Sua tarefa é procurar um número inteiro predeterminado no "espaço Collatz" (a ser explicado posteriormente) usando o menor número possível de etapas.
Introdução
Esse desafio é baseado na famosa conjectura de Collatz, da qual esperamos que todos aqui pelo menos tenham ouvido falar. Aqui está um resumo de Imprimir os números Super Collatz .
A sequência Collatz (também chamada de problema 3x + 1) é onde você começa com um número inteiro positivo; neste exemplo, usaremos 10 e aplicaremos este conjunto de etapas:
if n is even: Divide it by 2 if n is odd: Multiply it by 3 and add 1 repeat until n = 1
A distância Collatz C(m,n)
entre os dois números m
e n
, para o objetivo deste desafio, é a distância entre dois números no gráfico Collatz (créditos para @tsh por me falar sobre esse conceito), que é definida da seguinte forma: (usando 21
e 13
como exemplos ):
Anote a sequência Collatz para m
(neste caso 21
):
21, 64, 32, 16, 8, 4, 2, 1
Anote a sequência Collatz para n
(neste caso 13
):
13, 40, 20, 10, 5, 16, 8, 4, 2, 1
Agora conte quantos números aparecem apenas em uma das seqüências. Isso é definido como a distância da Collatz entre m
e n
. Nesse caso 8
, ou seja,
21, 64, 32, 13, 40, 20, 10, 5
Portanto, temos a distância de Collatz entre 21
e 13
como C(21,13)=8
.
C(m,n)
tem as seguintes boas propriedades:
C(m,n)=C(n,m)
C(m,n)=0 iff. m=n
Esperemos que a definição de C(m,n)
agora seja clara. Vamos começar a caçar ovos no espaço Collatz!
No início do jogo, um controlador decide a posição de um ovo de páscoa, que é expresso por sua coordenada unidimensional: Um número inteiro no intervalo [p,q]
(em outras palavras, um número inteiro entre p
e q
, ambas as extremidades, inclusive).
A posição do ovo permanece constante durante todo o jogo. Denotaremos essa coordenada como r
.
Agora você pode fazer um palpite inicial de 0 e ele será gravado pelo controlador. Esta é sua 0ª rodada. Se você tiver tanta sorte que acertou em primeiro lugar (ou seja, 0 = r), o jogo termina e sua pontuação é 0
(quanto menor a pontuação, melhor). Caso contrário, você entra na 1ª rodada e faz um novo palpite a 1 , isso continua até você acertar, ou seja, n = r, e sua pontuação será n
.
Para cada rodada após o dia 0, o controlador fornece um dos seguintes feedbacks para que você possa adivinhar melhor com base nas informações fornecidas. Vamos supor que você esteja atualmente na n
ronda e, portanto, seu palpite é n
- "Você achou!" se n = r, nesse caso o jogo termina e você marca
n
. - "Você está mais perto :)" se C (a n , r) <C (a n-1 , r)
- "Você está circulando em torno do ovo" se C (a n , r) = C (a n-1 , r)
- "Você está mais longe :(" se C (a n , r)> C (a n-1 , r)
Para salvar alguns bytes, chamarei as respostas como "Direita", "Mais próxima", "Mesmo", "Mais longe", na ordem apresentada acima.
Aqui está um exemplo de jogo com p=1,q=15
.
- a 0 = 10
- a 1 = 11, resposta: "Mais próximo"
- a 2 = 13, resposta: "Mais longe"
- a 3 = 4, resposta: "Mais longe"
- a 4 = 3, resposta: "Mais próximo"
- a 5 = 5, resposta: "Mesmo"
- a 6 = 7, resposta: "Certo"
Pontuação: 6
.
Desafio
Crie uma estratégia determinística para jogar p=51, q=562
com a melhor pontuação.
As respostas devem descrever os algoritmos em detalhes. Você pode anexar qualquer código que ajude a elucidar o algoritmo. Como não é um codegolf, você deve escrever um código legível.
As respostas devem incluir a pior pontuação possível para todos os casos possíveis r
e a que tiver a pior pontuação mais baixa vence. No caso de empate, os algoritmos com melhor pontuação média para todos os r
s possíveis (que também devem ser incluídos nas respostas) vencem. Não há mais desempates e podemos ter vários vencedores no final.
Especificações
- Para reiterar,
r
está no intervalo[51,562]
. - Aplicam-se brechas padrão .
Recompensa (adicionada após a primeira resposta ser publicada)
Pessoalmente, posso oferecer uma recompensa a uma resposta em que todas as suposições são feitas dentro do intervalo [51,562]
e ainda tendo uma pontuação mais baixa razoavelmente baixa.