Lo vi en un desafío PHP. El objetivo es hacer un tablero de ajedrez con 64 cuadrados (8 * 8) con la mínima cantidad de código. Bastante simple, hice el mío en PHP en 356 bytes (no es impresionante, lo sé) y me gustaría ver algunos otros enfoques. Esto se puede hacer en un idioma de su elección, siempre y cuando lo mantenga vainilla, para que no se importen. El recuento de bytes más pequeño gana.
La salida debería verse así:
Y mi código:
<table><?php
$c='black';function p($c,$n){echo'<td style="width:50px;height:50px;background:'.$c.'"></td>';if($n==1){echo"<tr>";}}for($i=1;$i<=64;$i++){if($i%8==0&&$c=="black"){$c="white";$n=1;}elseif($i%8==0&&$c=="white"){$c="black";$n=1;}elseif(isset($n)&&$n==1){$n=0;}elseif($c=="black"){$n=0;$c="white";}elseif($c=="white"){$n=0;$c="black";}p($c,$n);}
O legible:
<table><tr>
<?php
$color = 'black';
function printcolor($color, $nl) {
echo '<td style="width:50px; height:50px; background:' . $color . '"></td>';
if ($nl == true) {
echo "</tr><tr>";
}
}
for ($i=1; $i<=64;$i++) {
if ($i % 8 == 0 && $color == "black") {
$color = "white";
$nl = true;
} elseif ($i % 8 == 0 && $color == "white") {
$color = "black";
$nl = true;
} elseif (isset($nl) && $nl == true) {
$nl = false;
} elseif ($color == "black") {
$nl = false;
$color = "white";
}
elseif ($color == "white") {
$nl = false;
$color = "black";
}
printcolor($color, $nl);
}
Editar:
Lo siento, no fui muy específico al principio:
- Los cuadrados deben tener 50 px * 50 px, excepto las imágenes vectoriales.
- El formato o tamaño de salida no es relevante ni debe ser una imagen.
- Para fines de evaluación, la salida debe ser visible, como en un archivo de imagen o una captura de pantalla
- No hay bibliotecas escritas después de la publicación del desafío.
code-golf
graphical-output
Bruno
fuente
fuente
Respuestas:
Octava,
2018 bytesGracias a @Bruno por reducir 2 bytes.
Resultado:
Esta respuesta utiliza una técnica encontrada aquí . También se basa en el escalado automático de imágenes en Octave dependiendo del tamaño de la ventana de la figura.
fuente
vim,
47464443tachado 44 sigue siendo regular 44 ...
Salidas en formato NetPPM (PBM):
fuente
<C-p>
en vim sin haber comenzado a escribir una palabra ... ¡eso es realmente útil!CSS, 244 bytes
Mostrar fragmento de código
Explicación: Se crea un gradiente lineal diagonal de 100x100px con cuatro puntos para que la mayor parte del gradiente sea transparente, excepto por dos esquinas triangulares de 50px. (Ver el fragmento a continuación). Agregar un segundo gradiente con un desplazamiento de 50x50px completa las mitades que faltan de los cuadrados. Aumentar el tamaño del cuerpo permite que el patrón resultante se repita para llenar todo el tablero de ajedrez.
Mostrar fragmento de código
fuente
}
.html{background:#fff}
? Por defecto, el 99% de los navegadores configuran el fondo en blanco, afaikMathematica, 34 bytes
La salida es una imagen vectorial y está rodeada por un marco.
En lugar de colocar correctamente 32 rectángulos, podemos generar una matriz binaria y hacer que
ArrayPlot
funcione para nosotros:fuente
GenerateChessBoardWithColorsAsParameters[ColorBlack, ColorWhite, 8, 8, 50, 50]
¿no funciona? ;)Mathematica,
817255 bytesLa imagen es de la evaluación de una versión anterior, pero aún se ve igual.
fuente
Octava, 48 bytes
Esto funciona exactamente igual que mi respuesta de Matlab , pero no hay
spiral
en Octave. En su lugar, usamos una función que Matlab no tiene: podemos usar la asignación det
ya como una expresión, y luego usart
nuevamente en la misma expresión.(Esta es la versión reescalada, no quiero saturar las respuestas aquí =)
fuente
Pure Bash (sin utilidades externas), 133
Vi el comentario de @ Doorknob como un pequeño desafío. Es un poco largo, pero aquí va:
La salida está en formato .txt de Imagemagick . Tenga en cuenta que esto es puro Bash. Ni Imagemagick ni ninguna otra utilidad externa se generan para generar esta salida. Sin embargo, la salida puede redirigirse a un archivo .txt y verse con la
display
utilidad ImageMagick :Este formato de imagen es bueno porque no solo es texto puro, es poco más que una lista de todos los píxeles (x, y y valor de color), uno por línea. Es una cuestión bastante simple derivar todos los valores de píxeles aritméticamente en un gran bucle.
Respuesta anterior, 167
La salida está en el formato de archivo de imagen de texto X_PixMap , que también se puede ver con la
display
utilidad ImageMagick .Tenga en cuenta que he sacado tanto del formato XPM como pude de tal manera que
display
aún lo aceptaría. Pude sacar todas las repeticiones c con la excepción de las"
comillas dobles alrededor de cada línea. No tengo idea de qué otras utilidades, si es que las hay, aceptarán esto.fuente
PowerShell + navegador de su elección,
149143 bytesLa incapacidad para usar las importaciones es realmente difícil, ya que todas las llamadas GDI (es decir, las cosas que usa PowerShell para dibujar) están enterradas detrás de las importaciones en .NET ...
Editar: guardado seis bytes gracias a @NotThatCharles
Esto utiliza dos bucles for
1..8
para generar una cadena HTML grande, similar al ejemplo de PHP proporcionado, y enviarla a la tubería. Cada vez que calculamos si agregará;background:#000
fondos negros tomando nuestra posición actual en el módulo 2 del tablero.Para usar, redirija la salida al archivo de su elección (por ejemplo, con algo parecido
> chessboard.htm
) y luego inícielo en el navegador de su elección. Para la captura de pantalla a continuación, utilicé "c.htm" y Firefox.fuente
white
yblack
puede ser#fff
y#000
... pero ¿por qué molestarse en especificar blanco?(";background:#000","")[($a+$_)%2]
lugar.PHP + CSS + HTML, 136 bytes
Tomando el enfoque de la mesa a un nivel superior:
Genera el siguiente código:
Se basa en gran medida en la amabilidad y CSS de los navegadores.
fuente
++$i<9
con@++$i<9
. Además, para que funcione sin<?php
, uno debe tener la directivashort_open_tags=On
, que es predeterminada en algunos entornos. Lea más en stackoverflow.com/a/2185331/2729937Jalea, 26 bytes
Como Jelly no tiene soporte para imágenes integradas, imprimimos una imagen PPM.
Pruébalo en línea!(placa más pequeña para velocidad, PPM sin procesar)
Resultados
Cómo funciona
Versión no competitiva (24 bytes)
El nuevo intérprete de Jelly que es anterior a esta publicación no se vectorizó
x
correctamente. Con la última versión, se pueden guardar 2 bytes adicionales.La única diferencia es que
x50
produce una lista plana (con cada elemento original repetido 50 veces), porF
lo que ya no es necesario.fuente
;
...;)MATL , 11 (27) bytes
Esto produce la siguiente figura. No tiene un tamaño intrínseco; se escala automáticamente según el tamaño de la ventana de la figura. Esto parece estar permitido por el desafío.
Explicación
Si el escalado automático no está permitido:
produce la siguiente figura con cuadrados de 50x50 píxeles
Explicación
fuente
Pyth,
2826 bytesExplicación
Python equivalente
Pruébelo aquí (solo los valores de color)
Salida:
fuente
Matlab, 47 (24) bytes
Esto funciona exactamente igual que mi respuesta Octave , pero pude usar el
spiral
que guardó un byte.spiral(n)
hace unanxn
matriz y la llena en espiral con la primeran^2
enteros.Si se permiten los vectores, podríamos hacerlo en 24 bytes:
(Esta es la versión reescalada, no quiero saturar las respuestas aquí =)
fuente
FFmpeg, 78
82 100bytesFinalmente pude limpiar el tablero.
Mayores :
Saldrá con error, pero después de producir la imagen a continuación.
(el tablero ha recogido algo de polvo)
fuente
CJam, 27 bytes
Pruébalo en línea!(placa más pequeña para velocidad, PPM sin procesar)
Resultados
Cómo funciona
fuente
HTML con utf-8 - 66b
▚ es utf directo-corto para la entidad & # 9626;
Carácter Unicode 'CUADRANTE SUPERIOR IZQUIERDO E INFERIOR DERECHO' (U + 259A)
tonto, estaba buscando una solución de 1 utf-8 char-habría sido ... 1b!
fuente
▞
lugar, debe usarlo para que el cuadrado superior izquierdo sea blanco como en un tablero de ajedrez estándar. Además, use en<pre>
lugar de<div>
para que pueda usar nuevas líneas en lugar de<br>
.▚
cuenta para 3 bytes con la codificación UTF-8. En el futuro, puede usar esto para verificar su conteo de bytes UTF-8PHP,
166158155 bytesFunciona en PHP 7.0.2 (etiquetas cortas habilitadas) y Chrome 48.0.2564.97 m
fuente
bgcolor=0
para generar el fondo negro. ¡Eso debería ahorrar una tonelada de bytes! Y en lugar de$v%2==0
usar$v&1
, lo que debería reducir algunos bytes.PHP> = 5.4,
175159149116 BytesNotas
fuente
<table><tr><?php for(;++$i<65;){echo'<td style="width:50px;height:50px;background:#'.(($i+$m)%2?'000':'').'"></td>';if($i%8<1){echo"</tr><tr>";$m=!$m;}}
TR
.++$i<65
con@++$i<65
, ya que está preocupado por las advertencias. Esto significa que puede reducir$m=$i=0
a solo$m=0
, ahorrándole 2 bytes. En lugar deecho 'a'.'b'.'c';
, puedes hacerloecho 'a','b','c';
. Esto significa queecho
puede estarecho'<td style="width:50px;height:50px;background:#',($i+$m)%2?'':'000','">';
ahorrándole más 2 bytes. Además, los atributos HTML no requieren comillas. Elimínalos y sabe 2 bytes. Además, hay unbgcolor
atributo mucho más corto , que reduce más bytes. ¡Puede usar aprint()
en elfor
para guardar aún más bytes!($i+$m)%2
con$i+@$m&1
, lo que me permitió eliminar eso$m=0
. Adelante, he podido eliminar tuif
y reemplazarlo con una operación tormentosa. Para ahorrar aún más , eliminé tustyle
y agregué las propiedadeswidth
yheight
. Para profundizar aún más en el lado hacky, pensé que Chrome 48.0.2564.103 m usa negro si el color de fondo es0
, usando la propiedadbgcolor
. ¡Eso me permitió reducir más! ¡Más reducciones es mejor!JavaScript, 150
Esto definitivamente se puede jugar al golf. Crea HTML.
fuente
iKe , 24 bytes
El núcleo de la técnica es generar una lista de coordenadas x, dividirlas y luego tomar un producto cruzado de igualdad para generar un mapa de bits apropiado. Usando ejemplos más pequeños con fines ilustrativos:
pruébalo aquí . Técnicamente, iKe funciona en un lienzo lógico de 160x160 píxeles, pero en modo de pantalla completa (el valor predeterminado cuando se sigue un enlace guardado) esto se amplía en 3x. Creo que esto sigue el espíritu de la pregunta, ya que el programa podría ensamblar un mapa de bits mucho más grande con el mismo número de caracteres; simplemente se reduce a una limitación de visualización arbitraria.
Actualizar:
iKe no está diseñado principalmente para el golf, pero la codificación en vivo aún se beneficia de la brevedad y los valores predeterminados sanos. Como resultado de jugar con este problema, he decidido permitirle usar una paleta predeterminada si no se proporciona ninguna. Esta solución particular ahora podría expresarse con:
Ahorro (no elegible) 3 bytes.
fuente
Rubí con zapatos, 97 caracteres
Salida de muestra:
fuente
Lua + LÖVE,
138113112106 caracteresSalida de muestra:
fuente
//
un operador de división de enteros, pero aparentemente todavía no hay un LÖVE construido con un LuaJIT con él. ☹GIMP, 539 bytes
Esquema no Golf script-fu:
En el modo por lotes, cree una imagen en blanco, cree una selección rectangular de 50x50, llénela y luego muévala repetidamente alrededor de la imagen, rellenando cuadrados. Luego guarde
c.png
y salga.Salida:
fuente
J
3331 bytesUsé un truco con binario.
... porque 43605 en binario es 1010101001010101 (usamos
#:
primitivo para obtenerlo). Primitivo$
da forma a esta matriz de dígitos binarios en una matriz especificada con las dimensiones8 8
. Yviewmat
es solo una biblioteca del sistema.La ventana es completamente redimensionable.
Gracias a @FrownyFrog por acortarlo a:
fuente
viewmat 8$#:170 85
es 1 byte más cortoviewmat#:8$170 85
Excel VBA, 82 bytes
Función de ventana inmediata anónima VBE que no toma entrada y genera un tablero de ajedrez al rango
A1:H8
en el objeto ActiveSheetEsta función funciona creando primero 4 columnas negras en el rango
B1:B8,D1:D8,F1:F8,H1:H8
y luego compensando el color en filas2,4,6 and 8
a la izquierda por una celda.Salida de muestra
fuente
Perl 5 - 80
Genera un archivo .PBM:
fuente
PowerShell + GDI, 346 bytes
(las nuevas líneas cuentan igual que el punto y coma, por lo que las nuevas líneas son legibles)
A diferencia de mi otra respuesta , esta usa los ensamblados .NET para llamar a GDI + funciones . Curiosamente, es aproximadamente el doble de largo.
Las dos primeras líneas cargan los ensamblajes
System.Windows.Forms
ySystem.Drawing
. El primero se usa para la ventana literal y el lienzo sobre el mismo, el segundo se usa para el objeto de dibujo (en este código, un pincel) que crea los gráficos en el lienzo.Luego creamos nuestro formulario
$f
con la siguiente línea, y establecemos suwidth
yheight
ser450
. Tenga en cuenta que esto no es50*8
, ya que estos números corresponden al borde de borde a borde de la ventana de formularios, incluida la barra de título, el botón de cierre, etc.La siguiente línea crea nuestro lienzo
$g
llamando al constructor vacío. Este valor predeterminado es que la esquina superior izquierda del área no del sistema del formulario sea igual a0,0
y aumenta a la derecha y hacia abajo, perfecto para nuestras necesidades.La siguiente línea es la llamada real que dibuja los gráficos, con
$f.add_paint({...})
. Construimos las llamadas de gráficos mediante un bucle doble para0..7
y llevando una variable auxiliar a$y
través de cada bucle externo. En cada bucle interno, le decimos a nuestro lienzo.FillRectangle(...,...)
que dibuje nuestros cuadrados. El primer parámetro construye un nuevoSolidBrush
con un color basado en dónde estamos en el tablero. Otras opciones de aquí podrían ser una escotilla, un gradiente, etc. El segundo parámetro es un nuevoRectangle
objeto a partir de las x especificados$_*50
y$y*50
las coordenadas y que se extiende por50
en cada dirección. Recuerda que0,0
es la esquina superior izquierda.La línea final solo muestra la salida con
.showDialog()
.Tenga en cuenta que dado que estamos creando un objeto de formulario , y PowerShell tiene que ver con la tubería, cerrar el formulario emergente pasará un
System.Enum.DialogResult
objeto deCancel
, ya que eso es técnicamente lo que hizo el usuario. Dado que no estamos capturando ni haciendo nada con ese resultado, la palabraCancel
se mostrará a STDOUT cuando finalice el programa, ya que se dejó en la tubería.fuente
SELECCIONAR. ,
88448278 bytesClaro que es largo, pero las dos primeras versiones que generé para esta tarea fueron dos veces más largas.
Salida:
Cómo funciona:
Aquí está el programa utilizado para generarlo:
En otras palabras, repita n de 0 a 63, dibujando un cuadrado en (n% 8-4) + (n // 8-4) i si (-1) ^ (n // 8 + n% 8) no es positivo.
fuente
JavaScript (ES6), 147
fuente
Python, 57 bytes
c
es una línea de 50 píxeles blancos y 50 negros,200*c
es una fila con un blanco en el frente,200*c[::-1]
el reverso.Salida como PPM, uso:
fuente