Criando um quadrado cruzado
Você deve inserir um número inteiro de um ou mais e gerar um quadrado com qualquer caractere imprimível de sua escolha com uma cruz diagonal no centro.
A idéia geral é que a saída seja um quadrado oco que tenha uma cruz diagonal:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
No exemplo acima, os '*' representam a caixa externa e os '#' representam a cruz diagonal.
Observe que o exemplo acima usa dois caracteres diferentes, para que seja mais fácil ver a aparência da saída, seu programa deve usar apenas um caractere.
Entrada
Um número inteiro de 1 ou mais, é garantido que seja ímpar.
Saída
Um quadrado que é composto de um personagem de sua escolha com uma cruz no meio.
- A cruz deve ser diagonal
- O quadrado pode ser emitido através da função ou gravado na saída
- Novas linhas à direita estão bem
- Pode imprimir como gráfico, diagrama ou imagem, se você desejar
Exemplos
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Especificações
- Funções ou programas completos são permitidos
- Você pode obter informações através do seu meio preferido
- As brechas padrão não são permitidas
- Os programas devem funcionar sem nenhuma declaração adicional, isto
using
éC#
, devem estar incluídos na entrada - Você pode imprimir a partir de uma função ou imprimir o resultado
Este é o código de golfe, portanto a solução mais curta vence.
0,1,2,3,...
?n
e imprimir um quadrado de tamanho2n+1
.*
mas para ele será a entrada 0?1
renderia seu exemplo para3
.Respostas:
MATL ,
201917 bytesVocê pode experimentá-lo experimentalmente no MATL online . Pode ser necessário atualizar a página se ela não funcionar.
Exemplo de execução:
Versão ASCII: 19 bytes
Experimente online!
fonte
Excel VBA, 168 bytes
Instrução:
Acho que o Excel, com a ajuda do VBA, é uma ferramenta eficaz e suficiente para esse desafio. Defina a planilha do Excel como a seguir
Sim, usamos os pequenos pixels clássicos em forma de quadrado, como nos velhos tempos, usando as células em uma planilha como os pixels. Ha-ha ...
Aqui eu uso a célula A1 como entrada e altero a cor da fonte para vermelho. Por que vermelho? Como o vermelho é de três letras, é adequado para jogar golfe. Escreva e execute o seguinte código na janela imediata:
Ungolfed o código:
Explicação passo a passo:
Loop na diagonal das células do intervalo:
Cells(i, i).Interior.Color = vbRed
Etapa final e saída:
Cells(i, N + 1 - i).Interior.Color = vbRed
fonte
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
fonte
Python 2, 65 bytes
Usa a idéia de Jonathan Allan de gerar números binários como:
As linhas são criadas com aritmética de bits e exibidas em binário. Cada parte foi inserida no resto. As peças são produzidas por potências de 2
n
(fixas) ei
(caindo) via1
n
i
en/i
n-1
quandoi==1
oui==n
.Na verdade, (1) e (4) são combinados produzindo
1
quando1<i<n
e den-1
outra forma.fonte
Python,
114 110 9690 bytesTotalmente alterado:
Retorna uma lista de strings, caracteres usando
1
e0
.-6 bytes graças ao TheBikingViking
Teste em ideone
Anterior Python 2 @ 110
Teste em ideone
fonte
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 salvos graças ao @LeakyNun ;
1 byte economizado graças a @ OliverGrégoire na minha resposta para o Draw um quadrado vazio de # com um desafio de largura determinado ;
2 bytes salvos graças a @cliffroot .
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
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 salvos;
por trás do loop for interno.i-->0
, em vez den-->0
e você também pode usari*j<1
em vez dei<1|j<1
para 2 bytesMatlab,
68 66 6458 bytesComo a saída gráfica também é permitida:
Quais saídas, por exemplo
As versões somente ascii seriam:
Isso está usando a indexação
0,1,2,3,...
Como alternativa com a indexação
1,3,7,...
:fonte
C #,
112101 bytesAgradeço ao TheLethalCoder por me lembrar que essas coisas anônimas de instrução ou expressão lambda são permitidas em C #.
Quem disse que o C # não é uma linguagem divertida para o golfe?
fonte
Logotipo, 155 bytes
Solução gráfica, implementada em função
Eu refiz minha resposta para o Triangulo do Alfabeto e mudei um pouco os ângulos. Como antes,
r
desenha uma linha de caracteres. Desta vez, ab
função desenha uma caixa desenhando uma borda reta e uma diagonal, girando e repetindo quatro vezes. Isso faz com que as diagonais sejam desenhadas duas vezes (umas sobre as outras), mas era menos código do que manipulá-las separadamente. Essa resposta também lida corretamente com números pares. Eu tive que adicionar um tratamento especial a uma entrada1
para impedir que ela prosseguisse.Eu o implementei como uma função,
b
que assume o tamanho como argumento:Experimente no intérprete de logotipo da Calormen.com . Para chamá-lo, anexe uma linha e ligue
b
no seguinte formato:... ou experimente o prato de amostrador, que extrai quatro amostras nos tamanhos 5, 7, 9 e 11, girando 90 graus entre:
fonte
R, 102 bytes
Observe que é mais eficiente expressar a condição usando% em% do que i == 1 | j == 1 | ...
fonte
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
porelem
Versão não destruída:
Eu tenho certeza que isso ainda pode ser melhorado, mas é isso que eu criei por enquanto.
Versão antiga:
fonte
[1..s]
duas vezes, acho que você pode definir issowhere
.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]
uma função, certo? Likec 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 teste
fonte
int
antesj
e usá-loint i=0,j;
. Você também pode substituir todos||
por|
e remover os parênteses na verificação ternária. Além disso, você usas-1
quatro vezes, então eu colocaria isso em uma variável. Além disso, você pode alterar==0
para<1
. Portanto, no total, ele se tornas->{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 ) um pouco mais curto que minha resposta ao Java 7 , uma ótima abordagem!C,
140121114 bytes19 bytes graças a Quentin.
7 bytes salvos alternando de um loop aninhado duplo para um loop.
Sugestões de golfe são bem-vindas.
fonte
int i,j;for(i=0;
afor(int i=0,j;
int i,j;
depois doscanf
!n+~i-j
etc.#include
completamente.PowerShell (133)
Desajeitado, mas funciona bem o suficiente.
Definitivamente, as sugestões de golfe são bem-vindas, já faz muito tempo que eu não uso o PowerShell.
fonte
SILOS , 212 bytes
Experimente online!
fonte
GNU sed,
117114 + 1 (sinalizador r) = 115 bytesComo o sed não tem suporte nativo para números, a entrada é dada em unário com base nesse consenso . A segunda metade do quadrado é a primeira metade que foi armazenada em ordem inversa no espaço de espera.
Corre:
Saída:
fonte
Python, 89 bytes
Isso foi um retrocesso! Eu usei o módulo tartaruga do python.
Aqui está o resultado quando n = 200:
fonte
Scala,
141137 bytesCorre:
$ scala cross.scala 10
Tecnicamente, eu poderia remover o material de impressão e ir para algo como
Isso tornaria 135 ou 121 bytes, dependendo se você conta as coisas da sintaxe da função.
Versão legível:
fonte
Pitão,
2725 bytesExperimente online!
Provavelmente jogável.
fonte
Python 2, 83 bytes
Modifica uma lista dos caracteres da linha para colocar
*
o primeiro, o último, o décimo e o penúltimo lugar. A primeira e a última linha iniciam como todas*
e as demais como todos os espaços. Também funciona para os pares. Umalambda
expressão é provavelmente mais curta que a modificação, mas eu gosto desse método.fonte
Pyke,
282423 bytesExperimente aqui!
fonte
Mathematica, 81 bytes
Cria um sistema de coordenadas com a origem no centro e calcula onde os
*
s devem ir. Produz uma matriz de seqüências de caracteres, uma por linha.fonte
Javascript (
289270 bytes)Ungolfed:
EDIT: economizou 19 bytes graças a Philipp Flenker.
fonte
size==1
Perl, 83 +1 = 84 bytes
Corra com a
-n
bandeira.A nova linha literal economiza 1 byte acima
\n
ou$/
.Legível:
O código imprime a linha superior e a salva
$c
, depois imprime vários espaços com os slots apropriados substituídos pora
s, depois imprime a linha superior novamente.A atribuição à
$\
variável diz ao intérprete para imprimir o conteúdo (um asterisco, uma nova linha e outro asterisco) depois de cada vezprint
, mas isso NÃO ocorre depois de asay
.fonte
SmileBASIC, 46 bytes
(Não, o SB NÃO usa gráficos indexados em 1 ...)
fonte
Carvão, 8 bytes (não competitivo; desafio pós-data do idioma)
Experimente online! Link é a versão detalhada do código. Explicação: Quando usado como parâmetro para o
PolygonHollow
comando,+
desenha uma caixa e as setas criam as diagonais. Existem outros caracteres de atalho, mas eles precisariam ser redefinidos para serem úteis, por exemplo,Y
é equivalente a,↖↗↓
mas se fosse equivalente a↗↓↖
isso,Y+
seria suficiente.fonte
SHELL ( 135 bytes ):
testes:
fonte
Kotlin ,
123116 bytesmude se com \ n para println
Experimente online!
fonte