Su tarea es generar una representación del legendario árbol de la vida, Yggdrasil .
Debe escribir un programa cuya salida sea exactamente eso:
/\
/**\
/****\
/******\
/******\
/********\
/**********\
/************\
/**************\
/************\
/**************\
/****************\
/******************\
/********************\
/**********************\
/******************\
/********************\
/**********************\
/************************\
/**************************\
/****************************\
/******************************\
/************************\
/**************************\
/****************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/******************************\
/********************************\
/**********************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************\
/**************************************\
/****************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/******************************************\
/********************************************\
/**********************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/************************************************\
/**************************************************\
/****************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/******************************************************\
/********************************************************\
/**********************************************************\
/************************************************************\
/**************************************************************\
/****************************************************************\
/******************************************************************\
/********************************************************************\
/**********************************************************************\
/************************************************************************\
/**************************************************************************\
/****************************************************************************\
/******************************************************************************\
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|--------|
|________|
No hay espacios en blanco al final. La nueva línea final puede omitirse.
Para facilitar la comprobación, aquí están las sumas md5 de la salida esperada:
374899e56bc854d04639c43120642e37
- No hay línea nueva al final.03afb81d960b8e130fe2f9e0906f0482
- Nueva línea al final
Se aplican lagunas estándar. Este es el código de golf, por lo que gana la entrada más pequeña en bytes.
code-golf
ascii-art
kolmogorov-complexity
caird coinheringaahing
fuente
fuente
Respuestas:
Golfscript,
8477767572 caracteresEnfoque diferente al de Howard . Haga clic en el recuento de caracteres para probarlo.
¡Gracias a Howard por salvar 3 personajes!
Explicacion :
Este es más o menos un puerto directo de mi solución Python . Tomar algunas libertades expresivas (usar variables con nombre en lugar de hacer un seguimiento de las posiciones de la pila, y
print
realmente es mantener las cosas en la pila, no imprimir):fuente
'\\'n
tirar de la nueva línea en la cadena (+/- 0 caracteres) y ahora la barra invertida ya no necesita escapar (-1 carácter).4*4+
es lo mismo)4*
y'_-'[=]
se puede escribir, lo'_-'1/=
que hace que el último quede+
obsoleto.Haml & Sass
37 + 277 = 314
Haml:
Hablar con descaro a:
* Sass permite directivas de control, concatenación y desreferencia variable. Todos los cuales son útiles al peinar, pero detallados durante el golf.
se genera en:
HTML:
CSS:
la página resultante
fuente
CJam , 62 bytes
Pruébalo en línea!
Cómo funciona
fuente
GolfScript, 79 caracteres
Prueba el código aquí . Tenga en cuenta que los saltos de línea no son opcionales en este código
fuente
Pitón,
148129126121 caracteres¡Gracias a Falko por salvar 3 personajes y a flornquake por salvar brillantemente otros 5!
fuente
'**'*j
para guardar 3 caracteres. Aparte de esto, mi solución converge exactamente al mismo código. :)for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
.Golpetazo,
236 19719310 bytes de código + nombre de archivo de 1 byte + archivo de datos de 182 bytes = 193 bytes en total
Explicación
y
es un archivo que contiene el Yggdrasil, sin una nueva línea final, comprimido con el algoritmo zopfli (invocado comozopfli --i64
) y luego con los últimos 8 bytes eliminados. zopfli es compatible con gzip, por lo que puedo descomprimir el archivo con las utilidades Bash estándar diseñadas para gzip. El tamaño del archivo de datos es de 182 bytes (229 bytes cuando se usa gzip normal). El tamaño del Yggdrasil original, sin la nueva línea final, es de 5876 bytes.La eliminación de los últimos 8 bytes provoca mensajes de error, que se suprimen enviando un error estándar a un archivo llamado
j
. Sij
existe, se sobrescribirá.La base64 de
y
es (se usabase64 -d
para obtener el archivo original):Y el md5sum es:
fuente
C, 169
Sin golf (y ligeramente desenredado):
fuente
Rubí - 100
Pone aplanamientos automáticos, por lo que podemos recopilar todas las líneas incluso en matrices anidadas. Necesita Ruby 1.9
Probar en ideone
fuente
PowerShell
104101fuente
C #
258234bytes¡Gracias a algún usuario anónimo por las ediciones sugeridas que hacen un buen uso del método String.PadLeft!
El código es bastante simple, no queda mucho para el golf.
Código formateado:
fuente
\r
tiene sentido aquí. Este es el código de golf.J,
98 88 8475fuente
Perl, 127
Sin golf:
fuente
Rubí -
139129126123121Alzado "pone" fuera de la creación de matriz (sugerencia de bitpwner).
Sin golf ("pone" sin elevar):
fuente
PHP
223202181160156Editar Descubrí cómo crear un alias de una función con una variable y pude cortar algunos caracteres más. Esa
str_repeat
función era realmente detalladaEdición 2: ¡Gracias a todos por las sugerencias!
Golfizado:
Legible:
Salida: http://brobin.me/yggdrasil.php
fuente
(39-$j)
,($j*2)
y($i==11)
. -2 reemplazando\n
con caracteres de línea nuevos reales (PHP lo permite en letras). -5 caracteres reemplazando (ambos)for($i=0;$i<12;$i++)
confor($i=12;$i-->0;)
y$i==11
con$i==0
.$s(($i==0?'_':'-'),8)
con$s($i?'-':'_',8)
. (==> -5 caracteres)$s('*',$j*2)
con$s('**',$j)
. Creo que esa es la última mejora que puedo encontrar.($j*2)
en el interior para($j++*2)
y eliminación$j++
defor()
argumentosfor($i=12;$i-->0;)
se puede acortar afor($i=12;$i--;)
- otros 2 caracteres.Delphi 429
Intentará mejorar más tarde.
Golfed
sin golf
fuente
Javascript,
288281Chrome oculta
console.log
s duplicados , use IE en su lugar.Sin golf:
fuente
for(i=0;i++<39-w;)
lugar defor(i=0;i<39-w;++i)
, y así sucesivamente. Además, enp=console.log
lugar dec=console
y enp
lugar dec.log
(aunque solo probé este último en Node.js, no funciona en Firefox). Esto ahorra 12 bytes.c=console.log
tampoco funcionó en Chrome, así que no lo usé. Sin embargo, los trucos for loop ahorran 7 bytes.JavaScript (console.log),
168166(Espacio en blanco solo para legibilidad)
fuente
C (219)
Gracias a todos por los consejos de golf. Logramos reducirlo a 219. No creo que vaya a bajar mucho.
Requerido incluye:
fuente
32
lugar de' '
y en42
lugar de'*'
:)Haskell,
153148Directo, sin trucos, simplemente jugando al golf:
El
%
operador dibuja una sola línea, su primer argumento esString
de longitud 3 que contiene los bordes y los caracteres de relleno en esa línea (ahora suponiendo exactamente 3Char
s, ahorrando 5 bytes), el segundo, anInt
, especifica la mitad del número de caracteres de relleno. La combinación de patrones, el diseño y la adición se usan en combinación para ahorrar bytes al cuidar el "pegamento" entreChar
yString
. En esta segunda versión, también hice#
infinito e introduje untake 85
para volverlo finito (desafortunadamente no se guardaron bytes).El
#
operador crea la secuencia para eln
argumento%
requerido para el árbol:[0..3], [3..7], ...
concatenado.&
es solo una abreviatura de infijo parareplicate
, que ocurre tres veces.El árbol se junta en la última línea, las nuevas líneas se agregan mediante
unlines
.fuente
Lua - 164
fuente
Mathematica
191178Seguro que no es la mejor solución:
Sin contar nuevas líneas. Mathematica sesga la salida, ya que no toma el mismo ancho para un espacio en blanco que para "*" y "/". Pero el resultado es correcto.
fuente
Java - 286
Mi primer golf
Golfizado:
Sin golf:
Prueba aquí
fuente
Pitón 2, 117
Otras versiones que probé incluyen:
fuente
Pyth,
101100999081 bytesPruébalo en línea!
Traducción de Python 3:fuente
a
función definida en su Python equivalente a+
en las listas?<list>+<str>
no es una operación válida, pero podría usarla con la misma facilidad["-"]*11+["_"]
. Decidí definir mi propia función para traducir con mayor precisión lo que Pyth está haciendo realmente.Powershell, 88 bytes
fuente
Maravilloso 118
fuente
C, 194
Este código es un desastre y definitivamente se puede jugar más. Aún así, fue una oportunidad para probar un par de cosas que nunca antes había hecho: usar un literal para una cadena de asteriscos y usar el especificador de ancho
*
con una cadenaprintf
.fuente
Raqueta
223 220 211 204198Golfizado:
Sin golf:
fuente
Asamblea (MIPS, SPIM) ,
768671659655654 bytesPruébalo en línea!
Editar: ahorró ~ 100 bytes codificando cada carácter en un registro y simplemente escribiendo en la pila, luego abusando del hecho de que MIPS no tiene tipos, por lo que se permite una palabra implícita a una cadena ascii.
Edición 2: se eliminó la asignación de pila duplicada. (
addi $sp -4
) ¡Vaya!Edición 3: en reescritura, accidentalmente hizo que el tocón de árbol 1 carácter sea demasiado corto. (36 en lugar de 35). Fijo. -1 Byte estableciendo t8 en 0 y bifurcando en menos que en lugar de en igual. También me obligó a reordenar las operaciones adicionales, lo que desafortunadamente hizo que el tiempo de ejecución tomara 3 códigos de operación más largos.
Edite 4: -4 bytes usando $ 8 y $ 9 en lugar de $ t0 y $ t1. significan lo mismo, pero $ t0 es más fácil de leer. desafortunadamente, todos los demás registros t tienen la misma longitud cuando se escriben bien ($ t2 == $ 10, pero ambos son 3 caracteres), por lo que el resto es un lavado. Podría (en teoría) usar los registros 'a' restantes (5-7. Print syscall usa 4), pero afaik el comportamiento no se define cuando se usa syscall.
No es el mejor en MIPS, pero después de limpiar mi conciencia de esto en una meta discusión, los envío. MIPS no está diseñado para esto (sin salida, no para bucles) pero es bastante divertido hacer esto a pesar de eso.
Desafortunadamente, no he creado una versión comentada para esta nueva solución, pero puede ver la versión anterior, con documentación completa aquí.
Siéntase libre de tomar el crédito y mejorar esta respuesta si puede vencerlo; probablemente me falten algunas optimizaciones aquí y allá.
fuente
addi $sp -4
que realmenteaddi $sp $sp -4
es de SPIM o MIPS en general, así que si alguien más lo hace, hágamelo saber.Cobra - 166
228260fuente