Pour tout entier positif k
, d(k)
notons le nombre de diviseurs de k
. Par exemple, d(6)
est 4
, parce que 6
a 4
diviseurs ( à savoir 1
, 2
, 3
, 6
).
Avec un nombre entier positif N
, affichez un "horizon" dans la technique ASCII en utilisant un caractère fixe, de sorte que la hauteur du "bâtiment" situé en position horizontale k
soit définie d(k)
par k = 1, ..., N
. Voir les cas de test ci-dessous.
Règles
- Tout caractère non-blanc peut être utilisé de manière cohérente, pas nécessairement
#
comme le montrent les cas de test. - L'algorithme devrait théoriquement fonctionner arbitrairement haut
N
. En pratique, il est acceptable que le programme soit limité par le temps, la mémoire, la taille du type de données ou la taille de l'écran. - Les espaces ou les nouvelles lignes sont précédés ou suivis horizontalement ou verticalement.
- L'entrée et la sortie peuvent être prises par n'importe quel moyen raisonnable .
- Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
- Le code le plus court en octets gagne.
Cas de test
N = 10
:
# # #
# # ###
#########
##########
N = 50
:
#
# #
# # # # # #
# # # # # #
# # # # # # # # # # ## # #
# # # # # # # # # # # ## # #
# # # # ### # ### # ### # ##### ### # ### # #
# # ### # ### # ### ##### # ##### ### # ### ###
#################################################
##################################################
N = 200
:
#
#
# # #
# # # #
# # # # #
# # # # #
# # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # ## # # # # # # # # # # # # # # # # # # ## # ## # #
# # # # # # # # # # # # # # # # # # # # # ## # # # # # # # # # ## # # # # # # # # # # # # # # # # # # ## # ## # #
# # # # # # # # # # ## # # # # # # ## # # # # ## # # # # # # # ### # ## # # # # ## # # # # # # ## # # # ## # ### # # # ## # ### ### # # # # ### # ## # #
# # # # # # # # # # # ## # # # # # # ## # # # # ## # ## # # # # # ### # ## # # # # ## # # # # # # ## # # # ## # ### # # # ## # ### ### # # # # ### # ## # #
# # # # ### # ### # ### # ##### ### # ### # ### ##### # ##### ### # ##### ### ##### ####### ### # ### # ### ####### ##### ### ##### # ######### # ##### ##### ### # ### ##### # ######### # ### # #
# # ### # ### # ### ##### # ##### ### # ### ##### ##### # ##### ### # ##### ### ##### ####### ### # ### # ### ############# ### ##### # ######### # ##### ##### ### ##### ##### # ######### # ### # #
#######################################################################################################################################################################################################
########################################################################################################################################################################################################
C,
9995929190 octetsVoir le travail ici .
la source
Octave,
414032 octetsMerci à @StewieGriffin sauvé 8 octets.
Essayez-le en ligne!
Réponses précédentes:
Essayez-le en ligne!
Essayez-le en ligne!
Explication:
la source
@(N)" #"(sort(~mod(k=1:N,k')+1))
vous évite quelques octets.@(N)['',35*sort(~mod(k=1:N,k'))]
.mod(1:N,(1:N).')
acceptable dans MATLAB?Haskell , 71 octets
f
prend unInt
et retourne unString
.Essayez-le en ligne!
m
est leN
de l'OP (les variables Haskell doivent être en minuscules.)l=[1..m]
est utilisée dans les interprétations de liste imbriquées pour parcourir toutes les lignes, les colonnes et les diviseurs potentiels. Cela signifie quelques lignes initiales supplémentaires remplies d'espaces.n
est la colonne (également le nombre vérifié),i
est la ligne.['#'|0<-mod n<$>l]
est une liste de'#'
caractères avec la longueur du nombre de diviseurs den
.la source
Octave, 61 octets
Explication:
Quelques points à souligner
Que se passe-t-il à l'intérieur de la boucle (supposons une entrée
6
)1,2,4
)1,2,3,6
)Enfin, nous le retournons et le convertissons en une chaîne, en modifiant implicitement le
0
à32
:la source
Python 3 , 111 octets
Essayez-le en ligne!
Cela produit des espaces blancs verticaux
la source
APL (Dyalog) , 19 octets
Essayez-le en ligne!
⎕
obtenir une entrée évaluée ( N )⍳
1 ... N∘.|⍨
division reste table avec 1 ... N à la fois comme axe vertical et horizontal0=
où égal à zéro (c'est à dire qu'il divise)+⌿
additionner les colonnes (c'est-à-dire donner le nombre de diviseurs pour chaque nombre)'#'⍴¨⍨
utiliser chaque nombre pour remodeler le caractère de hachage (donne la liste des chaînes)↑
mix (liste de chaînes dans un tableau de lignes)⍉
transposer⊖
retourner à l'enversla source
Mathematica,
5957 octetsla source
50
par#
et en ajoutant&
. Vous pouvez également enregistrer des octets avec la notation infixe:X~Table~#&
et0~DivisorSigma~Range@#
C #,
333281 octetsAvec des sauts de ligne:
Bien que je sois sûr que cela soit possible plus rapidement, j'espère que nous parviendrons ensemble à une solution plus courte;)
52 octets sauvés avec l'aide de raznagul
la source
using
-statement.using System.Linq;using C=System.Console;n=>{var v=new int[n];for(var k=1,i;++k<=n;)for(i=1;i<k;)if(k%i++==0)v[k-1]++;for(var i=0,u;i<v.Length;i++)for(u=v.Max()-v[i];u<v.Max();){C.SetCursorPosition(i, u++);C.Write("#");}};
compilez en unAction
, déplacez les incréments et quelques autres modifications mineures. Je n'ai pas testé ça mais ça devrait marcher.Mathematica, 99 octets
pour N = 50
la source
(T=0~DivisorSigma~Range@#;Row[Column/@Table[Join[Table[,Max@T-T[[i]]],$~Table~T[[i]]],{i,1,#}]])&
Charbon de bois ,
232220 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Edit: 1 octet enregistrées par bouclage à
k
partir0
dei-1
et en ajoutant à l'1
intérieur de la boucle. Enregistré deux octets supplémentaires en ne stockant pas l'entrée dans une variable. Explication:Edit: Ce "one-liner" de 18 octets (lien vers version du code verbeuse) n'aurait pas fonctionné avec la version de Charcoal au moment où la question a été soumise: essayez-le en ligne!
la source
05AB1E , 12 octets
Code:
Explication:
Utilise le codage 05AB1E . Essayez-le en ligne!
la source
ζ
au lieu de.Bø
? En outre, le personnage n'a pas à être#
ζ
n'existait pas à l'époque.Python 2 , 101 octets
Essayez-le en ligne!
Cela produit (beaucoup) d’espaces blancs verticalement. Il imprime un total de
N
lignes dont la grande majorité sera généralement vierge.la source
Japt ,
34 33 1614 octets17 octets sauvés grâce à @ETHproductions
Essayez-le en ligne!
la source
z
simplement le rembourrage:õ_â lã'#pX÷z w
J , 28 octets
Définit un verbe monadique. Essayez-le en ligne!
Explication
la source
PHP, 126 octets
Essayez-le en ligne!
la source
Brachylog , 34 octets
Essayez-le en ligne!
la source
Alice , 33 octets
Essayez-le en ligne!
L'entrée est (malheureusement) sous la forme d'un point de code . Au moins, il lit un caractère UTF-8, vous pouvez donc utiliser des entrées plus grandes que 255, mais elles sont toujours limitées et le format d’entrée est très pénible. Pour trois octets supplémentaires, on peut lire un entier décimal:
Essayez-le en ligne!
Le caractère non-blanc de la sortie est
!
.Notez que la solution imprime également une tonne d'espaces de premier plan (elle commence toujours par une ligne vide, puis une
NxN
grille; ainsi, pour les plus grandesN
, il y aura plusieurs lignes d'espaces avant les premières!
.)Explication
J'ai déjà utilisé et expliqué la
&w...k
construction (par exemple ici ). C'est un joli petit idiome qui fait apparaître un entier n puis exécute un morceau de code n + 1 fois (par conséquent, il est généralement utilisét&w...k
pour exécuter une boucle n fois ent
décrémentant la valeur d'entrée). Cela est fait en travaillant avec la pile d'adresses de retour (RAS).w
transmet l'adresse IP actuelle au serveur d'accès à distance et si nous la répétons avec,&
l'adresse sera poussée n fois.k
affiche une adresse du serveur d'accès à distance et y retourne. Si le RAS est vide, il ne fait rien du tout et la boucle est sortie.Vous remarquerez peut-être qu'il n'est pas trivial d'imbriquer ces boucles, car à la fin de la boucle interne, la pile n'est pas vide et
k
ne devient donc pas un non-op. Au lieu de cela, l'IP reviendrait au début de la boucle externe. La solution générale consiste à envelopper la boucle interne dans son propre sous-programme. Mais si nous pouvons organiser la boucle imbriquée de telle sorte que la boucle externe se termine par la boucle interne, nous pouvons en fait utiliser ce comportement et même en économiser unk
!Donc cette construction:
C'est une boucle imbriquée fonctionnelle qui exécute le
XYYYXYYYXYYY...
(pour un certain nombre deY
s dans chaque itération). Il est intéressant de pouvoir terminer les deux boucles par une seulek
, car elle consomme une adresse externe du serveur d'accès à distance chaque fois que les adresses internes sont épuisées.Cet idiome est utilisé dans le programme pour exécuter la boucle sur la grille de sortie.
la source
En fait , 25 octets
Essayez-le en ligne!
Version de 22 octets avec beaucoup de nouvelles lignes principales
Essayez-le en ligne!
la source
R,
8382 octets-1 octet grâce à MickyT
Lit
N
de stdin.Essayez-le en ligne!
la source
!=0
can be>0
Pyth , 16 octets
Essayez-le en ligne!
la source
SpecBAS - 149 octets
Un tableau conserve le nombre de diviseurs, puis affiche le nombre correct de caractères jusqu'à la position 50.
la source
PHP, 99 octets
imprime un premier espace; courir comme pipe
php -nr '<code>'
ou essayer en ligne .panne
la source
PowerShell, 101 octets
Script de test moins joué:
Sortie:
la source
SOGL V0.12 , 8 octets
Essayez-le ici!
la source
Wolfram Language (Mathematica) ,
4644 octetsEssayez-le en ligne! Mais peut-être l' essayer en ligne! avec ColumnForm au lieu de Grid , car
Grid
ne fonctionne pas dans TIO. Dans Mathematica, cela a l'air mieux:Une troisième solution Mathematica ...
Divisors@Range@#
recherche tous les diviseurs dans la plage que nous voulons, puis multiplie0
et soustrayons" "
, rendant chaque diviseur égal à-" "
.PadLeft
ajoute des zéros à gauche, créant une ligne d'horizon latérale, dont nous corrigeons l'orientation avec
=\[Transpose]
. Enfin, ajouter" "
à tout fait que toutes les entrées sont0
soit" "
.Au lieu de cela, le 59 octets
""<>Riffle[PadLeft["X"-" "+0Divisors@Range@#]+" ","\n"]&
produit une sortie chaîne.la source
Ajouter ++ , 58 octets
Essayez-le en ligne!
Comment ça fonctionne
g
k
g
k
#
la source