Étant donné un entier positif n >= 1
, affichez les premières n
lignes de la structure suivante:
#
# #
###
# #
# # #
## ##
#####
# #
# # #
# # # #
# ### #
## ##
## # ##
### ###
#######
La n
-ième ligne indexée est la représentation binaire de n
, mise en miroir sans copier le dernier caractère, avec #
à la place de 1 et <space>
à la place de 0. Toutes les lignes sont centrées.
Vous devez sortir en tant qu'art ASCII mais vous pouvez utiliser n'importe quel caractère non blanc à la place de celui que j'utilise #
dans l'exemple. Les espaces de fin sont autorisés et les retours à la ligne de fin sont autorisés. La sortie doit ressembler à l'exemple, et pas d'espace blanc de tête supplémentaire ni de nouvelle ligne de tête.
Vous pouvez voir les 1023 premières rangées de la cathédrale fractale ici .
Pour générer des cas de test plus volumineux, voici une implémentation de référence non golfée en Python
Réponses:
MATL , 10 octets
Essayez-le en ligne!
Explication
la source
35*c
est de 4 caractères35
fixe? Cela semble un peu précis. D'un autre côté, certains défis permettent à n'importe quel personnage, donc ce peut être une bonne idée. Pensez-vous que#
c'est le plus courant?Zc
, avec caractère35
, ie#
). Merci, @ ConorO'Brien!05AB1E , 9 octets
Code:
Utilise l' encodage 05AB1E . Essayez-le en ligne!
Explication:
la source
Gelée , 12 octets
Essayez-le en ligne!
la source
Python 2 , 92 octets
Essayez-le en ligne!
En Python 3,
s=f'{x+1:0{len(bin(n))-2}b}'.replace(*'0 ')
est plus court, maisint(input())
et les parenthèses autour de l'print
argument le poussent jusqu'à 95 octets.la source
2**len(bin(n))/4
toute façon)JavaScript (ES6), 106 octets
Utilise
1
comme caractère non blanc.Démo
Afficher l'extrait de code
Version alternative (même taille)
Sans
Math.clz32()
:la source
Math.clz32
- je ne savais même pas que ça existait!Coque ,
212018 octetsMerci @Zgarb d'avoir joué au golf sur 2 octets!
Essayez-le en ligne!
Non golfé / Explication
Pour éviter un long rembourrage, cela détermine la largeur de la fractale qui est donnée en tant que
2*len(bin(N))-1
et génère toutes les séquences de cette longueur avec les symboles#,_
(«_» désigne un espace).Étant donné que la puissance cartésienne est générée dans l'ordre et que les nombres binaires le sont aussi, c'est très bien. Tout ce que nous devons faire pour obtenir la fractale à ce stade, c'est filtrer tous les palindromes et c'est essentiellement ça:
la source
Ṙ;
peut être justeR
etȯ
inutile. Belle idée de réponse!Mathematica, 94 octets
la source
Mathematica, 98 octets
Essayez-le dans le bac à sable Wolfram ! Le
⌊
et⌋
sont trois octets chacun.C'est une approche différente des autres réponses jusqu'à présent, en utilisant la nature fractale du motif. L'étape clé est
ArrayFlatten@{{0,#,0},{1,0,1},{1,#,1}}&
, qui fait le truc fractal, mieux expliqué sous forme d'image:Le code répète cette étape suffisamment de fois pour obtenir au moins n lignes, puis supprime les lignes supplémentaires et l'affiche correctement.
la source
Gaia , 11 octets
Essayez-le en ligne!
Explication
la source
Python 2 ,
120118 118107 octetsmerci @luismendo, @officialaimm, @ halvard-hummel
Essayez-le en ligne!
la source
replace(*'0 ')
pour 2 octetsC # (.NET Core) ,
192178 octets168 + 23merci TheLethalCoder pour l'aide.
Essayez-le en ligne!
assez sûr que cela peut être réduit de beaucoup, très probablement dans le rembourrage et l'inversion de la chaîne.
la source
x=>
dans le nombre d'octets et notez que vous n'avez pas besoin d'inclure le point-virgule de fin.Enumerable.Range(1,x).Select(z
est plus court quenew int[x].Select((_,z)
(je pense que c'est correct). Lorsque vous utilisez Linq, vous devez inclureusing System.Linq;
votre nombre d'octets. Vous l'utilisez égalementMath
, vous devez donc l'inclureusing System;
ou le qualifier entièrement. Notez que cela est alors plus court quenamespace System.Linq{}
,' '
dans l'PadLeft
appel car un espace est la valeur par défaut.namespace System.Linq{}
Fusain , 28 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Créez une liste des premiers
n
nombres naturels.Répétez jusqu'à ce que tous les éléments soient nuls.
Imprime le dernier chiffre binaire de chaque élément de la liste sous la forme d'un
ou
#
.Passez à la colonne précédente.
Divisez tous les éléments de la liste par deux.
Une fois la moitié gauche dessinée, réfléchissez-la.
la source
MapAssignRight(IntDivide, 2, q);
ce qui économise 3 octets.J, 29 octets
Essayez-le en ligne!
explication
i.
entiers jusqu'à n, l'entrée(#.^:_1)
converti en base 2(],}.@|.)
ligne par ligne ("1
fait cette partie), prenez le nombre binaire (]
est l'identité fn), et cat il (,
) avec son inverse (|.
), où l'inverse est décapité (}.
).' #'{~
convertit les1
s et0
s en hachages et espaces.la source
#.inv
place de#.^:_1
.n = 1
, vous n'imprimez rien. Quoi qu'il en soit, vous pouvez raser quelques octets avec quelques modifications comme cela' #'{~(,|.@}:)"1@#:@:>:@i.
(si vous êtes autorisé à être désactivé par un, vous pouvez supprimer 4 octets supplémentaires). Fondamentalement, utilisez un crochet car il fonctionne exactement comme une fourchette lorsque la dent gauche est]
et utilisez le intégré dans#:
lequel AFAIK est à peu près le même#.inv
. EDIT: Je pense que ma réponse est assez similaire pour justifier d'être un commentaire, faites-moi savoir si vous pensez que ce devrait être une réponse à part entière.#:
et ça n'a pas fonctionné, mais je dois me souvenir mal parce que vous avez raison.2 #:
qui n'obtiendra que le chiffre le plus à droite.#:
Fonctions monadiques comme#.inv
(ou#.&:_1
). Cela diffère de dyadique#:
, qui donne seulement autant de chiffres qu'il y a d'atomes dans son argument de gauche.Proton , 95 octets
Essayez-le en ligne!
Il y a trop de bugs pour ne pas avoir trop de parenthèses ... J'ai besoin de corriger l'analyseur ...
la source
SOGL V0.12 , 11 octets
Essayez-le ici!
la source
PHP,
98 97 9594 + 1 octetsExécuter en tant que pipe avec
-nR
ou l' essayer en ligne . Utilise1
comme espace non blanc.la source
$argn=1
et$argn=3
n'est pas correcte, et$argn
est basée sur 0 (spécifié était basé sur 1)K (ngn / k) , 19 octets
Essayez-le en ligne!
la source
Python 2 , 93 octets
Essayez-le en ligne!
la source
Python 2 , 89 octets
Essayez-le en ligne!
la source
C (gcc) ,
146108105 octetsEssayez-le en ligne!
Il s'agit d'une fonction
f(n)
appelée avec le nombre de lignesn
, utilisant un point d'exclamation (!
) comme caractère non blanc.Explication :
la source
--n&&o+p(n);o;
place de--n?o,p(n),o:o;
etfor(;c++<n;puts(""))p(b);
au lieu dewhile(c++<n)p(b),puts("");
JavaScript (Node.js) ,
156149 octets-7 octets par @ ConorO'Brien
Essayez-le en ligne!
Fonction récursive. Malheureusement, JS ne prend pas en charge l'inversion d'une chaîne, donc 19 octets sont utilisés pour la transformer en tableau et inversement.
la source
[...b]
place deb.split("")
; vous pouvez également utiliser.join``.substr(1)
au lieu de.join("").substr(1)
; enfin, je pense que vous pouvez utiliser à las+1
place des+"1"
Perl 5 , 77 + 1 (-n) = 78 octets
Essayez-le en ligne!
Utiliser '1' au lieu de '#' car cela économise quelques octets.
la source
Stax , 8 octets
Exécuter et déboguer
Réponse la plus courte jusqu'à présent. Utilise CP437 charcode 1 à la place de
#
.Équivalent ASCII:
la source