Introducción
En parte inspirado por esta pregunta de StackOverflow , dibujemos un Lightning Bolt ASCII.
Escriba un programa que tome un número entero positivo a n
través de STDIN o línea de comando y envíe el rayo ASCII a continuación.
Entrada
Entero positivo que n
representa el número de niveles de zig-zag de rayos para dibujar
Salida de ejemplo
n = 1
__
\ \
\ \
\ \
\/
n = 2
__
\ \
\ \
__\ \
\ __\
\ \
\ \
\/
n = 3
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
n = 4
__
\ \
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
__\ \
\ __\
\ \
\ \
\/
. . . etc.
Notas adicionales
- Puede escribir una función que tome
n
como único argumento e imprima o devuelva la cadena. - Los espacios finales y las nuevas líneas están bien.
- No hay espacios iniciales excepto donde sea apropiado para el patrón designado.
- El código más corto en bytes gana.
Respuestas:
Java,
201196189186182 bytesObviamente no es el mejor, pero está en Java.
fuente
main
método.main
no debería contar para el recuento de bytes, y algunos idiomas que tienen palabras clave detalladas deberían tener permitidas las macros. Entonces sería interesanteCJam, 41 bytes
Probablemente pueda exprimir algunos bytes más, pero aquí hay algo de compresión. Escogí una base que no conduciría a que no se puedan imprimir.
Pruébalo en línea .
El rayo se divide en
top + middle * (input-1) + bottom
, dondetop
,middle
,bottom
(comprimido con la conversión de base) son(Los espacios están marcados con
.
s)40 bytes
Gracias a Optimizer
fuente
top + middle * (input-1) + bottom
, me recordó que powershell podría multiplicar cadenas: PJavaScript ( ES6 ) 76
Usando una cadena de plantilla, las 3 nuevas líneas son significativas y contadas.
Prueba de ejecución del fragmento (solo Firefox)
fuente
PowerShell,
7263 bytesEstúpido Windows y tu \ r \ n ... ¡Esto podría haber sido
6759 bytes!fuente
PHP -
84 7978 bytesVer el origen del resultado o envolverlo
<pre />
para verificar los resultados. Las nuevas líneas son obligatorias en el código.El -1 podría moverse al
define
, pero lo consideré un truco.1ra mejora: reemplazar
\n
con nuevas líneas reales2da: Como puedo definir una var, utilicé un CONTANTE, guarda la
$
. + un espacio innecesario en str_repeat3rd: eliminó accidentalmente el -1, pero guardó un byte utilizando en
<?=
lugar de echo.fuente
Pyth,
6054 bytes (Gracias @isaacg)Mi primer intento en Pyth, probablemente muy malo.
Verifícalo aquí .
fuente
\n
. Además, el primero\\
en el programa podría ser solo un\
.CJam, 50 bytes
Pruébalo aquí
fuente
Brainfuck, 164 bytes
Con comentarios:
Bien, ¿cómo responde Brainfuck a Java y C #?
fuente
> <> (Pez), 409 bytes
Ejecute por
fish.py bolt.fish --value n
dóndebolt.fish
está el nombre del programa yn
es su entrada entera positiva.No es corto, pero se ve genial. Mi intento fue intentar que pareciera un rayo. Además, siempre errores al finalizar.
fuente
Perl, 69 + 1
69 caracteres, más 1 para el
-n
cambio de línea de comando para obtener la entrada de stdin.Ejemplo de uso:
fuente
perl -pe'$_="__\ns s"."__s\\ __\\\n s"x--$_." s \\/";s!s!\\ \\\n!g'
. También\n
se puede reemplazar con un salto de línea literal para otros 3 caracteres guardados.Javascript (ES6), 86
No voy a ganar, pero me encanta la solución de 1 línea y odio los cortes.
fuente
atob
documentaciónC, 101 bytes
Mi implementación no tan original en c
fuente
C #, 221 bytes
Esta no es la mejor o la respuesta más pequeña, pero pensé que lo intentaría. La respuesta de Fsacer es mucho más corta y creo que deberías echarle un vistazo. Simplemente decidí hacer esto solo como un método alternativo realmente.
fuente
class C{static void Main(string[]n){var e=int.Parse(n[0]);var o=@"__{0}\ \{0} \ \{0}";while(e-->1){o+=@"__\ \{0}\ __\{0} \ \{0}";}System.Console.Write(o+@" \ \{0} \/{0}","\n");}}
C #, 166 bytes
EDITAR 1: mejoró el resultado de 186B a 173B
EDITAR 2: guardó 1B utilizando en
PadLeft
lugar dePadRight
EDITAR 3: guardó 8B eliminando
PadLeft
el segundo parámetro y utilizando literales de cadena textualesfuente
public
al principio, y en lugar de usar una matriz de caracteres, puede usarString.PadRight(int, char)
, que es más corto y le permitirá usar un carácter ascii que no necesita escapar.Awk, 101 + 8 bytes
101 caracteres, más 8 para
-v n=$1
obtener un entero del shell.Nuevo en este sitio de SE, no está claro si esos parámetros deberían contar.
Sin golf
Ejemplo de uso:
fuente
-v
parte. Sin mencionar que toda la idea variable es innecesaria, al igual que elEND
bloque separado . 89 caracteres:{l="\\ \\";print"__\n"l"\n "l;for(;--$1;)print"__"l"\n\\ __\\\n "l;print" "l"\n \\/"}
pastebin.com/NCznF9kHPython
978278char:Este es mi primer código de golf
@ (^ _ ^) @
Prueba aquí
fuente
C,
119108bytesPrimer intento, 150 bytes
main
está aceptando un argumento int, así que ejecuta de esta manera:./lightning . . .
pasar4
como argumento.fuente
Pitón 3,
126118117 bytesSolo algo para comenzar con nosotros.
fuente
[0]*(n-1)
para obtenern-1
iteraciones. También puedes escribir(n-1)
como~-n
.i in [0]
ai in[0]
.for i in[0]*~-n:p(' \\ \\\n__\\ \\\n\\ __\\')
.Python 2, 76 bytes
Simplemente imprima las primeras tres líneas, luego imprima las siguientes tres líneas
n-1
veces, y luego imprimir las últimas 2 líneas. Todo de una vez.Y aquí hay un buen intento en una alternativa que (desafortunadamente) usa exactamente el mismo número de bytes:
fuente
*
, eso me da 77 bytes, o no lo alineo, pero eso cuesta 79 bytes. :(F #, 98 caracteres, 105 bytes
fuente
CJam 54 Chars
No es el más corto, pero desde que comencé CJam hoy, estoy contento con él.
Intentalo
fuente
Pascal:
149142141137 caracteresDespués de todo, la única fortaleza de golf de Pascal es que las barras invertidas no necesitan escapar ...
fuente
for n:=2 to n do
También funciona.Hojas de cálculo de Google, 60 bytes
Función de hoja de trabajo anónima que toma entrada del rango
[A1]
y salidas a la celda que llama.fuente
Perl 5 , 58 + 1 (
-n
) = 59 bytesPruébalo en línea!
fuente
SpecBAS -
135104 bytesEl apóstrofe en las instrucciones PRINT mueve el cursor a una nueva línea.
SpecBAS le permite incorporar caracteres ASCII en una cadena a través de
#n
, por lo que ha incorporado algunos retornos de carro (ASCII 13).Construyó una cadena usando retornos de carro y otros caracteres, luego solía
REP$
repetirla la cantidad requerida de veces.fuente
PHP 155
Versión sin golf
fuente
echo$l=PHP_EOL,"__$l";$g="\\ \\$l";for($i=0;$i<$argv[1];$i++){echo($i?"__$g\\ __\\$l":$g)," $g";}echo" $g",' \\/',$l;
$i=0
; quite los corchetes para elfor
bucle; incremente el contador dentro del bucle (echo($i++?"…
).Java,
183180 bytesLua, 110 bytes
fuente
Retina , 46 bytes
Toma la entrada como unario.
Cada línea debe ir a su propio archivo y
#
debe cambiarse a nueva línea en los archivos. Esto no es práctico, pero puede ejecutar el código tal cual, como un archivo, con la-s
bandera, manteniendo los#
marcadores. Puede cambiar los#
's a nuevas líneas en la salida para facilitar la lectura si lo desea. P.ej:El algoritmo es muy simple. Los pares de líneas (expresiones regulares - pares sustitutos) realizan los siguientes pasos de sustitución:
1
de la entrada unaria.\ \
partes comprimidas del rayo para obtener la salida deseada.fuente
Powershell, 59 bytes
Script de prueba:
Salida:
Explicación:
Este script es tradicional
top
+middle
+bottom
. Solo hay una cosa inteligente: la coma antes de la cadena central obliga a repetir un elemento de matriz en lugar de una cadena. Por lo tanto, cada unomiddle
se muestra en una nueva línea.fuente