Este es el código de golf. Para este desafío, aceptaré un método (no necesita un programa completo), pero la firma del método no cuenta para el recuento de bytes y quiero ver la firma completa (no una lamdba). La entrada para el método es una matriz entera con 81 elementos. El valor de salida / retorno del método es una cadena que representa la matriz como un tablero ascii sudoku.
Si está utilizando un lenguaje esotérico o algo que absolutamente no tiene métodos, puede adaptarse, pero si el lenguaje lo admite, quiero ver que algo podría estar conectado a un programa no real "real", incluso si el Es un dolor trabajar con el cuerpo del método. El requisito no está destinado a bloquear lenguajes como Jelly o 05AB1E, sino a facilitar que lenguajes como Java construyan algo que tenga sentido para esa plataforma.
Para la entrada, los valores enteros 1-9 deben tener significados obvios. Un 0 siempre debe interpretarse como una celda en blanco. También puede interpretar cualquier otra cosa fuera del rango 1-9 como una celda en blanco, pero esto no es obligatorio. La posición desde la matriz hasta el rompecabezas comienza en la parte superior izquierda y llena cada fila de izquierda a derecha antes de pasar a la siguiente fila.
Para los cuadros, quiero líneas dobles alrededor del exterior y entre cada región 3x3, y líneas simples entre otras celdas. Estos deben dibujarse con caracteres de dibujo lineal (si su formato de E / S representa cadenas como una secuencia de bytes en lugar de una secuencia de caracteres, debe representarlos en una codificación conocida como UTF-8 o página de códigos 347).
Para este desafío, NO te pido que generes el rompecabezas sudoku. Esa es la entrada para la función. NO te estoy pidiendo que resuelvas el rompecabezas. Solo le pido que produzca una cadena para "dibujar" lo que se le da (en la menor cantidad de bytes posible).
Entrada de ejemplo:
Valores para la matriz:
{ 8, 5, 0, 0, 0, 2, 4, 0, 0, 7, 2, 0, 0, 0, 0, 0, 0, 9, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 2, 3, 0, 5, 0, 0, 0, 9, 0, 0 ,0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 7, 0, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 4, 0}
Los valores pueden usar cualquier mecanismo que sea natural para su idioma: int [], ArrayList, secuencia, tupla, cadena de dígitos, lo que sea, siempre que tenga un valor en la entrada para cada celda (no se asignan solo las celdas pobladas a las posiciones ) Recuerde que la entrada se proporciona ... no es parte de su recuento de bytes. Pero la entrada puede representar cualquier rompecabezas de sudoku, y el rompecabezas puede no tener una solución válida . Asumes que el rompecabezas es imprimible. No obtendrá algo con 82 elementos, por ejemplo.
También puede asumir una fuente razonable de ancho fijo.
Salida correspondiente:
╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗ ║ 8 │ 5 │ ║ │ │ 2 ║ 4 │ │ ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ 7 │ 2 │ ║ │ │ ║ │ │ 9 ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ │ │ 4 ║ │ │ ║ │ │ ║ ╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣ ║ │ │ ║ 1 │ │ 7 ║ │ │ 2 ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ 3 │ │ 5 ║ │ │ ║ 9 │ │ ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ │ 4 │ ║ │ │ ║ │ │ ║ ╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣ ║ │ │ ║ │ 8 │ ║ │ 7 │ ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ │ 1 │ 7 ║ │ │ ║ │ │ ║ ╟───┼───┼───╫───┼───┼───╫───┼───┼───╢ ║ │ │ ║ │ 3 │ 6 ║ │ 4 │ ║ ╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝
Respuestas:
Python 3, 232 bytes
Thanks to those who helped to golf this down.
Encryption within encryption...
Try it online!
To be golfed.
fuente
i=["╔"+(g+"╦")*2+g+"╗"]+d+2*(["╠"+(e+"╬")*2+e+"╣"]+d)+["╚"+(h+"╩")*2+h+"╝"]
saves 4 bytesC (gcc),
398395291 bytesSaved 3 bytes by working through the string reversed, and 104 (!) bytes thanks to Leaky Nun.
Try it online!
C (gcc), 395 bytes
I'll keep this here so its more evident as to how the program works.
Try it online!
Working with unicode in C is... costly. Takes input as an
int*
as shown in the link and in the specification.I'm going to see if I can save bytes using some number magic instead of hardcoding the string.
fuente
PHP, 297 bytes
Try it online!
Expanded
used functions for both versions
vsprintf , strtr , str_pad , array_slice , array_chunk
PHP, 313 bytes
Try it online!
fuente
T-SQL,
445437 bytes (en 381 caracteres)La entrada es a través de una cadena de dígitos almacenados en la columna a de la tabla t existente , según los métodos aprobados .
Formato y explicación :
En la línea superior del bucle, obtengo los siguientes 9 dígitos de la cadena de entrada de la columna a de la tabla preexistente t .
Convierto esa cadena de dígitos en un número entero, y uso la
FORMAT
función .Net para mostrarlos usando una plantilla de texto personalizada'║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║ 0 │ 0 │ 0 ║P'
.Después de eso, solo agrego la línea divisoria adecuada y hago algunos reemplazos para guardar bytes antes de la salida.
La salida se muestra en el panel de resultados:
Anteriormente tuve algunos reemplazos adicionales para algunos de los otros personajes de dibujo, pero finalmente no me ahorraron bytes.
EDITAR 1 : guardado 8 bytes comenzando
@r
en cero en lugar de 1, y eliminando algunos espacios innecesarios.fuente
Retina ,
196167 bytesPruébalo en línea! Toma la entrada como una cadena de longitud 81. Explicación: Debido a que los caracteres de dibujo de recuadro cuestan tres bytes, los puntos de código Unicode
═-╬
se representan en el código utilizando=|#A-Z
(no todos los caracteres se utilizan, pero si se ajustan a rangos se ahorran bytes). Además, las filas se comprimen mediante#
signos: sea#bcd#e
expande aabbbcbbbcbbbdbbbcbbbcbbbdbbbcbbbcbbbe
.Inserciones
╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣
para cada tercera fila, más un║
al comienzo de cada grupo de 27.Inserta
╟───┼───┼───╫───┼───┼───╫───┼───┼───╢
entre las otras filas, más║
s al comienzo de esas filas.Inserta
║
s después de cada tres dígitos. Todos los║
s ahora se han insertado.Inserta
|
s entre todos los pares de dígitos restantes. (Este es el carácter de dibujo de caja real en lugar de una tubería. Desafortunadamente, los caracteres─│┼
tienen códigos demasiado separados entre sí y los caracteres de caja doble para que valga la pena al usar marcadores de posición).Cambia la primera fila a
╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗
(esto ahorra 1 byte al no agregar la primera fila en primer lugar).Agrega
╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝
después de la última fila.Se expande
a#bcd#e
, primero aa#bc#d#bc#d#bc#e
, luego aa#b#c#b#c#b#d#b#c#b#c#b#d#b#c#b#c#b#e
.Cambios
#b#
abbb
. Esto completa la descompresión.Elimina todas las entradas cero y reemplaza los marcadores de posición con los caracteres de dibujo del cuadro.
fuente
0
por espacio.SOGL V0.12 ,
174172164160158 bytesExplicación demasiado larga:
El programa que se ejecuta:
donde todos menos la última línea son justos
in the entire program replace occurrences of the last char of this line with the rest of this line
. Esta es la razón por la que fue posible hacer que la mitad de los caracteres solo fueran ascii aleatorios (pero conseguir que los espacios, guiones y comillas se usen útilmente tomó un tiempo para darse cuenta)Pruébalo aquí!
El código de intérprete en línea es más correcto porque las pestañas no funcionan con SE
-8 bytes: reemplazo de fuerza bruta comprimiendo toda la placa, luego reemplazando caracteres extraños (a la página de códigos) con sus puntos de código. Hacer esto tomó una hora menos que el programa anterior ...
-4 bytes: comprimiendo la cadena comprimida ...
-2 bytes: usando una variable + cadena en lugar de una matriz
fuente
JavaScript (ES6), 246 bytes / 198 caracteres
La entrada es una matriz de enteros. Terminé usando las mismas dos funciones de ayuda que la respuesta Python de Leaky Nun , por lo que el crédito va allí.
Si
function
es necesario, 263 bytes / 215 caracteresFragmento de prueba
Se admite cualquier entrada de 81 números (
1234
,1, 2, 3, 4
.[1 2 3 4]
, Etc.). Mejor visto como página completa.fuente
Lote, 332 bytes.
Necesita que la consola esté en CP437. Si ese no es su valor predeterminado, puede cambiarlo usando el
CHCP 437
comando si su consola está configurada con fuentes TrueType. (Solo funcionará con fuentes ráster si CP437 ya es su página de códigos predeterminada). Así es como se ve el código en CP437:fuente
Con ideas cosechadas de otras respuestas:
C # (.NET Core) , 401 bytes, 349 caracteres
Sin golf:
Pruébalo en línea!
Mi respuesta:
C # (.NET Core) ,
509430418bytes, 328 caracteresSin golf:
Pruébalo en línea!
fuente
Chip , 3645 bytes
... eso no es un error tipográfico ...
Pruébalo en línea! , algo así como. La versión TIO contiene un límite de aproximadamente un tercio del camino (el
t
después del 4to.oooooo
), por lo que debe terminar en menos de 60 segundos. La versión completa tarda aproximadamente 1m25s en mi máquina, y TIO parece casi la mitad de rápido. Esto también significa que el TIO solo muestra las primeras 7 líneas de salida.Mi primer borrador pesaba unos 19758 bytes masivos, y me llevó unos 8m30s para ejecutar. La solución final, antes del golf, fue un veloz 5980 bytes, con solo 2m07s.
Entonces, ¿cómo funciona?
Esto toma una cadena de 82 bytes, 81 dígitos, seguida de un terminador.
\0
o\n
incluso otro número servirá. (Esta implementación en realidad solo mira los primeros 81, pero requiere al menos uno más, ya que Chip terminará si ha agotado su entrada. Si esto es inaceptable,-z
se puede usar el indicador , que efectivamente agrega un número infinito de\0
bytes al final de la entrada.) El código TIO acortado en realidad no llega a los 81 bytes, por lo que el punto es discutible allí.La forma en que he implementado esto, solo mira los 4 bits bajos de la entrada, por lo que cualquier cosa, realmente, puede ser un 'rompecabezas' de sudoku, desde datos binarios en bruto, hasta los trabajos menos conocidos de Shakespeare. Cualquier carácter cuyos 4 bits bajos sean todos cero aparecerá como un espacio (un caso especial), en el que se asignarán todos los demás caracteres
123456789:;<=>?
. (Entonces, los últimos pocos no son dígitos, pero tampoco es 10 un número válido en sudoku normal).Para los caracteres de dibujo de caja, produce UTF-8, que equivale a 3 bytes cada uno.
¿Qué pasa con la implementación real?
Chip es un lenguaje 3D inspirado en los circuitos integrados. Tiene cables, puertas lógicas y celdas de memoria. La mayoría de las cosas se hacen en planos 2D, pero estos planos pueden apilarse uno encima del otro. Así es como se construye este programa.
Las líneas que comienzan con
=
son los separadores de capas. Luego, las capas se apilan, con los lados superior e izquierdo alineados. loso
sirven como pines, permitiendo que las señales pasen de una capa a otra.Cada capa aquí tiene un propósito, podría pensar en ellas como funciones. La primera capa controla todo; 'llama' a cada una de las otras capas a su vez. Aquí hay un patrón repetitivo de izquierda a derecha. Ese patrón realiza un seguimiento de cuál de las 19 líneas de salida que estamos imprimiendo actualmente.
La segunda capa es bastante pequeña y tiene un trabajo muy pequeño. Establece el
0x80
bit para todas las líneas de salida, excepto las líneas que contienen números.h
es el elemento Chip que corresponde al0x80
bit. (El extremo inferior del alfabeto ah
través dea
definir los ocho bits de salida.)La capa tres es donde realmente nos metemos en la carne de la impresión. Esta capa está a cargo de la línea uno. La versión sin golf tiene ocho filas de
x
's y)
' s, asignadas a 0 y 1 para cada uno de los ocho bits de cada byte. Sin embargo, podemos aprovechar los patrones en los bits para realizar la misma tarea en menos filas.La capa cuatro es muy parecida a la tercera. Maneja las líneas dobles horizontales.
La capa cinco maneja la última línea. Tenga en cuenta que le falta el cable a lo largo de la parte superior que tienen las otras capas. Esto se debe a que no necesitamos devolver el control al secuenciador. En cambio, podemos terminar la ejecución aquí con
t
.La capa seis maneja las líneas simples horizontales.
La capa siete es donde se imprimen los números. Se 'llama' para cada una de las nueve líneas numéricas. Consume 9 bytes de entrada como parte de su ejecución.
fuente
JavaScript (ES6), 222 bytes
Uso de sintaxis corta para funciones ES6: 174 caracteres codificados en utf8, 222 bytes ( https://mothereff.in/byte-counter ). El uso
function ...
requiere 16 bytes más.Menos golf
fuente
Java (OpenJDK 8) , 279 bytes
Pruébalo en línea!
Para el recuento de bytes, use CP-437, que es compatible de forma nativa con Java como
IBM437
(API recientes) oCp437
(API más antiguas); utilice un sistema que tenga este juego de caracteres que tenga este juego de caracteres como juego de caracteres predeterminadoEste código es compatible desde Java 5 en adelante, pero se probó solo en Java 8.
Explicación
fuente
Tcl , 599 bytes (295 caracteres)
Enfoque muy ingenuo, pero solo tenía que hacerlo aunque no fuera un ganador en ninguna medida:
Pruébalo en línea!
fuente