Crear un cuadrado cruzado
Debe ingresar un número entero de uno o más y generar un cuadrado hecho de cualquier carácter imprimible de su elección con una cruz diagonal a través del centro.
La idea general es que la salida sea un cuadrado hueco que tenga una cruz diagonal a través de él .:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
En el ejemplo anterior, los '*' representan la caja exterior y los '#' representan la cruz diagonal.
Tenga en cuenta que el ejemplo anterior usa dos caracteres diferentes para que sea más fácil ver cómo se ve la salida, su programa debe usar solo un carácter.
Entrada
Un entero de 1 o más, se garantiza que sea impar.
Salida
Un cuadrado que se compone de un personaje de su elección con una cruz en el medio.
- La cruz debe ser diagonal.
- El cuadrado puede salir a través de la función o escribirse en la salida
- Las nuevas líneas finales están bien
- Puede salir como un gráfico, diagrama o imagen si lo desea también
Ejemplos
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Especificaciones
- Se permiten funciones o programas completos
- Puede obtener información por sus medios preferidos
- Las lagunas estándar no están permitidas
- Los programas deben trabajar sin ningún tipo de declaraciones adicionales es decir,
using
S enC#
, deben ser incluidos en la entrada - Puede imprimir desde una función o imprimir el resultado
Este es el código de golf, por lo que gana la solución más corta.
0,1,2,3,...
?n
e imprimir un cuadrado de tamaño2n+1
.*
pero para él será la entrada 0.1
daría su ejemplo para3
.Respuestas:
MATL ,
201917 bytesPuede probarlo experimentalmente en MATL en línea . Es posible que deba actualizar la página si no funciona.
Ejecución de muestra:
Versión ASCII: 19 bytes
Pruébalo en línea!
fuente
VBA Excel, 168 bytes
Instrucción:
Creo que Excel con la ayuda de VBA es una herramienta efectiva y suficiente para este desafío. Establezca la hoja de trabajo de Excel como sigue
Sí, utilizamos los pequeños píxeles clásicos de forma cuadrada como en los viejos tiempos al usar las celdas en una hoja de trabajo como píxeles. Jaja...
Aquí uso la celda A1 como entrada y cambio su color de fuente a rojo. ¿Por qué rojo? Debido a que el rojo es de tres letras, es ideal para jugar al golf. Escriba y ejecute el siguiente código en la ventana Inmediato:
Ungolfed el código:
Explicación paso a paso:
Recorriendo la diagonal de las celdas de rango:
Cells(i, i).Interior.Color = vbRed
Paso final y salida:
Cells(i, N + 1 - i).Interior.Color = vbRed
fuente
Cells.RowHeight=48:set r=[A1]:r.Resize(r,r).Interior.Color=0:[B2].Resize(r-2,r-2).Clear:For i=1To[A1]:set r=Union(r,Cells(i,i),Cells(i,r-i+1)):Next:r.Interior.Color=0
JavaScript (ES6), 96 bytes
fuente
Python 2, 65 bytes
Utiliza la idea de Jonathan Allan de generar números binarios como:
Las filas se crean con aritmética de bits y se muestran en binario. Cada parte se oró al resto. Las partes son producidas por potencias de 2
n
(fijo) yi
(caída) a través de1
n
i
yn/i
n-1
cuandoi==1
oi==n
.En realidad, (1) y (4) se combinan produciendo
1
cuándo1<i<n
y de lon-1
contrario.fuente
Pitón,
114 110 9690 bytesTotalmente cambiado:
Devuelve una lista de cadenas, caracteres usando
1
y0
.-6 bytes gracias a TheBikingViking
Pruébalo en ideone
Python 2 @ 110 anterior
Pruébalo en ideone
fuente
lambda n:[bin(sum(2**p for p in[range(n),{0,n-1,r,n-1-r}][0<r<n-1]))[2:]for r in range(n)]
.Java 7,
131130128125124122 bytes3 bytes guardados gracias a @LeakyNun ;
1 byte guardado gracias a @ OliverGrégoire en mi respuesta para Dibujar un cuadrado hueco de # con el desafío de ancho dado ;
2 bytes guardados gracias a @cliffroot .
Ungolfed y código de prueba:
Pruébalo aquí
Salida:
fuente
String c(int n){String r="";for(int i=-1,j;++i<n;r+="\n")for(j=0;j<n;r+=i<1|j<1|n-i<2|n-j<2|i==j|i==n-++j?"*":" ")return r;}
4 bytes guardados;
detrás del bucle for interior.i-->0
más quen-->0
y también puedes usarlo eni*j<1
lugar dei<1|j<1
por 2 bytesMatlab,
68 66 6458 bytesComo la salida gráfica también está permitida:
Qué salidas, por ejemplo
Las versiones únicas de ASCII serían:
Esto está usando la indexación
0,1,2,3,...
Alternativamente con la indexación
1,3,7,...
:fuente
C #,
112101bytesGracias a TheLethalCoder por recordarme que estas cosas anónimas de declaración / expresión lambda están permitidas en C #.
¿Quién dijo que C # no es un lenguaje de golf divertido?
fuente
Logo, 155 bytes
Solución gráfica, implementada como una función.
Reorganicé mi respuesta para Alphabet Triangle y cambié los ángulos un poco. Como antes,
r
dibuja una línea de caracteres. Esta vez, elb
función dibuja un cuadro dibujando un borde recto y uno diagonal, girando y repitiendo cuatro veces. Esto hace que las diagonales se dibujen dos veces (una encima de la otra), pero era menos código que manejarlo por separado. Esta respuesta también maneja adecuadamente los números pares. Tuve que agregar un manejo especial para una entrada de1
para evitar que avance.Lo implementé como una función,
b
que toma el tamaño como argumento:Pruébelo en el intérprete de logotipos de Calormen.com . Para llamarlo, agregue una línea y llame
b
en el siguiente formato:... o pruebe el plato de muestra, que extrae cuatro muestras en tamaños 5, 7, 9 y 11, rotando 90 grados entre:
fuente
R, 102 bytes
Tenga en cuenta que es más eficiente expresar la condición usando% en% que i == 1 | j == 1 | ...
fuente
n=scan();for(i in n:1){for(j in n:2){z=" ";if(i%in%c(1,n,n-j+1)|j%in%c(i,n))z="*";cat(z)};cat("*\n")}
Haskell,
102100969187 bytesany
any
conelem
Versión sin golf:
Estoy seguro de que esto todavía se puede mejorar, pero esto es lo que se me ocurrió por ahora.
Versión antigua:
fuente
[1..s]
dos veces, creo que podrías definir eso enwhere
.c s=unlines$(\m->(m#)<$>z)<$>z where z=[1..s];m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
<$>[1..s]
en una función, ¿verdad? Me gustac s=unlines$f(\m->f(m#))where m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' ';f=(<$>[1..s])
c s=unlines$f$f.(#)where f=(<$>[1..s]);m#n|or((==)<$>[n,m]<*>[1,s])||n==m||n==s-m+1='*'|1>0=' '
Java, 130 bytes
Programa de prueba
fuente
int
antesj
y usarloint i=0,j;
en su lugar. También puede reemplazar todo||
con|
y eliminar el paréntesis en la verificación ternaria. Además, usass-1
cuatro veces, así que pondría esto en una variable. Además, puede cambiar el==0
a<1
. Entonces, en total, se vuelves->{for(int i=0,j,x=s-1;i<s;i++)for(j=0;j<s;j++)System.out.print(x-i==j|i==j|i<1|j<1|i==x|j==x?j==x?"*\n":"*":" ");}
( 116 bytes ) Bastante un poco más corto que mi respuesta de Java 7 , ¡qué buen enfoque!C,
140121114 bytes19 bytes gracias a Quentin.
7 bytes guardados al cambiar de un bucle anidado doble a un bucle.
Sugerencias de golf bienvenidas.
fuente
int i,j;for(i=0;
afor(int i=0,j;
int i,j;
despuésscanf
!n+~i-j
etc.#include
completamente.PowerShell (133)
Clunky, pero funciona lo suficientemente bien.
Las sugerencias de golf definitivamente son bienvenidas, ha pasado mucho tiempo desde que utilicé PowerShell.
fuente
SILOS , 212 bytes
Pruébalo en línea!
fuente
GNU sed,
117114+ 1 (r flag) = 115 bytesDado que sed no tiene soporte nativo para números, la entrada se da en unario basado en este consenso . La segunda mitad del cuadrado es la primera mitad que se almacenó en orden inverso en el espacio de espera.
Correr:
Salida:
fuente
Python, 89 bytes
Esto fue un retroceso! Usé el módulo de tortuga de Python.
Aquí está el resultado cuando n = 200:
fuente
Scala,
141137 bytesCorrer:
$ scala cross.scala 10
Técnicamente, podría eliminar el material impreso e ir a algo como
Esto lo convertiría en 135 o 121 bytes dependiendo de si cuenta el material de sintaxis de la función.
Versión legible:
fuente
Pyth,
2725 bytesPruébalo en línea!
Probablemente golfable.
fuente
Python 2, 83 bytes
Modifica una lista de los caracteres de la fila para poner un lugar
*
en el primer, último, i y el último lugar. La primera y la última fila comienzan como todas*
, y el resto como todos los espacios. Funciona para igualar también. Unalambda
expresión es probablemente más corta que la modificación, pero me gusta este método.fuente
Pyke,
282423 bytesPruébalo aquí!
fuente
Mathematica, 81 bytes
Crea un sistema de coordenadas con el origen en el centro y calcula dónde
*
debe ir la s. Emite una matriz de cadenas, una por fila.fuente
Javascript (
289270 bytes)Sin golf:
EDITAR: Guardado 19 bytes gracias a Philipp Flenker.
fuente
size==1
Perl, 83 +1 = 84 bytes
Corre con la
-n
bandera.La nueva línea literal ahorra 1 byte sobre
\n
o$/
.Legible:
El código imprime la línea superior y la guarda
$c
, luego imprime un montón de espacios con las ranuras apropiadas reemplazadas pora
s, luego imprime la línea superior nuevamente.La asignación a la
$\
variable le dice al intérprete que imprima el contenido (un asterisco, una nueva línea y otro asterisco) después de cadaprint
, pero esto NO ocurre después de asay
.fuente
SmileBASIC, 46 bytes
(No, SB NO utiliza gráficos indexados 1 ...)
fuente
Carbón de leña, 8 bytes (sin competencia; desafío de fechas posteriores al idioma)
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación: cuando se usa como parámetro del
PolygonHollow
comando,+
dibuja un cuadro y las flechas crean las diagonales. Hay algunos otros caracteres de acceso directo, pero tendrían que redefinirse para que sean útiles, por ejemplo,Y
es equivalente a,↖↗↓
pero si fuera equivalente,↗↓↖
entoncesY+
sería suficiente.fuente
SHELL ( 135 Bytes ):
pruebas:
fuente
Kotlin ,
123116bytescambiar si con \ n para imprimir
Pruébalo en línea!
fuente