Escriba el programa más corto posible que tome un conjunto de enteros positivos distintos y genere una representación ASCII de hexágonos concéntricos con esas longitudes laterales, hechas de barras, guiones bajos, espacios y líneas nuevas.
El programa más corto en bytes contado por https://mothereff.in/byte-counter gana.
Ejemplos
(Se ven mejor con menos espacio entre líneas).
Si la entrada es 1
la salida debe ser el hexágono con longitud lateral 1:
__
/ \
\__/
Observe que se usan dos guiones bajos para la parte superior e inferior del hexágono, por lo que está mejor proporcionado.
En general, el hexágono de tamaño N contiene barras diagonales N en cada lado en ángulo y 2 * N subrayados en la parte superior e inferior.
Si la entrada es 1 2
la salida, deben ser los hexágonos concéntricos con longitud lateral 1 y 2:
____
/ __ \
/ / \ \
\ \__/ /
\____/
Si la entrada es 1 3
la salida debe ser:
______
/ \
/ __ \
/ / \ \
\ \__/ /
\ /
\______/
Si la entrada es 1 3 2
la salida debe ser:
______
/ ____ \
/ / __ \ \
/ / / \ \ \
\ \ \__/ / /
\ \____/ /
\______/
etc.
Reglas de E / S
La entrada debe provenir de la línea de comando o de la entrada estándar, pero puede estar en el formato que sea más conveniente.
Por ejemplo, es posible dar a cada número como un argumento de línea de comandos: > myprogram 1 3 2
, o puede pedir al usuario que introduzca los números como una lista con formato previo: [1, 3, 2]
.
La salida debe ir a stdout o el equivalente más cercano de su idioma.
Reglas Adicionales
- La entrada siempre será un conjunto de enteros positivos distintos, no necesariamente en ningún orden .
- La salida debe ...
- No contiene ningún carácter además de
/\ _
líneas nuevas. - no tener espacios finales o espacios iniciales innecesarios.
- no contiene nuevas líneas iniciales extrañas, pero puede tener una nueva línea final opcional .
- No contiene ningún carácter además de
- Si no se ingresa nada, entonces no se emite nada (excepto posiblemente una nueva línea).
- Si le ayuda, puede suponer que los enteros de entrada son menores que 2 16 .
1
refiere al hexágono más interno o más externo?1
(o cualquier número) se refiere al hexágono con una longitud lateral de 1. (Con la advertencia de que 1 barra oblicua = 2 subraya). Por1
lo tanto , siempre se referirá al hexágono más interno.Respuestas:
CJAM,
148116109 bytesEsto tardó mucho más de lo que esperaba. Originalmente, solo quería construir iterativamente el cuadrante superior izquierdo, como en los desafíos de diamantes, y luego obtener el resto de la duplicación. Pero no noté que los guiones bajos no obedecen a la simetría de espejo entre la mitad superior e inferior. Así que tuve que rehacer la mayor parte de eso, para generar la mitad derecha iterativamente y luego solo reflejar una vez (a la izquierda).
Pruébalo aquí.
Un ejemplo de Fibonacci-esque:
Explicación:
Como se indicó en la parte superior, empiezo construyendo la mitad derecha de forma iterativa. Es decir, inicialmente solo tengo un espacio en la cuadrícula, y luego para cada anillo posible, rodeo la cuadrícula existente en espacios o un nuevo semi-hexágono.
Una vez hecho esto, reflejo cada línea a la izquierda y la relleno con espacios iniciales para una alineación correcta. Aquí hay un desglose del código:
fuente
Python -
251, 240, 239228Enfoque alternativo (251):
fuente
APL (222 bytes en UTF-8)
(y 133 caracteres)
Como esta pregunta solicita específicamente la cantidad de bytes en la representación UTF8, tuve que desagruparla un poco para que sea más larga, pero su representación UTF8 es más corta. (En particular, el carácter del operador de trayecto
⍨
es de tres bytes, mientras()
que solo son dos, por lo que la optimización ya no funciona y también hace que la asignación sea muy costosa).Versión anterior, que es más corta en caracteres (124) pero usa más bytes cuando se representa en UTF-8 (230, que lo pondría en segundo lugar):
Prueba:
fuente
Perl 5, 352 (349 bytes + 3 para
anE
banderas)Esto probablemente podría jugar mucho más golf ..
Sin golf:
Ejemplo (
1 5 3 14
):fuente
C # -
388316 bytesEditar: se modificó la forma en que evita la impresión de espacios finales y agregó LINQ
Programa simple que toma argumentos de línea de comando. Repite cada carácter posible en cada línea de un rectángulo definido por la dimensión máxima del hexágono y lo agrega a la línea actual, antes de recortar las líneas e imprimirlas sucesivamente (produce la nueva línea final opcional).
Código de golf:
Código sin golf:
fuente
APL (Dyalog Classic) , 151 bytes (93 con la codificación APL clásica)
Pruébalo en línea!
fuente