Aujourd'hui, nous allons créer un hexagone ASCII. Vous devez écrire un programme ou une fonction prenant un entier positif n et générant une grille hexagonale de taille n , composée d'astérisques. Par exemple, un hexagone de taille 2 ressemble à ceci:
* *
* * *
* *
Alors qu’un hexagone de taille 3 ressemble à ceci:
* * *
* * * *
* * * * *
* * * *
* * *
Vous pouvez utiliser n’importe laquelle des méthodes d’entrée et de sortie par défaut , par exemple STDIO / STDOUT, les arguments de fonction et les valeurs de retour ou lire / écrire un fichier.
Vous pouvez supposer que la saisie est toujours valide, donc si ce n'est pas un entier positif, votre programme peut faire ce que vous voulez. Vous ne devez cependant traiter le cas particulier d'une taille 1 hexagone, qui se trouve être un astérisque:
*
Les espaces de début et de fin sont autorisés tant que la sortie est visuellement identique.
Exemples:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Comme d'habitude, c'est du code-golf , donc les échappatoires standard s'appliquent , et vous devriez essayer d'écrire le programme le plus court possible mesuré en octets. Bien sûr, certaines langues sont intrinsèquement plus courtes ou plus longues que d’autres, rappelez-vous donc que l’objectif n’est pas nécessairement d’avoir le plus petit nombre total d’octets, mais de battre les soumissions dans les mêmes langues ou dans des langues similaires.
Que le meilleur golfeur gagne!
la source
Réponses:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 octets
Inclut +3 pour le
-g
drapeau et +8 pour|tr . \*
l'appel non standard (voir cette méta publication )L'entrée est donnée sous forme d'argument à Hexagony. Lorsque l'interpréteur Hexagony est appelé avec l'
-g N
option, il affiche un hexagone de.
s. Nous utilisons ensuite tr pour remplacer ceux par*
s.la source
hexagony -g $1|tr . \*
, en supposant que l'interprète hexagone soit nommé ainsi.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 octets
Imprime un espace de fin à la fin de chaque ligne.
Merci à Erik the Outgolfer pour avoir sauvegardé un octet.
la source
int(input())
au lieu deinput()
et leprint(' '*j+'* '*(2*n+~j))
remplacement habituelprint' '*j+'* '*(2*n+~j)
- code froid d'ailleurs ;-)JavaScript (ES6), 77
81 84@Upvoters: ne manquez pas la réponse de @ETHproductions, soit 76 octets
Modifier Révisé après modification des spécifications, espace de fin autorisé
Juste pour le chapeau ... hé! Pas de chapeau?
Tester
la source
Hexagony ,
918786 octetsEssayez-le en ligne!
Finalement l'a fait.
Initialement (avant de réaliser à quel point les boucles sont coûteuses), je suppose que cela pourra peut-être tenir dans la longueur de côté 5, mais maintenant, il est assez difficile de l’adapter à la longueur de côté 6.
Pour obtenir cela, je dois en fait modifier un peu le code linéaire. En fait, écrire ceci me permet de comprendre comment coder le code linéaire de
1 à2 octets.la source
JavaScript (ES6),
7776 octetsJe me suis dit que je ne dormirais pas tant que je n'aurais pas établi un nouvel enregistrement ES6 sans regarder les autres réponses, alors voila ...
Extrait de test
la source
C,
91898074 octetsJ'ai à peu près tordu pour obtenir les bonnes formules, puis j'ai tout mis en purée.
Appelez
f
avec le numéro n , et l'hexagone sera imprimé sur la sortie standard.Non golfé et expliqué (version 80 octets):
Voir en direct sur Coliru
Remarques:
printf
peut gérer le remplissage négatif, ce qui donne un caractère aligné à gauche avec le remplissage à droite. J'ai donc essayé quelque chose qui aurait pour effet dew = printf("%*c*", y, ' ')
prendre en compte la valeur absolue et de la récupérer à partir de sa valeur de retour. Malheureusement, les largeurs de remplissage zéro et une impriment le caractère seul, de sorte que les trois lignes centrales sont identiques.Mise à jour: Jasen a trouvé un moyen de faire exactement cela en imprimant une chaîne vide au lieu d'un caractère - 6 octets supprimés!
Coliru ne gère pas correctement le caractère de retour arrière. L'exécution de ce code sur un terminal local supprime l'espace de début sur chaque ligne.
la source
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
14 à13 octetsCode:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne!
la source
Gelée , 24 octets
Essayez-le en ligne!
Jelly a honte du fait qu’il n’a pas d’atome de centralisation, c’est donc battu de 05AB1E et V. De 11 et 7 octets respectivement!
Si vous trouvez un moyen de jouer au golf, veuillez commenter. Toute aide est appréciée.
Explication :
Bonus: pour trouver le nombre d'étoiles dans un hexagone, utilisez ceci:
la source
Octave,
6258 octetsRéponse précédente:
qui peut être appelé comme
Essayez-le (coller) sur Octave Online
Par exemple, l'image de base pour
n=5
estqui peut être créé avec
Le
dilation morphological operator
appliqué 4 fois sur l'image en utilisant le masque voisin suivant:qui peut être créé avec
[k='01010'-48;~k;k]
résultat de la dilatation:
puis remplacez 0 et 1 par '' et '*' respectivement
la source
postgresql9.6, 290 octets
sql formaté est ici:
sortie:
la source
lpad
peut être en mesure de vous sauver quelques octets. J'appellerais aussi le langage pl / pgsql, mais cela soulève des questions quant à savoir s'il faut compter le nombre de foisdo language plpgsql $$
et le temps de fermeture$$;
. Ceux-ci seraient mieux traités par la méta, s'ils ne sont pas venus avant.DECLARE
s? Un seul ne fonctionnerait-il pas?V , 17 octets
Essayez-le en ligne!
Comme d'habitude, voici un hexdump, puisqu'il contient des caractères non imprimables:
la source
APL (Dyalog Unicode) ,
403635332725 octetsSuppose
⎕IO←0
, c'est-à-dire une indexation basée sur zéro La sortie contient un espace de début et un espace de fin sur chaque ligne.Un grand merci à @FrownyFrog et @ngn pour beaucoup de golf.
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6),
8381 octetsCeci est ma première réponse (code golf). J'espère que j'ai tout formaté correctement.
Contrairement aux 2 réponses ES6 actuelles, je n’appelle pas de manière récursive et j’utilise la console pour la sortie.
la source
alert
si vous spécifiez le navigateur js?alert
, cela alerterait ligne par ligne, et pas le tout.Haskell,
999779 octetsExplication: Ce programme est basé sur l'observation que chaque ligne d'un n-hexagone contient des espaces (nk) suivis par des astérisques (n + k-1), pour certains k dépendant du numéro de ligne.
Edit: Basculé sur mapM_. Je ne savais pas qu'il était disponible sans l'aide de l'importation
la source
Python 2 ,
100978988878179 octets-1 de @ Flp.Tkc
-6 à nouveau de @Flp
-2 avec merci à @ nedla2004. J'essayais de trouver comment me débarrasser de la deuxième tranche mais je n'y pensais pas :)
Essayez-le en ligne!
Crée un tableau pour la moitié supérieure puis ajoute le tableau inversé moins la ligne médiane, puis s'imprime. Imprime exactement "en l’état", sauf pour les
1
impressions avec un espace de début (je suppose que cela est autorisé car*
est visuellement identique au*
avec ou sans espace de début).la source
Lot, 161 octets
Remarque: espace de fin sur la ligne 2. Ungolfed:
la source
JavaScript (ES6), 83 octets
la source
Toile , 9 octets
Essayez-le ici!
Battre l'intégré: D
Explication:
Je ne sais pas pourquoi il y a un si grand rembourrage, mais c'est autorisé et je répare ce problème bientôt ™.fixé? J'espère que je n'ai pas casser des trucsla source
Perl 6 , 49 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Powershell,
91897868635248 octetsScript de test:
Sortie (espace de début supplémentaire):
Explication:
la source
gu
.PHP,
8379 octetsExécuter en pipe
-nR
ou essayer en ligne .C'est proche de la réponse de Kodos ; mais
str_pad
est plus courte questr_repeat
même quand on joue au golf.Et la
++
tête dans la boucle enregistre encore plus.la source
Ruby, 54 octets
La fonction lambda prend n en argument et renvoie une chaîne séparée par des nouvelles lignes. (
$/
est une variable contenant le séparateur de ligne par défaut.)dans le programme de test
la source
puts
) dans le nombre de caractères. Mais en relisant la définition, il est seulement indiqué que votre fonction doit "afficher" le résultat qui pourrait être lu comme "renvoyer" le résultat. Solution cool.Charly, 125 octets
Charly GitHub Page: https://github.com/KCreate/charly-lang
la source
SmileBASIC, 74 octets
Ajoute un espace de début et de fin.
Ces "hexagones" ont l’air horrible quand les personnages ont la même largeur et la même hauteur ...
la source
raquette / schéma
essai:
la source
Python 2, 111 octets
Une mise en œuvre simple et ennuyeuse (et un programme complet). Affiche un espace de fin à chaque ligne.
Cas de test:
la source
Javascript (ES6), 143 octets
C'est enfin la pause de Noël (joyeux Noël!), J'ai donc un peu de temps pour jouer au golf.
Et ça fait un bout de temps, d'où le grand nombre d'octets.
Voici:
la source
for(j=c.length-2;j>-1;j--)c.push(c[j])
peuvent être écrites commefor(j=a-1;j;c.push(c[--j]))
etfor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
pourraient êtrefor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. L’instruction return pourrait être abrégée enreturn a-1?c.join
\ n.:"*"
Au total, ces modifications permettent d’économiser 18B (11 + 7 + 1).Java,
157149129127 octetsEssayez-le en ligne!
la source
String#repeat(int)
, mais TIO reste JDK 10, d’où larepeat(String,int)
méthode émulée (avec le même nombre d’octets). Le code actuel dans Java 11 serait:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Hexagone (linéaire),
128127126 octetsNotez qu'il ne s'agit pas d' Hexagony, mais simplement d'un (méta-) langage Timwi pris en charge dans Esoteric IDE. Ce n'est donc pas éligible à la prime.
Cependant, cela peut être converti en une solution Hexagony
(et je pense que ce sera plus petit que cette solution), je pourrai le faire plus tard. Cela prend plus d'effort queje l'ai fait ici .L'initiale
❢
prend 3 octets (e2 9d a2
). Chaque nouvelle ligne prend 1 octet (0a
).Non Essayez-le en ligne !. Cela ne fonctionne que dans l'IDE Esoteric.
Code annoté:
la source
Japt
-R
,11 à10 octetsEssayez-le (ou utilisez TIO pour exécuter plusieurs tests)
Explication
la source