Esse desafio é baseado em algumas novas descobertas relacionadas à conjectura de Collatz e projetado de alguma forma no espírito de um projeto colaborativo de polímatas . A solução da conjectura completa é considerada extremamente difícil ou impossível pelos especialistas em matemática / teoria dos números, mas essa tarefa mais simples é bastante viável e há muitos exemplos de código de amostra. Na melhor das hipóteses, novas idéias teóricas podem ser obtidas para o problema com base nas entradas / engenhosidade / criatividade dos concorrentes.
A nova descoberta é a seguinte: Imagine uma série contígua de números inteiros [ n1 ... n2 ] digamos m total. Atribua esses números inteiros a uma estrutura de lista. Agora, uma versão generalizada da conjectura de Collatz pode prosseguir da seguinte maneira. Itere um dos m (ou menos) números inteiros na lista a seguir com base em alguns critérios / algoritmo de seleção. Remova esse número inteiro da lista se atingir 1. Claramente, a conjectura de Collatz é equivalente a determinar se esse processo sempre é bem-sucedido em todas as opções de n1, n2 .
Aqui está a torção, uma restrição adicional. Em cada etapa, adicione m atual itera na lista juntos. Em seguida, considere a função f (i) onde i é o número da iteração ef (i) é a soma das iterações atuais na lista. Procure f (i) com uma propriedade "agradável" específica.
O conceito geral / geral é melhor / mais bem documentado aqui (com muitos exemplos em ruby). A conclusão é que existem estratégias / heurísticas / algoritmos bastante simples que levam a uma "diminuição praticamente monotônica" de f (i) e muitos exemplos são dados nessa página. Aqui está um exemplo da saída gráfica (plotada via gnuplot):
Então, aqui está o desafio: use variações nos exemplos existentes ou idéias inteiramente novas para criar um algoritmo de seleção que resulte em f (i) "o mais próximo possível da redução monotônica possível". Os participantes devem incluir um gráfico de f (i) em sua inscrição. Os eleitores podem votar com base nesse gráfico e nas idéias algorítmicas do código.
O concurso será baseado apenas nos parâmetros n1 = 200 / n2 = 400 ! (o mesmo na página de exemplo.) Mas, esperançosamente, os participantes explorarão outras regiões e também tentarão generalizar seus algoritmos.
Observe que uma tática que pode ser muito útil aqui são algoritmos do tipo descida de gradiente ou algoritmos genéticos.
Pode discutir isso ainda mais no chat para os participantes interessados.
Para alguns árbitros, outro desafio de Collatz no codegolf: Collatz Conjecture (por Doorknob )