Visión general
Dado un número de hexágonos, colóquelos en una forma conectada dentro de los límites de una imagen de arte ASCII de 50 por 50. La forma que elijas puede ser arbitraria, lo que sea que consideres más adecuado para jugar al golf, siempre que esté conectado. Puede tener agujeros siempre que sean más grandes que un hexágono (de lo contrario, el número de hexágonos será ambiguo).
Diseño
Todos los hexágonos deben estar en la siguiente forma (solo este tamaño y orientación son válidos):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Dos hexágonos están conectados directamente si comparten una ventaja:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Dos hexágonos no están conectados si solo comparten un vértice:
__ __
/ \/ \
\__/\__/
Compartir medio borde tampoco cuenta como conectado:
__
/ \
\__/
/ \
\__/
Se conecta una colección de hexágonos si existe un camino desde cualquier hexágono a cualquier otro utilizando solo hexágonos conectados directamente .
Agujeros
Un agujero del tamaño de un hexágono en una colección conectada de hexágonos cuenta como un hexágono, por lo que cualquier pieza de arte ASCII tiene un recuento de hexágonos inequívoco.
Esto no cuenta como un agujero ya que el agujero potencial es un solo hexágono:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Esto hace recuento como un agujero, ya que no se corresponde con un único hexágono:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Entrada y salida
Entrada
Un entero del 1 al 255.
Salida
Una cadena de arte ASCII que representa el número de entrada de hexágonos conectados como se describió anteriormente.
- El número de filas (subcadenas separadas por nueva línea) es como máximo 50, más una nueva línea final opcional adicional.
- Las filas no necesitan tener la misma longitud, pero cada una debe tener una longitud máxima de 50.
- Pueden existir filas de longitud cero por encima o por debajo de la forma conectada, siempre que el número total de filas no exceda de 50.
- Las filas de solo espacio pueden existir por encima o por debajo de la forma conectada, siempre que el número total de filas no exceda de 50.
- Los espacios pueden aparecer a la izquierda de la forma, siempre que las longitudes de las filas no excedan de 50 (la forma no necesita estar alineada a la izquierda).
- Los espacios pueden aparecer a la derecha de la forma, siempre que las longitudes de las filas no excedan de 50.
- Cualquier carácter que no forme parte de la forma conectada debe ser espacios o líneas nuevas.
Siempre que la salida sea correcta, no es necesario que sea coherente de una ejecución a la siguiente.
Ejemplos
Entrada: 6
Salidas válidas:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Salidas inválidas:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Victorioso
La respuesta válida más corta en bytes gana.
Tabla de clasificación
(usando el fragmento de la tabla de clasificación de Martin )
fuente
6
. Para una entrada de255
una fila horizontal de hexágonos no cabe en un arte ASCII de 50 por 50.Respuestas:
CJam,
645755 bytesPruébalo aquí.
Esto generará el siguiente patrón, en columnas :
Explicación
Esto se basa en la excelente sugerencia de Dennis , que se usa
.e>
para ensamblar una salida de arte ASCII de varias piezas. Como él dice,.e>
toma el máximo de dos matrices (o cadenas) en cuanto a elementos, y dado que los espacios tienen el código de caracteres más bajo, podemos usar esto para imponer cualquier otro carácter en una cuadrícula de cadenas. Además, si las dos matrices no tienen la misma longitud, los elementos extraños de la matriz más larga simplemente se copian sin cambios. Esto significa que los diferentes patrones ni siquiera necesitan ser del mismo tamaño. Para aplicar esto a las matrices bidimensionales (porque no queremos insertar las nuevas líneas hasta el final), aplicamos.e>
pairwise a las líneas, lo que da..e>
.La idea básica del código es generar
N
copias de un solo hexágono movido a la posición correcta. Nosotros "movemos" el hexágono verticalmente anteponiendo líneas vacías y horizontalmente anteponiendo espacios. Una vez que terminamos, doblamos todas las copias juntas, usando la hermosa:..e>
(probablemente el operador más largo que he usado en un programa CJam).Aquí está el código:
fuente
Python 2,
219207 caracteresToma entrada en stdin.
Prácticamente solo crea una cuadrícula de espacios de 50x50 y coloca los hexágonos donde corresponde. Después de la 16a hexagonal, que no necesito la primera fila de
h
(el hexágono como una matriz 2D) así que utilizoi>15
para iniciar el rango en 1 en vez de 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
calcula la c OLUMNA y r ow necesito para comenzar a.n
es un booleano pero se usa como un entero para arreglar los límites (yah[0]
que solo tiene 3 caracteres para evitar sobrescribir cosas).Estoy bastante contento con este, reduje unos 50 bytes desde la versión inicial, especialmente cuando recordé el
a[x:y]=b
sintaxis.Salida (n = 30):
Dado que se permiten líneas finales de espacios en blanco, cambié la creación de
g
solo para crear 50bytearray
s en lugar de3+(x>1)+x/16*2
, que es el número exacto de filas requeridas, recortando 12 bytes.fuente
Swift 2.0,
601591 bytesCorrer:
swift hexagons.swift 21
Salida:
Swift
substringToIndex
ystringByReplacingOccurencesOfString
toma tantos personajes ...fuente
stringByPaddingToLength
, sin embargo, en este caso sería 11 caracteres más largo que escribir la cadena completa.stringByAppendingString
en Objective-C pero aún así ...C, 238 bytes
Solo los espacios necesarios y las nuevas líneas consideradas para el recuento de caracteres.
Simplemente crea una matriz de caracteres, los llena en orden inverso y luego imprime todo.
fuente
JavaScript (ES6), 265 bytes
Tesela hexágonos en una fila, de izquierda a derecha, alternando hacia arriba y hacia abajo, como un panal, hasta llegar al final de una fila.
Ungolfed con descripción (funciona en firefox):
fuente
Rubí, 120
crea una matriz de 50 cadenas de 50 espacios, luego sustituye 4 caracteres en 3 líneas para agregar los hexágonos:
Como la primera línea contiene espacios, una vez que se ha trazado un hexágono, no podemos trazar otro debajo de él, porque los espacios sobrescribirán los hexágonos anteriores.
Por lo tanto, los hexágonos se agregan en forma de rombo de 16x16 (rectángulo distorsionado) de abajo hacia arriba, y se inclinan de abajo hacia la izquierda hacia arriba a la derecha.
La cadena
" __ "
se sobrescribirá con adicional\
y/
cuando sea necesario.Sin golf en el programa de prueba
Salida típica (n = 250)
Debería haber algunas filas más de espacios en blanco en la parte superior aquí, para hacer un total de 50, pero no sé si hay una manera de hacer que Stackexchange los formatee para incluirlos.
fuente