Escriba el programa más corto que imprima esta sección de arte ASCII de un mosaico hexagonal o panal :
__
__/ \__
__/ \__/ \__
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
/ \__/ \__/ \
\__/ \__/ \__/
\__/ \__/
\__/
- No se debe tomar ninguna entrada.
- Salida a stdout o la alternativa más cercana a su idioma.
- En lugar de un programa, puede escribir una función con nombre que no tome parámetros e imprima el resultado normalmente o lo devuelva como una cadena.
- La salida puede tener cualquier número de nuevas líneas iniciales y / o finales y cada línea en la salida puede tener cualquier número de espacios iniciales y / o finales (siempre que el patrón se alinee correctamente).
- El código más corto en bytes gana.
code-golf
ascii-art
kolmogorov-complexity
tiling
hexagonal-grid
Pasatiempos de Calvin
fuente
fuente
Respuestas:
CJam,
4543424140 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
repite el patrón
\__/
38 veces y lo divide en trozos de longitud 21 . Si los fragmentos se separaran por saltos de línea, este sería el resultado:Esto contiene claramente el panal deseado. Todo lo que queda por hacer es reemplazar algunos caracteres con espacios, cortar algunos otros e introducir los avances de línea.
genera el entero 74 100 000 036 y lo convierte en la matriz [7 4 1 0 0 0 0 0 0 3 6] . Cada elemento de la matriz codifica el número de caracteres iniciales de la línea correspondiente que deben reemplazarse con espacios. Al restar este número de 16 , también obtenemos la longitud correcta para esta línea.
Dado que un espacio tiene un punto de código más bajo que los otros caracteres de L y los operadores vectorizados dejan intactos los caracteres de la cadena más larga que no corresponden a uno de los más cortos,
.e<
reemplaza los primeros caracteres D con espacios.fuente
Pitón 2, 73
Véalo correr.
Para cada una de las 11 filas de salida, calcula el número de espacios iniciales
k
como un máximo de tres funciones lineales que forman la envoltura del lado izquierdo del hexágono. Debido a que las líneas diagonales tienen pendiente3
y-3
, es mejor indexar el número de fila comoi=0,3,...30
.Para crear la malla hexagonal, primero colocamos suficientes mosaicos de la unidad
'\__/ '
. Luego, al[i:]
cambiarlo, se realinea por 3 para filas impares. Finalmente, tomamos la porción necesaria[k:16-k]
, dejando un margen dek
izquierda y derecha.fuente
CJam,
655655 bytesPruébelo en línea en el intérprete de CJam .
Idea
La mitad derecha de cada línea es una copia invertida de la mitad izquierda con barras y barras invertidas intercambiadas. Por lo tanto, es suficiente codificar la mitad izquierda del panal:
En lugar de analizar este patrón línea por línea, podemos analizarlo columna por columna:
Surgen patrones obvios:
_ _ _ _
produce cinco veces./
es seguido por un\
.Mediante la sustitución de cada
/\
,_
,_ _ _ _
y el espacio con un número de 0 a 3, podemos convertir la matriz resultante de un número de base 4 a una base superior y almacenar el patrón completo de una manera compacta.Código
fuente
C,
148144140 bytesCon espacios en blanco, sin advertencias del compilador, y antes de algunos ajustes de código para guardar algunos bytes:
Este enfoque no utiliza ninguna tabla de caracteres / cadenas. Se repite en todos los 187 (11 filas, 17 columnas, incluidas las nuevas líneas), y decide qué carácter imprimir para cada posición, en función de una combinación de condiciones.
Las condiciones incluyen una prueba de estar dentro / fuera de las 4 esquinas, utilizando 4 ecuaciones de línea, con el resultado almacenado en variable
p
. El resto se repite principalmente cada 6 caracteres, con las filas impares desplazadas por 3 caracteres en relación con las filas pares.fuente
int
.k;f(r,c,d,p){for(;k<187;putchar(c>15?10:p&d<2&p?95:p&d<3?47:!p|d-5?32:92))r=k/17,c=k++%17,d=(5+c+r%2*3)%6,p=3*r+c-7<33u&3*r-c+8<33u;}
Rubí: 78 bytes
Una transcripción de la solución de xnor (69 Bytes):
fuente
11.times
ahorra 2 bytesJavaScript (ES6), 129
130Esa es una cadena pura reemplazar / reemplazar / reemplazar ... sin aprovechar ninguna propiedad geométrica.
Usando cadenas de plantillas, todas las nuevas líneas son significativas y cuentan.
Ejecute el fragmento en Firefox para probar
fuente
PHP -
1391371071019187 bytesNo sé si esta es la mejor manera de jugar golf, pero aquí está mi intento:
303646-50 bytes gracias a Ismael MiguelPruébelo en línea aquí
código antiguo:
fuente
<?
lugar de<?php
guardar 3 bytes. En lugar de$c=$a.$a."/ \\\n\__".$a.$a."/\n";
, puede escribir$c="$a$a/ \\\n\__.$a$a/\n";
(ya que PHP expande las variables en cadenas). Puede aplicar la misma lógica alecho
para reducir aún más su longitud. Además, no necesita ese espacio entre elecho
y la cadena.\n
, puede poner una nueva línea real y guardar 1 byte por línea.<?="\t __\n\t__",$a='/ \__',"\n __$a$a\n",$c="$a$a/ \\\n\__$a$a/\n","$c$c \__$a/\n\t \__/";
. Recuerde reemplazar el\t
con un carácter de tabulación y\n
con una nueva línea real.Lua 146
(nuevas líneas agregadas para mayor claridad)
fuente
S
tres veces.Dart - 113
Solución pura de interpolación de cuerdas, nada lujoso. Las operaciones de cadena como "subcadena" son demasiado detalladas para competir en la práctica.
Ejecútalo en DartPad .
fuente
Javascript ( borrador ES7 ),
969493 bytesInspiración tomada de algunas soluciones aquí ...
Editar: -1 de edc65
Comentado:
fuente
.substr(+x+z,16-x-x)
->.slice(+x+z,16-x+z)
-1+x
lugar de solox
?x
a un número. Sin él, se concatenaríaz
Python 3,
10087 bytesY una versión legible del código a continuación. La idea es codificar los intervalos (inicio, longitud) y luego rellenar con la cantidad correcta de espacios para centrar el intervalo.
fuente
Retina , 66 bytes
Cada línea debe ir a su propio archivo y
<LF>
significa nueva línea real en el archivo. 1 byte por archivo adicional agregado al conteo de bytes.Puede ejecutar el código como un archivo con la
-s
bandera, manteniendo los<LF>
marcadores y quizás cambiándolos a nuevas líneas en la salida para facilitar su lectura si lo desea.El algoritmo consta de 5 pasos sustitutos simples (cambiar el contenido de línea impar a contenido de línea par) a partir de una cadena de entrada vacía. Los resultados después de cada paso son (delimitados por
=
's):fuente
Javascript,
154151 bytesfuente