Problème
Inspiré par un défi précédent faisant quelque chose de similaire
Étant donné la n
sortie d' entrée entière positive, une forme qui suit ce modèle:
entrée n=1
:
* *
*
* *
entrée n=2
:
** **
****
**
****
** **
entrée n=3
:
*** ***
*** ***
*****
***
*****
*** ***
*** ***
etc...
Il a ces propriétés:
n*2+1
lignes hautes
les "bras" sont n
larges sauf lorsqu'ils fusionnent
la ligne médiane est n
large
si n
même les lignes au-dessus et en dessous du centre sont n*2
larges
si n
est impair, les lignes au-dessus et en dessous du centre sont n*2-1
larges
Règles
- Nouvelles lignes de fin acceptées
- Des échappatoires standard s'appliquent
- Octets les plus courts gagnent
- La sortie peut être imprimée ou une chaîne ou un tableau de chaînes
Modifications
n=0
n'a pas besoin d'être manipulé- Espaces de fin autorisés
1
place*
et à la0
place de l'espace?Réponses:
Fusain ,
1312 octetsMerci à @ErikTheOutgolfer pour un octet
Essayez-le en ligne!
C'est ma toute première réponse au fusain, et je suis presque sûr que ce n'est pas le golf aussi bien qu'il pourrait l'être, mais j'ai pensé que je commencerais quelque part.
la source
I
pour -1.MATL , 16 octets
Essayez-le en ligne!
Explication
Considérez l'entrée
2
comme exemple. Le contenu de la pile est affiché avec les plus récents ci-dessous.la source
Gelée , 15 octets
Essayez-le en ligne!
la source
»
vectorise ...V ,
1817 octetsSauvegardé un octet grâce à l'astuce d'entrée de @ DJMcMayhem.
Essayez-le en ligne!
Explication
Cela insère
[n]*'*'+[n]*' '+[n]*'*'
À chaque itération de la boucle à partir de laquelle le tampon passe
À
Où
|
est le curseur avec un*
dessousla source
Àé*ÄJÀäl
place deÀá*Àá Àá*
, et vous pouvez faire<M-c>
, c'est-à-direã
(mnémonique: centre ) pour vous déplacer au milieu de la ligne, qui est un octet plus court queÀl
. Essayez-le en ligne!<M-c>
pauses pour des nombres plus élevés05AB1E , 18 octets
Essayez-le en ligne!
Explication
Exemple pour
n=2
la source
V , 23 octets
Essayez-le en ligne!
Hexdump:
Pour une raison quelconque, ce défi est beaucoup plus difficile en V que le précédent. Depuis notre approche générale de n fois, grandissons un «x» ne fonctionnera pas ici, nous allons plutôt construire le haut du X, le copier et le retourner, puis attacher les deux parties ensemble.
Explication:
Faire le retrait à la fin de la boucle, nous permet de profiter des terminaisons implicites . Cela crée également commodément n + 1 lignes, ce qui est exactement la moitié supérieure du «X». Disons que l'entrée était 4. Puis à ce stade, le tampon ressemble à ceci:
Et nous sommes sur la dernière ligne. Alors nous:
la source
ãxx
chose au début aussi, mais je pense que ça casse pour par exemple n = 8?ãl
, ou si vous indenter avant de centrer, mais cela n'enregistre en fait aucun octet. Je ne comprends pas pourquoi cela fonctionne pour de plus petits nombres.C #,
139 130115 octets-1 octet en créant une chaîne et en appelant
WriteLine
, sauvegardant ainsi la vérification de la nouvelle ligne.-6 octets grâce à Kevin et ses maîtres techniques du golf!
-2 octets en remplaçant
n*3-n
parn*2
.-15 octets après que Kevin m'a gentiment pointé dans la bonne direction: je peux simplement retourner la chaîne au lieu de l'imprimer, sauvegardant ainsi l'appel à
System.Console.WriteLine()
. Et quelques autres astuces aussi ...Essayez-le en ligne!
Non golfé:
Il itère simplement le long des lignes et des colonnes de l'espace nécessaire pour imprimer le grand X et imprime un
'*'
ou un' '
selon la condition.la source
&&
peut être&
et||
peut être|
dans ce cas.for(int j=0;
peut êtrefor(int j=0,i;
, puis vous pouvez supprimer l'int
avant de lai
dans la boucle intérieure. De plus, après le premier changement de&
et|
, vous pouvez également supprimer l'i++
intérieur de la boucle for et passeri==n*3-1?...
ài++==n*3-1?...
.WriteLine
, sauvé juste 1 octet. Alors maintenant, je ne sais pas quoi faire de vos derniers conseils.System.Console.WriteLine
? Renvoyer la chaîne: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;}
est plus court [ 120 octets ] (et supprime également les crochets en mettant tout à l'intérieur de la boucle for. Voici un lien TIO pour montrer que cela fonctionne. Aussi, n'hésitez pas à ajouter ceci (ou le vôtre) Lien TIO vers votre réponse. :)WriteLine
dans le code parce que l'OP demandait de sortir le grand X, pas seulement de le retourner , donc je sentais que la sortie du X (en appelant laWriteLine
méthode) devrait faire partie du code. Néanmoins, je ne suis toujours pas habitué aux règles du code-golf, et je ne sais pas quelles licences je peux prendre lors de l'écriture de code. Je viens de voir que certaines des autres réponses ici impriment le X dans le code, et d'autres l'impriment dans le pied de page. Quelle est l'approche valable dans ce cas?j<n*2+1
pouvez jouer au golf: peut l'êtrej<=n*2
. J'ai également créé un port Java 8 de votre réponse avec le même nombre d'octets, en créditant votre réponse étonnante bien sûr.Haskell ,
888786 octets-1 grâce à @Laikoni
Essayez-le en ligne!
la source
zipWith max m(reverse m)
peut être raccourcizipWith max(reverse m)m
. C'est le même quezipWith max=<<reverse$m
, etm
peut ensuite être intégré: Essayez-le en ligne!Gelée ,
242316 octetsEssayez-le en ligne!
la source
MATLAB,
153126octets (17,6% ↓)Grâce au commentaire de @ LuisMendo, la fonction
disp()
peut sortir des caractères sans guillemets simples, donc je pourrais empêcher d'utiliserfprintf
avecformats
et omettre quelques octets. D'ailleurs, son commentaire me rappelle que j'ai besoin d'utiliserchar(32)
pour présenter un espace plutôt quechar(0)
(nul).Essayez-le en ligne!
MATLAB, 153 octets
Exemple de résultat: n = 10
la source
Python 2 ,
93908983 octets-3 octets grâce à Leaky Nun
-1 octet grâce à Zachary T
-6 octets grâce à xnor
[Essayez-le en ligne!] [TIO-j3xwsktf]
Commence par une chaîne comme
'*** '
pourn=3
, en appliquantmap/max
pour sélectionner les*
espaces pour chaque position, puis ajoutez un espace et supprimez le dernier caractère de la chaîne et recommencez.la source
n*2*' '
parn*' '
?map(max
peut être fait directement sanszip
. , Aussin*2+1
estn-~n
.Haskell , 70 octets
Essayez-le en ligne!
Génère une liste de chaînes.
Pour chaque position de ligne
r
, colonnec
, utilise une formule pour déterminer si elle tombe dans l'une des deux bandes diagonales et est donc*
.la source
Java 8,
119118 octetsPort de la réponse C # étonnante de @CarlosAlejo , après l'avoir aidé à jouer au golf. Alors assurez-vous de le voter également!
Essayez-le ici.
la source
Javascript (ES2017),
155157 octetsRenvoie un tableau de chaînes. J'exécute des opérations sur des tableaux puis je les mets en miroir. Cela pourrait probablement être optimisé avec des matrices comme les autres réponses, mais je voulais être unique.
Edit: Comme l'a souligné Neil, pour les valeurs paires de
n
, la ligne centrale n'était pasn
large, j'ai donc ajouté un module pour détecter les paires / impaires lors du découpage de la colonne.Non golfé
Quadrant
Miroir horizontalement
Miroir verticalement
la source
n
- la ligne centrale n'est pasn
large.Mathematica, 148 octets
la source
R, 102 octets
Code:
Tester:
la source
CJam, 24 octets
Il s'agit d'un bloc qui prend un nombre dans la pile et génère une liste de lignes dans la pile.
Explication:
la source
Python 2 , 110 octets
Ce programme divise chaque ligne en 4 parties, les premiers espaces, les premières étoiles, les seconds espaces et ensuite les secondes étoiles. Pour chaque ligne horizontale du X, il calcule le nombre d'étoiles ou d'espaces nécessaires pour chacune des 4 sections de la ligne, puis construit et imprime cette chaîne.
la source
Rétine , 144 octets
Essayez-le en ligne! Explication:
Ajoutez 2n + 1 espaces avant la valeur d'entrée (un pour chaque ligne de sortie).
Remplacez chaque espace par un
#
et recueillez les résultats. Cela donne une ligne diagonale de#
s, espace rembourré des deux côtés, avec la valeur d'entrée suffixée.Supprimez la valeur d'entrée d'origine, car nous avons maintenant une copie sur chaque ligne.
Construisez deux lignes diagonales de n
*
s, avec une colonne de séparation d'n
espaces enveloppée dans une paire de#
s.Sur les lignes où les
*
s sont plus proches du milieu, échangez les deux moitiés autour. Cela donne une apparence ressemblante> | | <
.Déplacez les
| |
s aussi loin que possible à gauche, donnant une sorte d'>> > <
apparence.Pour chaque espace entre les
#
s, supprimez les trois caractères suivants. Cela rejoint le> <
dans unX
.Supprimer le maintenant inutile
#
.la source