fundo
Ao expandir e cancelar termos, é fácil mostrar a seguinte identidade:
No entanto, é um problema em aberto se todos os retângulos 1 / n por 1 / (n + 1) podem agrupar o quadrado da unidade.
A tarefa
Seu programa deve usar um número inteiro positivo N como entrada de qualquer maneira conveniente e agrupar todos os retângulos abertos de 1 / n-por-1 / (n + 1) com n entre 1 e N, inclusive no quadrado da unidade, para que não se sobreponham dois .
Para cada retângulo, você deve gerar os seguintes números inteiros em ordem:
- 1 se as arestas horizontais forem mais longas que as arestas verticais, caso contrário, 0
- O numerador e o denominador da coordenada x do canto inferior esquerdo
- O numerador e o denominador da coordenada y do canto inferior esquerdo
Observe que assumimos o quadrado da unidade como sendo (0, 1) x (0, 1)
, com valores x executando da esquerda para a direita e valores y executando de baixo para cima.
A saída final esperada é a concatenação desses números inteiros para cada retângulo em ordem crescente de n, em qualquer formato conveniente (por exemplo, impresso em stdout ou como uma lista retornada de uma função).
Exemplo de entrada e saída
Entrada:
3
Resultado:
0 0 1 0 1 1 1 2 0 1 1 1 2 1 3
Isso analisa da seguinte maneira:
0 (0/1, 0/1) 1 (1/2, 0/1) 1 (1/2, 1/3)
Pontuação
Este é um desafio do código-golfe, portanto a resposta com o menor número de bytes vence. No entanto, seu algoritmo também deve ser razoavelmente eficiente; deve ser capaz de executar para todos N<=100
em um total de cerca de 10 minutos.
Sua solução deve fornecer soluções válidas para todos N<=100
, mas algoritmos comprovadamente completos também são bem-vindos, mesmo que não sejam os mais curtos.