No sabes nada. Lo que hago por " Chaos is a ladder " es una frase memorable de la serie de televisión Game of Thrones .
El propósito de este desafío es construir una escalera desde el caos, en el arte ASCII.
El reto
Entrada
- Ancho de escalera
W >= 3
(entero) - Altura del paso,
H >= 2
(entero) - Número de peldaños,
N >= 2
(entero).
Salida
Una escalera con peldaños horizontales y rieles verticales , todos de 1 carácter de ancho. El ancho de la escalera ( W
) incluye los dos rieles, y la altura del escalón ( H
) incluye el peldaño correspondiente.
Todos los peldaños, incluidos el superior y el inferior, tendrán un trozo de riel vertical de longitud H-1
directamente arriba y abajo. El ejemplo aclarará esto.
La escalera estará hecha de caracteres ASCII imprimibles que no sean espacios en blanco , es decir, el rango inclusivo de !
(punto de código 33
) a ~
(punto de código 126
). Los caracteres reales se elegirán aleatoriamente . Dadas las entradas, cada una de las elecciones aleatorias de caracteres debe tener una probabilidad distinta de cero. Aparte de eso, la distribución de probabilidad es arbitraria.
Se permite el espacio en blanco inicial o final , ya sea horizontal o vertical.
Ejemplo
Dado W=5, H=3, N=2
, una salida posible es la siguiente.
x :
g h
q$UO{
t T
6 <
bUZXP
8 T
5 g
Tenga en cuenta que la altura total es H*(N+1)-1
, ya que hay N
peldaños y N+1
secciones verticales.
Reglas adicionales
Los medios de entrada y el formato son flexibles como de costumbre. Por ejemplo, puede ingresar los tres números en cualquier orden, o una matriz que los contenga.
La salida puede ser a través de STDOUT o un argumento devuelto por una función. En este caso, puede ser una cadena con nuevas líneas, una matriz de caracteres 2D o una matriz de cadenas.
Se puede proporcionar un programa o una función .
Las lagunas estándar están prohibidas.
El código más corto en bytes gana.
Casos de prueba
Para cada W, H, N
uno se muestra una salida posible.
W=5, H=3, N=2:
\ ~
: K
ke:[E
5 u
0 _
8Fr.D
# r
7 X
W=3, H=2, N=2:
$ X
Mb)
0 ]
(T}
j 9
W=12, H=4, N=5:
d Y
P `
5 3
p$t$Ow7~kcNX
D x
` O
* H
LB|QX1'.[:[F
p p
x (
2 ^
ic%KL^z:KI"^
C p
( 7
7 h
TSj^E!tI&TN8
| [
< >
= Q
ffl`^,tBHk?~
O +
p e
n j
W=20, H=5, N=3:
G %
o y
% 3
- 7
U'F?Vml&rVch7{).fLDF
o }
U I
h y
a g
;W.58bl'.iHm\8v?bIn&
, U
N S
4 c
5 r
F3(R|<BP}C'$=}xK$F]^
' h
h u
x $
6 5
Respuestas:
Jalea ,
24 2322 bytesUn programa completo de tomar los tres argumentos
W
,H
,N
e imprimir el resultado.Pruébalo en línea!
¿Cómo?
Construye una máscara de matriz 2D de un solo peldaño y sus secciones verticales a continuación, la repite
N+1
veces y elimina el peldaño superior y luego coloca caracteres o espacios al azar dependiendo del valor de la máscara.fuente
Lenguaje de script Operation Flashpoint ,
643624bytesRidículamente largo porque no hay forma de crear los personajes a partir de los códigos de caracteres.
Llamar con:
Salida:
La escalera es extra caótica porque la fuente no es monoespaciada.
Desenrollado:
fuente
"\n"
funciona, ¿"\xa3"
obtener algo así£
no funciona? Si puede usar escapes Unicode, podría recortar esa matriz suya.\n
es el único escape que se reconoce. (Y""
entre comillas para representar uno"
)05AB1E , 29 bytes
Entrada tomada en el pedido
N, H, W
Pruébalo en línea!
Explicación
fuente
C, 95 bytes
fuente
R ,
1381291119893 bytes-13 bytes gracias a Neal Fultz!
-1 byte gracias a Robin Ryder
Pruébalo en línea!
Función anónima; devuelve el resultado como una matriz.
Gracias a esa pregunta de Word Grids , he estado pensando en matrices mucho más de lo habitual. Observé que los peldaños están en esas filas de la matriz que son múltiplos de la altura del escalón
H
(R está indexada en 1), y que los rieles son la primera y la última columna,1
yW
. Así que creo una matriz de caracteres ASCII aleatorios, y reemplazo esas letras que no coinciden con esos criterios con espacios, y devuelvo la matriz. El enlace TIO lo imprime muy bien.Neal Fultz sugirió una indexación diferente para los caracteres de espacio
[-H*(1:N),3:W-1]
, que reemplaza todos los caracteres excepto aquellos en filas de múltiplos deH
:-H*(1:N)
y no en el borde,3:W-1
<==>2:(W-1)
.R , 121 bytes
Pruébalo en línea!
Una mejora sobre el enfoque original basado en matriz con el que comencé; es el mismo algoritmo, pero los
for
bucles son más cortos que construir e imprimir una matriz (¡pero no si no lo imprimo!)fuente
m[-H*(1:N),3:W-1]=" "
parece un poco más corto: siempre puede reemplazar las pruebasrow
ycol
con un corte en 2-d.sample(33:126,...)
con32+sample(94,...)
.Perl 5 , 81 bytes
Código de 80 bytes + 1 para
-p
.Pruébalo en línea!
fuente
Carbón ,
3432 bytesPruébalo en línea! Toma datos en el orden N, H, W. Aproximación detallada (
Plus(InputNumber(), 1)
actualmente está interrumpida en TIO). Explicación:Mapa sobre el rango
1..H*(N+1)
. Esto significa que los peldaños aparecen cuandoi
es un múltiplo deH
.Únete al resultado de:
mapeo sobre el rango implícito
0..W
:si la columna no es
0
oW-1
y la fila no es múltiplo de,H
entonces genera un espacio;de lo contrario, tome la variable de caracteres ASCII predefinida, inviértala (colocando el espacio en el lugar 94) e imprima un carácter aleatorio de lo que ahora es el primer 94. (Porque
Slice
apesta).Únase usando la cadena vacía. El resultado final se imprime implícitamente.
fuente
NθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θ¿EKA§⮌γ‽⁹⁴«
? Bueno, me bisequé y cometí loa0a6316
rompí.Map
donde se usabanot is_command
cuando se referíais_command
. Entonces se suponía que escribiríasNθGH↓θ→N↑θ*‖O↓F⁻N¹C⁰θUMKA§⮌γ‽⁹⁴
si no hubiera sido por ese error.C (gcc) ,
141131114109107 bytesDebería poder jugar golf un poco ...
Pruébalo en línea!
fuente
i=1
en la declaración global?Perl 6 ,
7673 bytesPruébalo en línea!
Toma (h, n, w) como argumentos. Devuelve una lista de cadenas.
Explicación:
fuente
xx
y en++$
lugar demap
. ¿Quizás puedas encontrar un lugar para jugar golf en cualquier bytes?PowerShell ,
132124bytesPruébalo en línea!
Construimos una escalera compuesta solo por el
#
primero ( ejemplo ), luego recorremos|%{...}
cada personaje yif
es-eq
normal35
, sacamos un nuevoRandom
personaje del rango apropiado. De lo contrario, damos salida (es decir, ya sea un espacio o una nueva línea).fuente
JavaScript (ES6),
117115bytesUna función recursiva que construye la salida carácter por carácter.
"¡Mira mamá, no hay salto de línea literal!"
Manifestación
Mostrar fragmento de código
fuente
String.fromCharCode
, ya que no podía decir honestamente que se me ocurriría eso después de ver esto. Avísame si sientes que el mío ahora es muy similar al tuyo.Python 2 , 142 bytes
Pruébalo en línea!
Bytes guardados gracias a ovs!
fuente
1
embargo, olvidó un en el frente> _>Pyth, 33 bytes
Pruébelo en línea: demostración
fuente
Python 2 , 114 bytes
Pruébalo en línea!
fuente
SOGL V0.12 ,
3231 bytesPruébalo aquí!
Ingrese en el orden N, W, H.
Explicación:
18 bytes sin los caracteres aleatorios: /
fuente
Java 8,
203188168133132130128126 bytesPruébalo en línea!
fuente
W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->0;c=i%H<1|j>W-2|j<2?(char)(Math.random()*94+33):32)System.out.print(c);}}
W-1
, el bucle interno debe realizar una iteración adicional (>=0
+1 byte).W->H->N->{for(int i=0,j;i++<H*N+H-1;){char c=10;for(j=W;j-->=0;c=i%H*j<1|j>W-2?(char)(Math.random()*94+33):32)System.out.print(c);}}
;++i<H*N+H;
: -2 bytes.Haskell ,
226220211190 bytesPruébalo en línea!
Guardado 9 bytes gracias a Laikoni
Guardado 21 bytes gracias a wchargin
Debe ser golfable (
b$(s w)<$[2..h]
yb$((s w)<$[2..h])++[r w]
). No me siento cómodo con IO y el golf.fuente
t w h n= ...
:(w#h)n= ...
.pure
se puede usar en lugar dereturn
. Puedes soltar los paréntesis(d ' ')<$
y(s w)<$
.c=randomRIO('!','~')
, que también le permite en línead=return
. Además,mapM id
es un byte más corto quesequence
.JavaScript (ES6), 144 bytes
Crea la escalera con
#
caracteres y luego reemplaza cada uno con un carácter ASCII aleatorio.Fragmento de prueba
Mostrar fragmento de código
fuente
String.fromCharCode
yMath.random
en una solución: ¿por qué JavaScript nos odia? Se le ocurrió esto para 137 bytes, que es muy similar al suyo, solo que sin la matriz. Ahora me pregunto si una solución recursiva podría ser aún más corta; investigará más tarde.JavaScript (ES6),
129117bytesDesafortunadamente, mientras estaba en el proceso de jugar golf, Arnauld me ganó con una solución similar pero más corta . Al combinar nuestras 2 soluciones, esto puede ser 113 bytes
Incluye una nueva línea final.
Intentalo
fuente
Japt
-R
,42414037342825 bytesToma entrada en el orden
H,W,N
.Intentalo
fuente
QBIC , 76 bytes
Explicación
Ejecución de la muestra
fuente
MATL ,
6350 bytes-13 bytes gracias a Luis Mendo
Pruébalo en línea!
Todavía soy nuevo en el golf en MATL (y no soy súper bueno en MATLAB para el caso), así que sé que esto probablemente no está cerca de lo óptimo. Las propinas son bienvenidas. Toma entrada en orden
N,H,W
.Aquí vamos:
Ahora tenemos una matriz de caracteres aleatorios.
Ahora también hay una matriz lógica para los rieles.
Ahora tenemos 3 matrices en la pila:
Entonces hacemos lo siguiente:
fuente
X"
es3$
por defecto.6Y2
puede ser útil en lugar de13:106
...20+
.~~
esg
.J3G&Ol5LZ(
se puede usar en lugar de1F3G2-Y"h1hJT3$X"
X"
. En ese último consejo,5L
es[1 0]
pero no estoy seguro de cómo que se utiliza en conjunción conZ(
- consigo que se está asignando1
a la primera y última columnas pero no entiendo cómo5LZ(
logra eso. Probablemente te haga un ping en MATL CHATL más adelante sobre esto, así que no te preocupes por eso por ahora.0
es lo mismo que "fin".Z(
asigna a las columnas. Por supuesto, ¡no dudes en enviarme un ping en el chat!Powershell, 102 bytes
Menos guión de prueba de golf:
Salida:
fuente
Ruby , 71 bytes
EDITAR: Vaya, pensé que este era un nuevo desafío debido a la edición reciente para corregir un error tipográfico. Sin embargo, todavía lo dejo porque todavía no hay una respuesta de Ruby.
Pruébalo en línea!
fuente