Tu trabajo es recrear esta obra de arte:
_____
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
|
|
|
|
_____|
La respuesta debe recrear esto e imprimir esto como resultado. Todos los idiomas están permitidos, no se requiere impresión directa de arte, ofc, se requiere algún nivel de manipulación. La respuesta con la menor cantidad de bytes gana.
Cierra el jueves a las 6:30 a.m. UTC más o menos.
Mi amigo, que hizo esto con Java, me mostró lo original, se negó a mostrarme el código fuente y ahora posiblemente lo deslumbraré con la brillantez de otros idiomas. :RE
No puede usar ningún personaje alternativo (¿lo hace más fácil?).
Tabla de líderes actual
- Pyth - 28 bytes - isaacg
- CJam - 30 bytes - Runer112
- CJam - 32 bytes - Martin Büttner
Mayores votos: C - 73 bytes - Paul R
isaacg se lleva la corona por pasar el desafío de la escalera con Pyth. ¡Cuidado con más desafíos como estos en PPCG!
code-golf
ascii-art
kolmogorov-complexity
hay un café
fuente
fuente
Respuestas:
Pyth,
2928Pruébalo aquí
Una solución bastante sencilla, con el truco "agregar cinco espacios o cinco guiones bajos" de la solución de @ xnor, pero con el bucle de 0 a 20, no de 20 a 0.
fuente
C,
8680767573 bytesfuente
for(i=25;i--;)
i=26
. Además de esto,' '
podría cambiarse32
por un personaje adicional. Mi solución es 2 caracteres más larga después de estas optimizaciones :(main(i){for(i=21;i--;)printf("%*s%c\n",i/5*6+5,i%5?"":"_____",i<20?'|':0);}
1. Simplifique la fórmula para la longitud 2. Como dice @Allbeert, puede usar el código ascii para,' '
pero ¿ por qué detenerse en ASCII 32 cuando ASCII 0 lo hará? También funciona bien para mí en""
lugar de" "
'|'
impresión?c;main(i){for(i=21;i--;c='|')printf("%*s%c\n",i/5*6+5,i%5?"":"_____",c);}
Java,
198158156146 bytesEsto probablemente se puede acortar mucho. Como de costumbre, las sugerencias son bienvenidas.
Sangrado (un poco):
Gracias Martin Büttner, Rainbolt y Geobits.
fuente
Brainfuck (1065 bytes)
No es bonito, no es corto ... ¡pero lo optimizaré más adelante!
fuente
CJam,
3630 bytesPruébalo en línea.
Mi solución inicial de 36 bytes generó el resultado en la orientación de salida. A pesar de mis intentos de exprimir más bytes del algoritmo, no pude. Entonces vi la brillante estrategia de Martin de generar columnas en lugar de filas y transponer el resultado. Me di cuenta de que probablemente era un mejor enfoque, así que partí para crear una solución basada en la transposición.
Sin embargo, mi enfoque para implementar esa estrategia varía bastante. En lugar de generar columnas completas, uso una solución iterativa que sangra cualquier "paso" ya generado y agrega agrega un nuevo paso en cada iteración. Entonces, la primera iteración del bucle principal genera esto:
La segunda iteración del bucle principal sangra el paso existente y agrega uno nuevo después:
Y las cinco iteraciones completas del bucle principal generan esto:
Después de esto, todo lo que hay que hacer es eliminar la primera línea, que de lo contrario se convertiría en el elevador no deseado para el paso inferior, y transponer.
fuente
Python 2,
807774 bytes¡Eliminé el doble
exec
y encajé todo en unoprint
!fuente
Clip, 46
Explicación
fuente
CJam,
3632 bytesPruébalo aquí.
También intenté usar una fórmula explícita, pero es más larga en CJam ... tal vez ayude a alguien más:
Explicación
Descubrí que la escalera se puede construir mucho más fácilmente si a) transpone la cuadrícula yb) invierte las líneas:
Así que primero estoy construyendo eso, luego revertir, luego transponer.
fuente
Pitón 2, 59
Las 21 líneas están indexadas por
n
in[20,19,...,1,0]
. Primero imprime 6 espacios para cada "paso" que estamos arriba (menos 1), calculado comon/5*6
. Luego, imprime cinco espacios, excepto que estos son guiones bajos para múltiplos de cinco. Finalmente, imprime una línea vertical, excepto la línea superiorn=20
.fuente
JavaScript,
1151079694898783 bytesEsto es demasiado largo para ganar, pero es la primera vez que encuentro una respuesta en PCG.SE, y estoy un poco orgulloso de haber hecho algo posible.
Con algunos consejos sintácticos útiles, acorté el código significativamente, ¡incluso por debajo del umbral de la barra de desplazamiento!
fuente
alert
. Si lo ejecuta en la consola, funciona bien sin él. Además, el punto y coma dentro de la última llave no es necesario. Puede guardar 1 byte usando en(y/5-.2)
lugar de((y-1)/5)
s+='\n'
despuésy--
y deshacerse de las llaves para que se vea asífor(s='',y=21;y>0;y--,s+='\n')
. También inicialicé la s dentro del bucle for para que su código sea una sola declaraciónfor(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~~(y/5-.2)+5-x?5*~~(x/6)+1-y?' ':'_':'|'
si volteas tu expresión ternaria, puedes probarnumber - x
cuál es 0 si ambos términos son iguales, ahorrándote 2 bytes más.for(s='',y=22;--y;s+='\n')for(x=0;++x<29;)s+=6*~(~-y/5)-~x?4+5*~(x/6)+y?' ':'_':'|'
es 83ECMAScript 6,
14213812991 bytesUn agradecimiento especial a @ edc65 por realmente reelaborar esto.
Mostrar fragmento de código
La lógica de la versión original revisa el comentario @ edc65 sobre cómo se transformó.
fuente
new
constructor antesArray
para guardar algunos bytes.new
era necesario.repeat
[1,2,3,4].map((a,b)
y usando solo b =>[0,1,2,3].map(b
(-4)MATLAB, 68 bytes
Tengo la fuerte sensación de que MATLAB debería poder hacerlo mejor, pero no puedo pensar en una manera.
Crea las escaleras al revés y las voltea. Mi taumómetro se rompió debido a todas las constantes mágicas alrededor.
'|'
se deja intencionalmente como está (en lugar de punto de código ascii) para inicializarp
yw
como una matriz de caracteres.fuente
'|' = 124
de todos modos, por lo que no cuesta ningún carácter adicional.Rubí, 48
Enfoque antiguo, 68
fuente
'_'
se pueden escribir como?_
. 3. Las nuevas líneas se pueden incrustar directamente en cadenas (para que pueda hacerlo"<linebreakhere>|"
). 4. Los paréntesis que no son necesarios. El finalputs
se puede reemplazar con$><<
(lo que le permite deshacerse del espacio, incluso después de usarlo?_
). ¡Seguid así! :)(1..4).map
por4.times
y luego usar en4-i
lugar de5-i
.Julia, 83 bytes
En Julia, la concatenación de cadenas se realiza con el
*
operador y la repetición de cadenas con^
.fuente
> <> ,
108104100 bytesUna solución simple> <>, usando la misma estrategia que mi respuesta de Python . La principal diferencia es que> <> no tiene multiplicación de cadenas (o incluso cadenas), por lo que todo eso se hace con bucles.
Explicación
fuente
Groovy,
9871 bytesEstoy bastante seguro de que se puede reducir de alguna manera :) acortado por @Score_Under
fuente
' '*(i-(i-1)%5)
, soportes Sacar de todo('_____'+(i==25?'':'|'))
, reemplazar el'_____'
con'_'*5
, y si le da la vuelta el último condicional puede utilizar% como un operador de desigualdad poco ortodoxo:(i%25?'|':'')
. Esto deberíaPerl, 50
Trate de mí .
fuente
T-SQL, 276 bytes
fuente
Visual FoxPro 9.0, 261 bytes
n = Número de pasos
total de 175 caracteres, pero tuvo que salir al archivo para mostrar correctamente, por lo que menos 43 caracteres para operaciones de archivo = 132 caracteres.
Nota para el respondedor: el recuento de bytes es para el código fuente de trabajo absoluto, y el contador de bytes dice que son 261 bytes, por lo que es así.
fuente
Bash (+ tac de coreutils): 110 bytes
Esto se puede pegar directamente en la terminal.
fuente
|tac
eso, no funciona del todo. Y ejecuté esto en Git Bash, así que debería suicidarme.código de máquina x86, 48 bytes
Código de ensamblaje equivalente:
Salida:
Lamento que la salida sea diferente; Espero que sea aceptable.
Esto se ejecutó en DOSBOX
fuente