Problema
Inspirado en un desafío anterior haciendo algo similar
Dada una n
salida de entrada entera positiva, una forma que sigue este patrón:
entrada n=1
:
* *
*
* *
entrada n=2
:
** **
****
**
****
** **
entrada n=3
:
*** ***
*** ***
*****
***
*****
*** ***
*** ***
y así...
Tiene estas propiedades:
n*2+1
líneas altas
los "brazos" son n
anchos excepto cuando se fusionan
la línea central es n
ancha
si n
es incluso las líneas arriba y abajo del centro son n*2
anchas
si n
es impar, las líneas arriba y abajo del centro son n*2-1
anchas
Reglas
- Nuevas líneas finales aceptadas
- Se aplican lagunas estándar
- Los bytes más cortos ganan
- La salida puede imprimirse o una cadena o conjunto de cadenas
Ediciones
n=0
no necesita ser manejado- Espacios finales permitidos
1
lugar de*
y en0
lugar de espacio?Respuestas:
Carbón ,
1312 bytesGracias a @ErikTheOutgolfer por un byte
Pruébalo en línea!
Esta es mi primera respuesta al carbón, y estoy bastante seguro de que no está tan bien como podría ser, pero pensé que comenzaría en algún lado.
fuente
I
para -1.MATL , 16 bytes
Pruébalo en línea!
Explicación
Considere la entrada
2
como un ejemplo. El contenido de la pila se muestra con los más recientes a continuación.fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente
»
vectoriza ...V ,
1817 bytesGuardado un byte gracias al truco de entrada de @ DJMcMayhem.
Pruébalo en línea!
Explicación
Esto inserta
[n]*'*'+[n]*' '+[n]*'*'
Cada iteración del bucle del búfer va
A
¿Dónde
|
está el cursor con un*
debajo?fuente
Àé*ÄJÀäl
lugar deÀá*Àá Àá*
, y puede hacerlo<M-c>
, es decirã
(mnemotécnico: centro ) para moverse al centro de la línea, que es un byte más corto queÀl
. Pruébalo en línea!<M-c>
descansos para números más altos05AB1E , 18 bytes
Pruébalo en línea!
Explicación
Ejemplo para
n=2
fuente
V , 23 bytes
Pruébalo en línea!
Hexdump:
Por alguna razón, este desafío es significativamente más difícil en V que el anterior. Dado que nuestro enfoque general de n veces, crecer una 'x' no funcionará aquí, en su lugar construiremos la parte superior de la X, la copiaremos y voltearemos, luego uniremos las dos partes.
Explicación:
Hacer la sangría al final del ciclo, nos permite aprovechar las terminaciones implícitas . Esto también crea convenientemente n + 1 líneas, que es exactamente la mitad superior de la 'X'. Digamos que la entrada fue 4. Entonces, en este punto, el búfer se ve así:
Y estamos en la última línea. Entonces, nosotros:
fuente
ãxx
lo mismo al principio también, pero creo que se rompe para, por ejemplo, n = 8?ãl
, o si sangra antes de centrar, pero eso en realidad no guarda ningún byte. Sin embargo, no entiendo por qué funciona para números más pequeños.C #,
139 130115 bytes-1 byte creando una cadena y llamando
WriteLine
, guardando así el cheque para la nueva línea.-6 bytes gracias a Kevin y sus técnicas de golf maestro!
-2 bytes reemplazando
n*3-n
conn*2
.-15 bytes después de que Kevin me indicó amablemente en la dirección correcta: puedo devolver la cadena en lugar de imprimirla, guardando así la llamada a
System.Console.WriteLine()
. Y algunos otros consejos también ...Pruébalo en línea!
Sin golf:
Simplemente itera a lo largo de las filas y columnas del espacio necesario para imprimir la X grande e imprime una
'*'
o una' '
según la condición.fuente
&&
puede ser&
y||
puede ser|
en este caso.for(int j=0;
puede serfor(int j=0,i;
y luego puede eliminar elint
frente deli
en el bucle interno. Además, después del primer cambio de&
y|
, también puede eliminar eli++
interior del ciclo for y cambiari==n*3-1?...
ai++==n*3-1?...
.WriteLine
, guardado solo 1 byte. Así que ahora no estoy seguro de qué hacer con tu último consejo.System.Console.WriteLine
? Devolver la cadena:n=>{string s="";for(int i,j=0;j<n*2+1;j++,s+="\n")for(i=0;i<n*3;)s+=i>=j&i<j+n|i<=n*3-j-1&i++>n*2-j-1?'*':' ';return s;}
es más corta [ 120 bytes ] (y también elimina los corchetes al poner todo dentro del bucle for. Aquí hay un enlace TIO para mostrar que funciona. Además, siéntase libre de agregar esto (o el suyo) Enlace TIO a su respuesta. :)WriteLine
en el código porque el OP me pidió que emitiera la X grande, no solo para devuelva , así que sentí que la salida de la X (llamando alWriteLine
método) debería ser parte del código. Sin embargo, todavía no estoy acostumbrado a las reglas del golf de código, y no sé qué licencias puedo tomar al escribir código. Acabo de ver que algunas de las otras respuestas aquí imprimen la X en el código, y algunas otras lo imprimen en el pie de página. ¿Cuál es el enfoque válido en este caso?j<n*2+1
puede serj<=n*2
. También he creado un puerto Java 8 de su respuesta con el mismo conteo de bytes, acreditando su sorprendente respuesta, por supuesto.Haskell ,
888786 bytes-1 gracias a @Laikoni
Pruébalo en línea!
fuente
zipWith max m(reverse m)
se puede acortar azipWith max(reverse m)m
. Esto es lo mismo quezipWith max=<<reverse$m
, y luego sem
puede incluir: ¡ Pruébelo en línea!Jalea ,
242316 bytesPruébalo en línea!
fuente
MATLAB,
153126bytes (17.6% ↓)Gracias a @ comentario de LuisMendo, la función de
disp()
caracteres de salida puede sin comillas simples, por lo que podría evitar el usofprintf
conformats
y omitir unos pocos bytes. Además, su comentario me recuerda que necesito usarchar(32)
para presentar un espacio en lugar dechar(0)
(nulo).Pruébalo en línea!
MATLAB, 153 bytes
Ejemplo de resultado: n = 10
fuente
Python 2 ,
93908983 bytes-3 bytes gracias a Leaky Nun
-1 byte gracias a Zachary T
-6 bytes gracias a xnor
[¡Pruébalo en línea!] [TIO-j3xwsktf]
Comienza con una cadena como
'*** '
forn=3
, aplicandomap/max
para seleccionar los*
espacios para cada posición, luego agrega un espacio y elimina el último carácter de la cadena y vuelve a hacer todo esto.fuente
n*2*' '
conn*' '
?map(max
puede hacerse directamente sin unzip
. Además,n*2+1
esn-~n
.Haskell , 70 bytes
Pruébalo en línea!
Emite una lista de cadenas.
Para cada posición de fila
r
, columnac
, utiliza una fórmula para determinar si cae en una de las dos bandas diagonales y así es*
.fuente
Java 8,
119118 bytesPort de la sorprendente respuesta C # de @CarlosAlejo , después de que lo ayudé a jugar al golf algunas cosas. ¡Así que asegúrate de votarlo también!
Pruébalo aquí
fuente
Javascript (ES2017),
155157 bytesDevuelve una matriz de cadenas. Realizo operaciones en matrices y luego lo reflejo. Esto probablemente podría optimizarse con matrices como las otras respuestas, pero quería ser único.
Editar: como señaló Neil, para los valores pares de
n
, la línea central no eran
ancha, por lo que agregué un módulo para detectar pares / impares al cortar la columna.Sin golf
Cuadrante
Reflejado horizontalmente
Reflejado verticalmente
fuente
n
: la línea central no esn
ancha.Mathematica, 148 bytes
fuente
R, 102 bytes
Código:
Prueba:
fuente
CJam, 24 bytes
Este es un bloque que toma un número de la pila y genera una lista de líneas en la pila.
Explicación:
fuente
Python 2 , 110 bytes
Este programa divide cada línea en 4 partes, primeros espacios, primeras estrellas, segundos espacios y luego segundas estrellas. Para cada línea horizontal de la X, calcula cuántas estrellas o espacios se necesitan para cada una de las 4 secciones de la línea, luego construye e imprime esa cadena.
fuente
Retina , 144 bytes
Pruébalo en línea! Explicación:
Agregue 2n + 1 espacios antes del valor de entrada (uno para cada línea de salida).
Reemplaza cada espacio con a
#
y recoge los resultados. Esto proporciona una línea diagonal de#
s, espacio acolchado en ambos lados, con el valor de entrada con sufijo.Elimine el valor de entrada original, ya que ahora tenemos una copia en cada línea.
Construya dos líneas diagonales de n
*
s, con una columna separadora den
espacios envueltos en un par de#
s.En esas líneas donde las
*
s están más cerca del medio, intercambia las dos mitades. Esto le da un aspecto parecido> | | <
.Mueva los
| |
s tan a la izquierda como sea posible, dando una especie de>> > <
apariencia.Para cada espacio entre los
#
s, elimine los tres caracteres siguientes. Esto une el> <
en unX
.Eliminar el ahora innecesario
#
s.fuente