CJam ( 39 37 bytes)
A,1>e!{5ew{2Mtz}2*::+)-!},3f/Ma*Sf*N*
Demonstração on-line (aviso: pode levar mais de um minuto para ser executado, acionando as solicitações "Interromper este script?" No navegador).
Funciona filtrando todas as grades possíveis usando 5ew
para mapear
[a b c d e f g h i]
para
[[a b c d e]
[b c d e f]
[c d e f g]
[d e f g h]
[e f g h i]]
e, em seguida, descartar o elemento do meio e o elemento do meio um do outro para obter
[[a b d e]
[b c e f]
[d e g h]
[e f h i]]
quais são os quatro quadrados.
Peter Taylor
fonte
fonte
Respostas:
Python 3.5, 135 bytes
Verifica diretamente a soma de cada quadrado, menos o meio. Muito provavelmente ainda jogável pela
itertools
regra de ouro " é desnecessária".fonte
Python2
327271270263260 bytes------------
Isso é ... não tão curto, mas não usa bibliotecas. Isso permuta aleatoriamente um quadrado, verifica se há magia, imprime e grava para evitar duplicatas. Depois de imprimir 376 quadrados mágicos únicos, ele para.
Peguei emprestado o gerador de números aleatórios pseudo da entrada de Keith Randall para o golfe chamado " Construa um gerador de números aleatórios que passe nos testes de Diehard "
De-golfe
fonte
Ruby 133
Abordagem direta de força bruta. Teste aqui .
fonte
J, 83 bytes
Esta é uma função que gera uma string contendo os 376 quadrados robustos. Usa força bruta, gera todas as permutações de 1 a 9, forma cada uma em uma matriz 3x3 e a filtra, verificando se as somas de cada sub-matriz 2x2 são iguais. Conclui em meio segundo.
Uso
fonte