Particione um n X n
quadrado em vários retângulos do lado inteiro não congruentes. a(n)
é a menor diferença possível entre a maior e a menor área.
___________
| |S|_______|
| | | L |
| |_|_______|
| | | |
| |_____|___|
|_|_________| (fig. I)
O maior retângulo ( L
) tem uma área de 2 * 4 = 8
, e o menor retângulo ( S
) tem uma área de 1 * 3 = 3
. Portanto, a diferença é 8 - 3 = 5
.
Dado um número inteiro n>2
, produza a menor diferença possível.
Todos os valores conhecidos da sequência no momento da postagem:
2, 4, 4, 5, 5, 6, 6, 8, 6, 7, 8, 6, 8, 8, 8, 8, 8, 9, 9, 9, 8, 9, 10, 9, 10, 9, 9, 11, 11, 10, 12, 12, 11, 12, 11, 10, 11, 12, 13, 12, 12, 12
Então a(3)=2
, a(4)=4
...
Relacionado - esse desafio relacionado permite soluções não ideais, possui restrições de tempo e não é código-golfe.
Para mais informações, assista a este vídeo da Numberphile
Anterior, 708 bytes
Experimente online!
Obviamente, isso não vai ganhar nenhum prêmio por tamanho, mas na verdade é razoavelmente rápido, considerando que é uma implementação básica de força bruta em uma linguagem esotérica. No intérprete de referência Befunge, ele pode suportar até n = 6 em alguns segundos. Com um compilador, ele pode lidar com n = 8 antes de começar a ficar lento; n = 9 leva alguns minutos e n = 10 é fechado em 2 horas.
Em teoria, o limite superior é n = 11 antes de ficarmos sem memória (ou seja, não há espaço suficiente no campo de jogo para caber em um quadrado maior). No entanto, nesse ponto, o tempo necessário para calcular a solução ideal provavelmente é mais longo do que qualquer um estaria disposto a esperar, mesmo quando compilado.
A melhor maneira de ver como o algoritmo funciona é executando-o em um dos "depuradores visuais" do Befunge. Dessa forma, você pode assistir enquanto tenta ajustar os vários tamanhos de retângulo no espaço disponível. Se você quiser "avançar rapidamente" até o ponto em que ele tenha uma boa correspondência, poderá colocar um ponto de interrupção na
4
sequência$_40p
próxima ao meio da décima linha (9 se for baseado em zero). O valor no topo da pilha nesse ponto é a diferença de área atual.Abaixo está uma animação mostrando os primeiros quadros desse processo para n = 5:
Cada retângulo distinto é representado por uma letra diferente do alfabeto. No entanto, observe que o retângulo final nunca é gravado, de modo que a seção do quadrado fique em branco.
Também escrevi uma versão de depuração do código que gera o layout atual toda vez que ele encontra uma nova melhor correspondência ( Experimente online! ). Para tamanhos menores, a primeira correspondência geralmente é a solução ideal, mas depois de passar n = 6, é provável que você veja vários layouts válidos, mas não ideais, antes de escolher a solução final.
O melhor layout encontrado para n = 10 é assim:
fonte