O desafio de hoje é simples: sem receber nenhuma entrada, produza qualquer placa sudoku válida.
Caso você não esteja familiarizado com o sudoku, a Wikipedia descreve como deve ser uma placa válida :
O objetivo é preencher uma grade 9 × 9 com dígitos para que cada coluna, cada linha e cada uma das nove subgrades 3 × 3 que compõem a grade (também chamadas de "caixas", "blocos" ou "regiões") contenham todos os dígitos de 1 a 9.
Agora, aqui está a coisa ... Existem 6.670.903.752.021.072.936.960 diferentes placas de sudoku válidas . Alguns deles podem ser muito difíceis de compactar e produzir em menos bytes. Outros podem ser mais fáceis. Parte desse desafio é descobrir quais placas serão mais compactáveis e poderão ser produzidas no menor número de bytes.
Seu envio não precisa necessariamente gerar o mesmo quadro sempre. Mas se várias saídas forem possíveis, você terá que provar que todas as saídas possíveis são uma placa válida.
Você pode usar esse script (graças ao Magic Octopus Urn) ou qualquer uma dessas respostas para verificar se uma determinada grade é uma solução válida. Ele produzirá a [1]
para uma placa válida e qualquer outra coisa para uma placa inválida.
Não sou muito exigente em qual formato você envia sua resposta, desde que seja claramente bidimensional. Por exemplo, você pode gerar uma matriz 9x9, nove matrizes 3x3, uma sequência, uma matriz de sequências, uma matriz de números inteiros de 9 dígitos ou nove números de 9 dígitos com um separador. Não é permitido emitir 81 dígitos em 1 dimensão. Se você gostaria de saber sobre um formato de saída específico, não hesite em me perguntar nos comentários.
Como de costume, isso é código-golfe , então escreva a resposta mais curta que você puder encontrar no (s) idioma (s) de sua escolha!
fonte
Respostas:
Pitão,
22141210 bytesEconomizou 2 bytes graças ao Sr. Xcoder.
Experimente aqui
fonte
m.<S9d%D3 9
..<LS9%D3 9
.Python 2 , 47 bytes
Experimente online!
fonte
T-SQL,
9689 bytesEncontrado um menor que a saída trivial!
Extrai seqüências de 9 caracteres começando em pontos diferentes, conforme definido pela tabela na memória criada por
STRING_SPLIT
(que é suportada no SQL 2016 e posterior). A0+value
era o caminho mais curto que eu poderia fazer uma conversão implícita de um inteiro.Saída trivial original (96 bytes):
fonte
Geléia , 7 bytes
Experimente online!
E um pouco disso ...
-1 graças a Jonathan Allan (está pensando?)
fonte
Python 2 , 53 bytes
Experimente online!
Alternativas:
Python 2 , 53 bytes
Experimente online!
Python 2 , 54 bytes
fonte
Python 3 ,
5855 bytesExperimente online!
Os elementos da cadeia de bytes acabam dando os números
[1, 4, 7, 2, 5, 8, 3, 6, 9]
que são usados para permitir as rotações de[0..9]
. O0
é removidol[1:i]
e não há necessidade de um byte nulo, que leva dois caracteres (\0
) para representar em um objeto de bytes.55 bytes
fonte
Geléia ,
98 bytesExperimente online!
fonte
Lote, 84 bytes
Usa a saída do @ Mnemonic.
call
é usado para interpolar a variável na operação de fatiar (normalmente ela aceita apenas constantes numéricas).fonte
JavaScript (Node.js) , 47 bytes
Saída como uma matriz das linhas.
Experimente online!
Gera isso:
fonte
Perl 6 ,
40 3227 bytes-5 bytes graças a nwellnhof
Experimente online!
Bloco de código anônimo que retorna uma matriz 9x9. Mapeia cada linha para uma rotação diferente do intervalo de 1 a 9.
fonte
J , 18 bytes
Experimente online!
Saída
Como funciona
Versão extravagante, 23 bytes
Experimente online!
Saída:
Como funciona
fonte
05AB1E ,
1412 bytes-2 bytes através da criação de uma porta de @Mnemonic resposta Pyth 's .
Experimente online. (O rodapé é adicionado para uma impressão bonita. O resultado real é uma matriz 9x9; fique à vontade para remover o rodapé para ver.)
Explicação:
Solução original de 14 bytes :
Experimente online. (O rodapé é adicionado para uma impressão bonita. O resultado real é uma matriz 9x9; fique à vontade para remover o rodapé para ver.)
Explicação:
Ambas as respostas resultam no Sudoku:
fonte
Oitava e Matlab,
504829 bytesExperimente online!
-2 graças a Johnathon frech
-14 graças à sugestão de adição da Sanchises Broadcast, que também apontou a não compatibilidade.
-5 ao perceber que o vetor pode ser escrito no matlab com uma string de caracteres e transposição.
Era intuitivo, agora não é assim. Usa a soma de difusão para espalhar 1: 9 por 9 linhas, espalhada por valores determinados pela sequência de caracteres.
Quadro Sudoku produzido:
fonte
Haskell , 41 bytes
Experimente online!
fonte
s=
, uma vez que não é necessárioJava 10,
8275 bytes-7 bytes, criando uma porta de uma das respostas Python 2 do @TFeld .
Experimente online.
Explicação:
Produz o seguinte sudoku (espaço delimitado em vez de novas linhas, como abaixo):
fonte
Python - 81 bytes
Experimente Online
Eu gosto de ter 81 bytes, mas depois de alguma otimização :(
Python
2-75 68 5958 bytes-7 bytes graças a @DLosc
-9 bytes graças a @Mnemonic
-1 byte graças a @JoKing
Experimente Online
fonte
r=range(1,10)
, mas eu não podia estragar a belezal
Ruby , 34 bytes
Experimente online!
fonte
R , 54 bytes
Saída:
Experimente online!
fonte
Muito obrigado a @Shaggy!
JavaScript (Node.js) , 61 bytes
Experimente online!
fonte
MathGolf ,
1611 bytesExperimente online!
Economizou 5 bytes graças ao JoKing
fonte
Tela ,
1311 bytesExperimente aqui!
fonte
C (clang) , 65 bytes
A função agora pode ser reutilizada
Experimente online!
fonte
f(); f()
emitir a mesma placa duas vezes, mas não se a segunda chamada não funcionar.f(i){for(i=81;i--;)printf("%d%c",(i/9*10/3+i)%9+1,i%9?9:10);}
K (ngn / k) , 16 bytes
Experimente online!
Primeira resposta em ngn / k, feita com uma grande ajuda do próprio homem, @ngn.
Quão:
fonte
Japonês,
1110 bytesExperimente ou verifique a saída
Explicação
fonte
Carvão , 14 bytes
Experimente online! Link é a versão detalhada do código. Usa a saída do @ Mnemonic. Explicação:
fonte