Según yo, un tornado se ve así:
########
#######
######
#####
####
###
##
#
Este tornado comienza con el ancho n
, y en cada línea siguiente, se elimina un carácter de izquierda o derecha, dependiendo de la entrada.
Entrada
La entrada será una lista de algún tipo de dos valores únicos (también funciona una cadena de dos caracteres únicos) y un entero positivo opcional para indicar el ancho inicial. Si no se toma el entero opcional, entonces el ancho inicial es 1 mayor que la longitud de la lista. Deje que el ancho inicial sea n
.
Como hacer un tornado
En mi ejemplo, elijo que mi lista contenga 1
sys 0
, aunque puede elegir dos valores constantes distintos o una cadena de dos caracteres constantes distintos.
La primera fila consistirá n
en caracteres que no sean espacios en blanco (puede elegir cualquier carácter consistente; elijo #
para mi ejemplo).
Luego, para cada número de la lista, si el número es 0
, elimine el carácter izquierdo y cree una nueva fila; si es a 1
, elimine el carácter correcto y cree una nueva fila.
Por lo tanto, el tornado anterior es la salida para 8, [1, 0, 0, 0, 1, 0, 0]
.
Salida
La salida puede ser una lista de cadenas, una lista de listas de caracteres o una cadena de varias líneas. Se permite el espacio en blanco al final de cada línea y se permite una nueva línea al final.
Casos de prueba
Estos casos de prueba incluyen el ancho inicial y las listas de uso de 1, 0
.
5, [1,0,0,1]
#####
####
###
##
#
10, [1,0,0,1,0,1,0,0,1]
##########
#########
########
#######
######
#####
####
###
##
#
7, [1,1,1,1,1,1]
#######
######
#####
####
###
##
#
100,
[1,0,0,0,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,0,0,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,0,0,0,1,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,0,1,0,0,1,1,0,0,0,0,1]
Reglas
- Se aplican lagunas estándar
- ¡El código más corto en bytes gana! código-golf
- El fondo no tiene que ser un espacio (olvidé especificar esto antes).
- Su idioma solo tiene que admitir números (anchos) que pueda manejar, pero si su intérprete fue reescrito con un tamaño de número mayor, tiene que funcionar teóricamente.
Respuestas:
V ,
15, 12 bytesPruébalo en línea!
l
por la derecha (tiene mucho sentido, ¿no?) y>
por la izquierda.fuente
Python 2 ,
6659 bytes-7 bytes gracias a Arnold Palmer
Pruébalo en línea!
0
quitar de la derecha,1
quitar de la izquierdafuente
len(z)+1
conx
si "entero positivo opcional" significa que no tiene que usarlo. La redacción de la pregunta hace que parezca que está permitido ya que dice "Si no se toma el entero opcional" versus "Si no se da el entero opcional".vim,
8582 bytes<ESC>
es 0x1B,<CR>
es0x0D
,<C-v>
es 0x16. Y<ESC>OH
es una secuencia multibyte que representa la tecla INICIO.La entrada se utiliza
a
como el valor "eliminar a la izquierda" yb
como el valor "eliminar a la derecha".No hay enlace TIO, desafortunadamente. No pude hacerlo funcionar bajo V. Pruebe copiando el código en tornado.vim (reemplazando
<ESC>
, etc. con sus bytes reales) y ejecutándolo de la siguiente manera:-3 bytes debido a la sugerencia de Neil.
fuente
^
lugar de␛OH
?^
va al primer personaje no en blanco.␛OH
va al primer personaje.0
no me ...05AB1E ,
119 bytes-2 bytes gracias a Erik the Outgolfer
Eliminar de la izquierda:
1
Eliminar de la derecha:
0
Pruébalo en línea!
fuente
0×ηsηO
tiene mucho potencial pero no puedo entenderlo en 11 bytes.ðy×ì
conyú
de -2.Retina ,
3028 bytesPruébalo en línea! Toma solo una cadena de 0s y 1s y calcula el ancho en función de la cadena. Explicación: La primera etapa toma la cadena de entrada y la duplica una vez para cada punto límite, insertando una
#
en ese punto. La segunda etapa luego cambia todos los dígitos después del#
más#
s, creando el triángulo. La tercera etapa elimina todos los restantes y cambia los ceros a espacios que dan como resultado el "bamboleo" del torndao.fuente
J, 32 bytes
sin golf
Pruébalo en línea!
fuente
' #'#~0(,.#\.)@,+/\
, donde la entrada se invierte de la muestra ya que el desafío le permite elegir los dos valores distintos.Perl, 43 bytes
Código de 42 bytes + 1 para
-l
.Pruébalo en línea!
fuente
R ,
8582 bytes3 bytes guardados gracias a Giuseppe
Pruébalo en línea!
Explicación:
fuente
{}
y usé una nueva línea literal en lugar de'\n'
Haskell, 50 bytes
Pruébalo en línea!
Si la lista de entrada puede ser una lista de nombres de funciones, podemos guardar un byte
Haskell, 49 bytes
Ejemplo de uso:
h 5 [g,f,f,g]
.Pruébalo en línea!
Cómo funciona:
fuente
Python 2,
5857 byteseditar: guardado 1 byte gracias a xnor
Pruébalo en línea!
1 para eliminar desde la izquierda, 0 para eliminar desde la derecha.
fuente
s=" "*i+s[:-1]
con el intercambio izquierdo y derecho.R ,
116109102 bytes-5 bytes gracias a user2390246 (y otros 2 me salvé)
Superado por el usuario 2390246
Pruébalo en línea!
Devuelve una función anónima que toma
n
y un vectorl
con0
para eliminar de la izquierda y1
para eliminar de la derecha, e imprime el resultado en la consola con el formato correcto.fuente
#
s será n-i + 1: ¡ Pruébelo en línea! Aunque hay un enfoque un poco mejor si solo imprime línea por línea en lugar de construir una matriz: codegolf.stackexchange.com/a/133720/66252Japt ,
1413 bytes-1 byte gracias a @ETH
La entrada es la matriz, luego el tamaño. Los valores de matriz son
""
o" "
, que representan la eliminación de la derecha o la izquierda, respectivamente. Utiliza en"
lugar de#
y devuelve como una matriz de cadenas.La idea aquí era crear primero una matriz del relleno izquierdo para cada línea, de ahí las cadenas de entrada. Luego, cada línea obtiene la
"
s agregada, utilizando el hecho de que la cantidad de"
s disminuye en 1 cada vez.Pruébalo en línea!
Todos usan la
-R
bandera para formatear la salida uniéndola con nuevas líneas.Explicación
Implícito:
U
= matriz de entrada,V
= número de entrada.Reduzca acumulativamente la matriz de entrada (
å
) con concatenación de cadenas (+
). Esto da como resultado la matriz de cada valor intermedio de la reducción. Luego, anteponga (u
) una cadena vacía (P
) a la matriz.Asigna
£
cada valor a sí mismo (X
) concatenado con ...El carácter de comillas (
Q
) repetido (p
)V--
(V´
) veces. Esto también disminuyeV
cada vez.fuente
YnV
aV´
++
o--
en Japt.ArnoldC , 3132 bytes
ArnoldC no tiene concatenaciones de cadenas, por lo que genera un tornado de
8
sy usa1
s para espaciarlo. ArnoldC también solo admite enteros de hasta 16 bits, por lo que se desborda con una entrada de más de 7 dígitos. (Por lo tanto, solo hará mini-tornados)1
está a la izquierda, cualquier otro dígito está a la derecha (aunque no lo recomendaría0
, ya que no puede comenzar con eso).Entrada:
1221122
Salida:
Código de golf:
Pruébalo en línea!
Código no protegido (5178 bytes):
fuente
Haskell ,
6764 bytesLa entrada se voltea:
0
significa eliminar a la derecha y1
eliminar a la izquierda:Pruébalo en línea!
"Ungolfed"
fuente
Java (OpenJDK 8) ,
138133 bytesPruébalo en línea!
fuente
C,
6863 bytesEsto hace uso de la especificación de ancho de campo dinámico en una
printf()
cadena de formato. La función se llama así:fuente
int s=0;
y poniendos;
antes def(w,i)
. Como asíJavaScript (ES6), 64 bytes
Función anónima que toma parámetros en la sintaxis de curry (a) (b). En la matriz b, una cadena vacía representa la eliminación desde la derecha y un espacio representa la eliminación desde la izquierda.
Usando 1 y 0 como en los ejemplos, la puntuación es 70
Prueba
fuente
PowerShell , 53 bytes
Pruébalo en línea!
Toma la entrada
$a
como el entero opcional y$b
como la matriz de1
y0
s. (Tenga en cuenta que mi matriz de1
y0
es flip-flop de los desafíos.) Construye la línea inicial#
y la deja en la tubería. Luego recorre de0
a$a
. En cada iteración, generamos un número de espacios posiblemente incrementado, seguido de un número de decrementos previamente decrementados#
. Sí, esto escupirá una nueva línea en blanco al final, ya que estamos haciendo un ciclo en$a
lugar de la cantidad de elementos en la lista.Todas las cadenas individuales se dejan en la tubería y la salida con un separador de nueva línea entre ellas está implícita al finalizar el programa.
fuente
C #, 181 bytes
Pruébalo en línea!
Versión completa / formateada:
fuente
Carbón , 17 bytes
Pruébalo en línea! El enlace es a la versión detallada más cercana del código. Explicación:
La primera entrada da el número de iteraciones de bucle.
Dado que los índices de bucle tienen un índice cero, agregamos uno aquí para obtener el número correcto de
#
s.Comenzar desde la parte inferior del tornado y avanzar ahorra un byte, pero luego debemos invertir la segunda entrada para poder indexar el dígito actual.
Si el dígito actual es a
1
, muévase hacia arriba. Esto hace que la fila anterior tenga un extra#
al final.Si el dígito actual es a
0
, muévase hacia arriba y hacia la izquierda. Esto hace que la fila anterior tenga un extra#
al comienzo.fuente
C # , 159 bytes
Explicación
Pruébalo en línea!
fuente
PHP, 136 bytes
Guardar en un archivo php y probar con
php file.php 8 '1,0,0,0,1,0,0'
. Salida:Por desgracia, preparar la entrada es la mitad del trabajo.
Otra versión (158 bytes) usando en
str_repeat
lugar deprintf
y ...goto
de todas las cosas:fuente