Création d'un carré croisé
Vous devez saisir un entier d'un ou plusieurs et sortir un carré composé de n'importe quel caractère imprimable de votre choix avec une croix diagonale au centre.
L'idée générale est que la sortie soit un carré creux traversé par une diagonale:
Input: 7
Output:
*******
*# #*
* # # *
* # *
* # # *
*# #*
*******
Dans l'exemple ci-dessus, les «*» représentent la boîte extérieure et les «#» représentent la croix diagonale.
Notez que l'exemple ci-dessus utilise deux caractères différents afin qu'il soit plus facile de voir à quoi ressemble la sortie, votre programme ne doit utiliser qu'un seul caractère.
Contribution
Un entier de 1 ou plus, il est garanti d'être impair.
Sortie
Un carré composé d'un personnage de votre choix avec une croix au milieu.
- La croix doit être diagonale
- Le carré peut être sorti via la fonction ou écrit dans la sortie
- Les nouvelles lignes de fin sont correctes
- Peut sortir sous forme de graphique, diagramme ou image si vous le souhaitez aussi
Exemples
Input: 1
Output:
*
Input: 3
Output:
***
***
***
Input: 5
Output:
*****
** **
* * *
** **
*****
Input: 7
Output:
*******
** **
* * * *
* * *
* * * *
** **
*******
Spécifications
- Les fonctions ou programmes complets sont autorisés
- Vous pouvez obtenir des commentaires par vos moyens préférés
- Les failles standard sont interdites
- Les programmes doivent fonctionner sans déclaration supplémentaire, c.-à-
using
d.C#
, ils doivent être inclus dans l'entrée - Vous pouvez sortir d'une fonction ou imprimer le résultat
C'est le golf de code, donc la solution la plus courte l'emporte.
0,1,2,3,...
?n
et imprimer un carré de taille2n+1
.*
mais pour lui ce sera l'entrée 0?1
donnerait votre exemple3
.Réponses:
MATL ,
201917 octetsVous pouvez l'essayer expérimentalement dans MATL en ligne . Vous devrez peut-être actualiser la page si cela ne fonctionne pas.
Exemple d'exécution:
Version ASCII: 19 octets
Essayez-le en ligne!
la source
VBA Excel, 168 octets
Instruction:
Je trouve qu'Excel avec l'aide de VBA est un outil efficace et suffisant pour relever ce défi. Définissez la feuille de calcul d'Excel comme suit
Oui, nous utilisons les petits pixels classiques comme les anciens temps en utilisant les cellules d'une feuille de calcul comme pixels. Ha-ha ...
Ici, j'utilise la cellule A1 comme entrée et je change sa couleur de police en rouge. Pourquoi rouge? Parce que le rouge est une couleur à trois lettres, il convient donc au golf. Écrivez et exécutez le code suivant dans la fenêtre Exécution:
Déverrouillé le code:
Explication étape par étape:
Boucle à travers la diagonale des cellules de la plage:
Cells(i, i).Interior.Color = vbRed
Étape finale et sortie:
Cells(i, N + 1 - i).Interior.Color = vbRed
la source
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 octets
la source
Python 2, 65 octets
Utilise l'idée de Jonathan Allan de produire des nombres binaires comme:
Les lignes sont créées avec un bit arithmétique et affichées en binaire. Chaque partie est passée dans le reste. Les pièces sont produites par des puissances de 2
n
(fixes) eti
(descendant) via1
n
i
etn/i
n-1
quandi==1
oui==n
.En fait, (1) et (4) sont combinés en produisant
1
quand1<i<n
etn-1
autrement.la source
Python,
114 110 9690 octetsTotalement changé:
Renvoie une liste de chaînes, de caractères à l'aide de
1
et0
.-6 octets grâce à TheBikingViking
Testez-le chez ideone
Précédent Python 2 @ 110
Testez-le sur ideone
la source
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 122 octets3 octets enregistrés grâce à @LeakyNun ;
1 octet enregistré grâce à @ OliverGrégoire dans ma réponse pour le défi Dessiner un carré creux de # avec une largeur donnée ;
2 octets économisés grâce à @cliffroot .
Code non testé et testé:
Essayez-le ici.
Sortie:
la source
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 octets enregistrés;
arrière de la boucle intérieure.i-->0
plutôt quen-->0
et vous pouvez également utiliseri*j<1
au lieu dei<1|j<1
pour 2 octetsMatlab,
68 66 6458 octetsÉtant donné que la sortie graphique est également autorisée:
Quelles sorties par exemple
Les seules versions ascii seraient:
Ceci utilise l'indexation
0,1,2,3,...
Alternativement avec l'indexation
1,3,7,...
:la source
C #,
112101 octetsMerci à TheLethalCoder de m'avoir rappelé que ces choses anonymes de déclaration ou d'expression lambda sont autorisées en C #.
Qui a dit que C # n'était pas un langage de golf amusant?
la source
Logo, 155 octets
Solution graphique, implémentée en fonction
J'ai réorganisé ma réponse pour Alphabet Triangle et changé un peu les angles. Comme précédemment,
r
trace une ligne de caractères. Cette fois, lab
fonction dessine une boîte en dessinant un bord droit et une diagonale, en tournant et en répétant quatre fois. Cela provoque le dessin des diagonales deux fois (les unes sur les autres), mais c'était moins de code que de les manipuler séparément. Cette réponse gère également correctement les nombres pairs. J'ai dû ajouter un traitement spécial pour une entrée de1
pour l'empêcher d'avancer.Je l'ai implémenté en tant que fonction,
b
qui prend la taille en argument:Essayez-le sur l'interpréteur de logo de Calormen.com . Pour l'appeler, ajoutez une ligne et appelez
b
au format suivant:... ou essayez le plateau d'échantillonnage, qui attire quatre échantillons de tailles 5, 7, 9 et 11, tournant de 90 degrés entre les deux:
la source
R, 102 octets
Notez qu'il est plus efficace d'exprimer la condition en utilisant% en% que i == 1 | j == 1 | ...
la source
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 octetsany
any
parelem
Version non golfée:
Je suis sûr que cela peut encore être amélioré, mais c'est ce que j'ai trouvé pour l'instant.
Ancienne version:
la source
[1..s]
deux fois, je pense que vous pouvez définir cela danswhere
.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]
une fonction, non? Commec 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 octets
Programme de test
la source
int
avantj
et l'utiliser à laint i=0,j;
place. Vous pouvez également tout remplacer||
par|
et supprimer les parenthèses dans le test ternaire. En outre, vous utilisezs-1
quatre fois, donc je mettrais cela dans une variable. Vous pouvez également changer le==0
en<1
. Donc au total ça devients->{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 octets ) Un peu plus court que ma réponse Java 7 , donc belle approche!C,
140121114 octets19 octets grâce à Quentin.
7 octets enregistrés en passant d'une boucle double imbriquée à une boucle.
Suggestions de golf bienvenues.
la source
int i,j;for(i=0;
àfor(int i=0,j;
int i,j;
after thescanf
!n+~i-j
etc.#include
completely.PowerShell (133)
Clunky, but it works well enough.
Golfing suggestions definitely welcome, it's been too long since I've PowerShell'd.
la source
S.I.L.O.S, 212 bytes
Try it online!
la source
GNU sed,
117114 + 1(r flag) = 115 bytesSince sed has no native support for numbers, the input is given in unary based on this consensus. The second half of the square is the first half that was stored in reverse order in hold space.
Run:
Output:
la source
Python, 89 bytes
This was a throwback! I used python's turtle module.
Here's the result when n=200:
la source
Scala,
141137 bytesRun:
$ scala cross.scala 10
Technically I could remove the print stuff and go to something like
This would make it 135 or 121 bytes depending on whether you count the function syntax stuff.
Readable version:
la source
Pyth,
2725 bytesTry it online!
Probably golfable.
la source
Python 2, 83 bytes
Modifies a list of the row's characters to put a
*
into the first, last, i'th, and i'th-to-last place. The first and last row start as all*
, and the rest as all spaces. Works for evens too. Alambda
expression is probably shorter than modification, but I like this method.la source
Pyke,
282423 bytesTry it here!
la source
Mathematica, 81 bytes
Creates a coordinate system with the origin in the center, and computes where the
*
s should go. Outputs an array of strings, one per row.la source
Javascript (
289270 bytes)Ungolfed:
EDIT: Saved 19 bytes thanks to Philipp Flenker.
la source
size==1
Perl, 83 +1 = 84 bytes
Run with the
-n
flag.The literal newline saves 1 byte over
\n
or$/
.Readable:
The code prints the top line and saves it in
$c
, then prints a bunch of spaces with the appropriate slots replaced witha
s, then prints the top line again.The assignment to the
$\
variable tells the interpreter to print the contents (an asterisk, a newline, and another asterisk) after everyprint
, but this does NOT occur after asay
.la source
SmileBASIC, 46 bytes
(No, SB does NOT use 1-indexed graphics...)
la source
Charcoal, 8 bytes (noncompeting; language postdates challenge)
Try it online! Link is to verbose version of code. Explanation: When used as a parameter to the
PolygonHollow
command,+
draws a box, and the arrows then create the diagonals. There are some other shortcut characters but they would need to be redefined to be useful e.g.Y
is equivalent to↖↗↓
but if it was eqivalent to↗↓↖
thenY+
would suffice.la source
SHELL ( 135 Bytes):
tests:
la source
Kotlin,
123116 byteschange if with \n to println
Try it online!
la source