El desafío de hoy es simple: sin tomar ninguna entrada, dar salida a cualquier tablero de sudoku válido.
En caso de que no esté familiarizado con el sudoku, Wikipedia describe cómo debería ser un tablero válido :
El objetivo es llenar una cuadrícula de 9 × 9 con dígitos para que cada columna, cada fila y cada una de las nueve subcuadrículas de 3 × 3 que componen la cuadrícula (también llamadas "cuadros", "bloques" o "regiones") contengan todos los dígitos del 1 al 9.
Ahora aquí está la cosa ... Hay 6.670.903.752.021.072.936.960 diferentes tablas de sudoku válidas . Algunos de ellos pueden ser muy difíciles de comprimir y generar en menos bytes. Otros de ellos pueden ser más fáciles. Parte de este desafío es determinar qué placas serán más comprimibles y podrían emitirse en la menor cantidad de bytes.
Su envío no necesariamente tiene que generar el mismo tablero cada vez. Pero si son posibles múltiples salidas, tendrá que demostrar que cada salida posible es una placa válida.
Puede usar este script (gracias a Magic Octopus Urn) o cualquiera de estas respuestas para verificar si una cuadrícula en particular es una solución válida. Producirá una [1]
para una placa válida y cualquier otra cosa para una placa no válida.
No soy demasiado exigente con respecto al formato en el que genera su respuesta, siempre que sea claramente bidimensional. Por ejemplo, podría generar una matriz de 9x9, nueve matrices de 3x3, una cadena, una matriz de cadenas, una matriz de enteros de 9 dígitos o nueve números de 9 dígitos con un separador. No se permitiría generar 81 dígitos en 1 dimensión. Si desea saber acerca de un formato de salida en particular, no dude en preguntarme en los comentarios.
Como de costumbre, este es el código de golf , ¡así que escriba la respuesta más corta que pueda encontrar en el idioma o idiomas que elija!
fuente
Respuestas:
Pyth,
22141210 bytesGuardado 2 bytes gracias al Sr. Xcoder.
Pruébalo aquí
fuente
m.<S9d%D3 9
..<LS9%D3 9
.Python 2 , 47 bytes
Pruébalo en línea!
fuente
T-SQL,
9689 bytes¡Encontré uno más corto que el trivial!
Extrae cadenas de 9 caracteres que comienzan en diferentes puntos, tal como se define en la tabla en memoria creada por
STRING_SPLIT
(que es compatible con SQL 2016 y versiones posteriores). El0+value
era el camino más corto que podía hacer una conversión implícita al número entero.Salida trivial original (96 bytes):
fuente
Jalea , 7 bytes
Pruébalo en línea!
Y un poco de esto ...
-1 gracias a Jonathan Allan (¿está pensando?)
fuente
Python 2 , 53 bytes
Pruébalo en línea!
Alternativas:
Python 2 , 53 bytes
Pruébalo en línea!
Python 2 , 54 bytes
fuente
Python 3 ,
5855 bytesPruébalo en línea!
Los elementos de la cadena de bytes terminan dando los números
[1, 4, 7, 2, 5, 8, 3, 6, 9]
que se utilizan para permutar las rotaciones de[0..9]
. Se0
eliminal[1:i]
y no hay necesidad de un byte nulo que tome dos caracteres (\0
) para representar en un objeto de bytes.55 bytes
fuente
Jalea ,
98 bytesPruébalo en línea!
fuente
Lote, 84 bytes
Utiliza la salida de @ Mnemonic.
call
se usa para interpolar la variable en la operación de corte (normalmente solo acepta constantes numéricas).fuente
JavaScript (Node.js) , 47 bytes
Salida como una matriz de las filas.
Pruébalo en línea!
Genera esto:
fuente
Perl 6 ,
40 3227 bytes-5 bytes gracias a nwellnhof
Pruébalo en línea!
Bloque de código anónimo que devuelve una matriz de 9x9. Asigna cada fila a una rotación diferente del rango de 1 a 9.
fuente
J , 18 bytes
Pruébalo en línea!
Salida
Cómo funciona
Versión de lujo, 23 bytes
Pruébalo en línea!
Salida:
Cómo funciona
fuente
05AB1E ,
1412 bytes-2 bytes mediante la creación de un puerto de @Mnemonic Pyth respuesta 's .
Pruébalo en línea. (Se agrega el pie de página para imprimirlo. El resultado real es una matriz de 9x9; no dude en quitar el pie de página para verlo).
Explicación:
Solución original de 14 bytes :
Pruébalo en línea. (Se agrega el pie de página para imprimirlo. El resultado real es una matriz de 9x9; no dude en quitar el pie de página para verlo).
Explicación:
Ambas respuestas dan como resultado el Sudoku:
fuente
Octave y Matlab,
504829 bytesPruébalo en línea!
-2 gracias a Johnathon frech
-14 gracias a la sugerencia de adición de Sanchises Broadcast, que también señaló la no compatibilidad.
-5 al notar que el vector se puede escribir en matlab con una cadena de caracteres y transposición.
Era intuitivo, ahora no es así. Utiliza la suma de difusión para distribuir 1: 9 en 9 filas, distribuidas por valores determinados por la cadena de caracteres.
Tablero de Sudoku producido:
fuente
Haskell , 41 bytes
Pruébalo en línea!
fuente
s=
puesto que no es necesarioJava 10,
8275 bytes-7 bytes creando un puerto de una de las respuestas de Python 2 de @TFeld .
Pruébalo en línea.
Explicación:
Muestra el siguiente sudoku (espacio delimitado en lugar de líneas nuevas como se muestra a continuación):
fuente
Python - 81 bytes
Pruébalo en línea
Me gusta tener 81 bytes, pero después de algunas optimizaciones :(
Python 2 -
75 68 5958 bytes-7 bytes gracias a @DLosc
-9 bytes gracias a @Mnemonic
-1 byte gracias a @JoKing
Pruébalo en línea
fuente
r=range(1,10)
pero no pude arruinar la bellezal
Ruby , 34 bytes
Pruébalo en línea!
fuente
R , 54 bytes
Salida:
Pruébalo en línea!
fuente
Muchas gracias a @Shaggy!
JavaScript (Node.js) , 61 bytes
Pruébalo en línea!
fuente
MathGolf ,
1611 bytesPruébalo en línea!
Guardado 5 bytes gracias a JoKing
fuente
Lienzo ,
1311 bytesPruébalo aquí!
fuente
C (clang) , 65 bytes
La función ahora se puede reutilizar
Pruébalo en línea!
fuente
f(); f()
emite la misma placa dos veces, pero no si la segunda llamada no funciona en absoluto.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
Pruébalo en línea!
Primera respuesta en ngn / k, hecha con una gran ayuda del hombre mismo, @ngn.
Cómo:
fuente
Japt,
1110 bytesPruébalo o verifica la salida
Explicación
fuente
Carbón , 14 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Utiliza la salida de @ Mnemonic. Explicación:
fuente