Historia de fondo
Descargo de responsabilidad: puede contener información inventada sobre canguros.
Los canguros atraviesan varias etapas de desarrollo. A medida que crecen y se fortalecen, pueden saltar más alto y más, y pueden saltar más veces antes de tener hambre.
En la etapa 1 , el canguro es muy pequeño y no puede saltar en absoluto. A pesar de esto, constantemente requiere alimentación. Podemos representar un patrón de actividad de canguro de etapa 1 como este.
o
En la etapa 2 , el canguro puede hacer pequeños saltos, pero no más de 2 antes de que tenga hambre. Podemos representar un patrón de actividad de canguro de etapa 2 como este.
o o
o o o
Después de la etapa 2, el canguro mejora rápidamente. En cada etapa posterior, el canguro puede saltar un poco más alto (1 unidad en la representación gráfica) y el doble de veces. Por ejemplo, el patrón de actividad de un canguro en etapa 3 se ve así.
o o o o
o o o o o o o o
o o o o o
Para la etapa n , el patrón de actividad consiste en 2 n-1 saltos en forma de V de altura n .
Por ejemplo, para la etapa 4 , hay 8 saltos de altura 4 .
o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o o o o o o o o
o o o o o o o o o
Tarea
Escriba un programa completo o una función que tome un entero positivo n como entrada e imprima o devuelva la representación artística ASCII de una etapa n patrón de actividad de canguro de .
Los espacios en blanco circundantes y los códigos de escape ANSI están permitidos, siempre que el patrón se vea exactamente como se muestra arriba.
Si elige una función que devuelve la salida, debe devolver una sola cadena o matriz de caracteres que muestre la salida correcta cuando se imprima. No está permitido devolver una serie de cadenas.
Puede usar cualquier carácter imprimible que no sea un espacio en blanco en lugar de o
, siempre que sea coherente dentro del patrón de actividad y en todos los patrones en su respuesta.
Este es el código de golf ; ¡que gane la respuesta más corta en bytes!
o
. ¿Puedes usar cualquier personaje para representar los espacios (siempre que sean diferentes?)?Respuestas:
05AB1E ,
1210 bytesExplicación:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
MATLAB,
92 90 8684 bytesPruébalo en línea!
eye
crea una matriz de identidad. Si lo volteamos y concatenamos el original, es decir[fliplr(p),p]
, obtenemos (paran=3
):Con
repmat(...,1,2^n/2)
repetimos estos2^(n-1)
tiempos y obtenemosDe esto simplemente eliminamos las columnas innecesarias, con
A(:,n+1:n:end)=[];
fuente
Carbón , 14 bytes
Pruébalo en línea!
Explicación
Nλ
introduce un número entero enλ
.P^
es una impresión multidireccional (SE y SW) de×λo
(multiplicación de cadenas deλ
cono
). LuegoF⁻λ¹
ejecuta un tiempo de bucle forλ - 1
, en el que se‖O→
refleja todo a la derecha con superposición.fuente
P^
es una impresión multidireccional (SE y SW) " ¡Genial, eso es algo que no se ve muy a menudo en los lenguajes de programación!Python 2 , 87 bytes
Pruébalo en línea!
Utiliza una fórmula para las coordenadas
(i,j)
que contienen un círculo, luego une e imprime la cuadrícula. Hay mucho olor a golf aquí''.join
, dos rangos anidados,for
porexec
lo que es probable que haya mejoras.fuente
Python 2,
8381 bytesPruébalo en línea!
fuente
exec
truco puede salvar algunos más.Befunge,
9891 bytesEsto utiliza un
,
en lugar deo
, ya que nos permite guardar un par de bytes.Pruébalo en línea!
Explicación
Dado el número de etapa, n , comenzamos calculando los siguientes tres parámetros del patrón:
El jump_len se normaliza para evitar que sea cero para un canguro etapa 1 con:
Luego podemos generar el patrón de salto iterando sobre las coordenadas x e y del área de salida, y calculando el carácter apropiado para la salida de cada ubicación. La coordenada y cuenta regresiva de n - 1 a 0, y la coordenada x cuenta regresiva de ancho - 1 a 0. Determinamos si es necesario mostrar un punto con la siguiente fórmula:
El booleano show_dot se utiliza como índice de tabla para determinar el carácter real que se generará en cada ubicación. Para ahorrar espacio, usamos el comienzo de la última línea de origen como esa tabla, por lo que nuestro
o
personaje termina siendo a,
.fuente
J ,
2825 bytesGuardado 3 bytes gracias a @ Conor O'Brien .
Esto se basa en el truco del palíndromo de la solución de @ muddyfish .
Pruébalo en línea!
Explicación
fuente
' o'{~3 :'(}."1,.~|."1)^:y=i.y'
. Desearía poder encontrar una manera de eliminar ese verbo explícito ... Maldición^:
.u&v
bastante agradable.Pyke, 11 bytes
Pruébalo aquí!
fuente
Haskell , 100 bytes
Pruébalo en línea! Uso:
k 3
.Explicación:
Dada una fila
r
, se establece una columnac
ym = 2(n-1)
unao
sic mod m
es igualr
om-r
. La comprensión de la lista más externa establece el rango der
den-1
a0
, la siguiente establece el rango dec
de0
am*2^(n-1)
y el más interno actúa como retorno condicional'o'
si se cumple la fórmula anterior y de lo' '
contrario. Esto produce una lista de cadenas que se convierte en una sola cadena separada por una nueva líneaunlines
. Paran=1
la función produce un error de división por cero, por lo que este caso se maneja explícitamente en la primera línea.fuente
['o'|mod c m`elem`[m-r,r]]
parte!C #,
180, 173171 bytesNo ganará esto, publicando para otros concursantes de C # como algo que pueden vencer.
programa completo:
editar: -7 bytes gracias a @KevinCruijssen
editar: -2 bytes, simplificado si
fuente
,i
; puede reutilizar eni
lugar den-1
después del if-check;||
puede ser|
;j++
puede eliminarse y++
agregarse aj
. En total:(n)=>{var s=new string[n];for(int x=0,a=1,j=0,i;j<=Math.Pow(2,n)*(n*n-n);){i=j++%n;s[n-i-1]+=x%n==i?'o':' ';if(i==n-1){x+=a;a*=x==i|x==0?-1:1;}}return string.Join("\n",s);};
( 173 bytes )||
y&&
seguí en el programa completo.Pyth , 30 bytes
Un programa que toma la entrada de un número entero e imprime el resultado. Utiliza una comilla en
"
lugar deo
.Pruébalo en línea!
Cómo funciona
fuente
Python 2 ,
11511310898 bytesPruébalo en línea!
Utilizando
range(-n+1,n-1)
para crear el número absoluto de espacios entre el fondo y elo
para generary luego agregando más copias, girando 90º todo y agregando la última
o
en la parte inferior derechafuente
J ,
5847 bytesSe guardaron 11 bytes usando la idea de matriz de identidad de la solución de @ flawr .
Pruébalo en línea!
Una aplicación directa de la definición.
Explicación
Para
n = 3
, crea la matriz de identidad de orden n .Luego espejo para hacer
Repita eso 2 n -1 veces y suelte el encabezado de cada fila en los duplicados
Utilice esos valores como índices en la matriz de caracteres
[' ', 'o']
para generar una matriz de caracteres 2Dfuente
JavaScript (ES6), 83 bytes
fuente
Jalea , 11 bytes
TryItOnline!
¿Cómo?
El carácter imprimible utilizado es
0
.Se basa en el método de la respuesta de Dennis a su pregunta anterior sobre el tema de los canguros.
fuente
ŒḄ¡Ṭ€z0o⁶ṚY
.MATL, 27 bytes
Pruébelo en MATL Online
fuente
Python 3 , 177 bytes
Pruébalo en línea!
fuente
Perl 6 ,
1049388 bytesInserta
o
una matriz 2D y luego la imprime.fuente
05AB1E , 16 bytes
Pruébalo en línea!
¿Porque y como?
fuente
Java 8, 254 bytes
Golfizado:
Sin golf:
Salida del programa:
fuente
PHP, 157 bytes
Sin golf:
fuente
'o'
con1
y cada''
con0
. Espero que funcione, también, los espacios pueden ser reemplazados porO
o9
. Lo importante es el patrón, de acuerdo con las reglas. Pero verifique primero