Mash Up Time!
Esta es la entrega n. ° 5 de mi serie Random Golf of the Day y ASCII Art of the Day de Optimizer . Su (s) envío (s) en este desafío contarán para ambas tablas de clasificación (que puede encontrar las publicaciones vinculadas). Por supuesto, puede tratar esto como cualquier otro desafío de código de golf y responderlo sin preocuparse por ninguna de las series.
Hoyo 5: azulejos de diamante
Un hexágono regular siempre se puede colocar en mosaico con diamantes de esta manera:
Usaremos una representación de arte ASCII de estas inclinaciones. Para un hexágono de longitud lateral 2, hay 20 inclinaciones de este tipo:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Dada una longitud lateral N
, debe generar un mosaico para un hexágono de longitud lateral N
al azar. La distribución exacta no importa, pero cada mosaico debe devolverse con una probabilidad distinta de cero.
Para N ≤ 4
, su presentación debe producir un mosaico dentro de 1 minuto al menos el 80% del tiempo y al menos el 80% de las inclinaciones deben generarse potencialmente dentro de 1 minuto. La mayoría de los enfoques no tendrán que preocuparse por esta regla (es muy indulgente); esto es solo para descartar algoritmos basados en el rechazo muy ingenuos que generan cadenas arbitrarias hasta que uno sea un mosaico.
Es posible que desee saber que el número total de posibles inclinaciones para un determinado N se puede encontrar en OEIS A008793 .
Puede escribir un programa completo o una función y recibir información a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y producir salida a través de STDOUT (o la alternativa más cercana), valor de retorno de función o parámetro de función (out).
No debe generar más espacios iniciales de los necesarios para alinear el hexágono (es decir, la esquina izquierda del hexágono no debe tener espacios delante). Cada línea puede contener hasta N
espacios finales (no necesariamente consistentemente, por lo que podría tener, por ejemplo, una salida rectangular, imprimiendo el cuadro delimitador del hexágono).
Este es el código de golf, por lo que gana el envío más corto (en bytes). Y, por supuesto, la presentación más corta por usuario también entrará en la tabla de clasificación general de la serie.
Tablas de clasificación
La primera publicación de cada serie genera una tabla de clasificación.
Para asegurarse de que sus respuestas aparezcan, comience cada respuesta con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(El idioma no se muestra actualmente, pero el fragmento sí lo requiere y analiza, y puedo agregar una tabla de clasificación por idioma en el futuro).
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
demasiado fácil: el 80% del tiempo de la misma, suelo de baldosas básica, de lo contrario buscar otro mosaico en cualquier momento quieroRespuestas:
CJam, 105 bytes
Nueva línea agregada para evitar el desplazamiento. Pruébalo en línea
Explicación:
Esta solución comienza cada línea como un zigzag, luego coloca N guiones bajos en ella, según su posición en la línea anterior y un par de reglas. Obtuve esto de una serie de observaciones mientras miraba la salida como una matriz de caracteres 2D simple:
/\
en la mitad superior,\/
en la mitad inferior)/_/
solo puede cambiar en -1 o 0, y\_\
solo puede cambiar en 0 o 1"_ "
patrón o un" _"
patrón, ambos están bienAsí que decidí implementarlo manteniendo las posiciones de subrayado anteriores, modificándolas con un factor aleatorio (2 opciones para cada subrayado) y repitiendo hasta que se cumplan las reglas. En el proceso de optimización, cambié a las posiciones de subrayado en relación con el lado izquierdo del hexágono (sin incluir espacios).
Antigua versión "3D", 189 bytes:
Pruébalo en línea
fuente
Python 2,
337335324318311300296 bytesLa idea es crear primero un hexágono de diamantes, como este:
Y luego llénalo con caminos de guiones bajos hacia abajo, como este:
El resultado final con todas las rutas agregadas se vería así:
Se necesita bastante código para asegurarse de que estos caminos no se salgan de los límites ni se crucen entre sí.
El código sin golf:
fuente
randint(0,1)*(p<n*3+i*2-j)
arandint(0,p<n*3+i*2-j)
.Perl,
174 168 166161Trate de mí .
fuente
JavaScript ( ES6 ),
376416494Solo para estar allí ...
Esto construye todas las inclinaciones, luego elige una aleatoria. El tiempo para las inclinaciones 232848 para N = 4 es de ~ 45 segundos en mi computadora portátil. No probé N = 5.
Siendo EcmaScript 6, se ejecuta solo en Firefox.
fuente
dom.max_script_run_time
. Es una preferencia global en aproximadamente: config, la mía está establecida en 30.SmileBASIC, 241 bytes
Basada en la respuesta de Matty
fuente