Escalier Alphabet

30

Le défi

Votre tâche consiste à créer un programme ou une fonction qui génère les éléments suivants sans entrée:

a
bb
ccc
dddd
eeeee
ffffff
ggggggg
hhhhhhhh
iiiiiiiii
jjjjjjjjjj
kkkkkkkkkkk
llllllllllll
mmmmmmmmmmmmm
nnnnnnnnnnnnnn
ooooooooooooooo
pppppppppppppppp
qqqqqqqqqqqqqqqqq
rrrrrrrrrrrrrrrrrr
sssssssssssssssssss
tttttttttttttttttttt
uuuuuuuuuuuuuuuuuuuuu
vvvvvvvvvvvvvvvvvvvvvv
wwwwwwwwwwwwwwwwwwwwwww
xxxxxxxxxxxxxxxxxxxxxxxx
yyyyyyyyyyyyyyyyyyyyyyyyy
zzzzzzzzzzzzzzzzzzzzzzzzzz

Notation

C'est le , donc la réponse la plus courte dans chaque langue l'emporte.

SpookyGengar
la source
4
Sortie sous forme de liste de lignes?
2017 totalement humain
5
Pouvons-nous utiliser l'alphabet majuscule à la place?
Uriel
9
Je manquais des défis de l'alphabet! (mais ne le laissez pas savoir à Leaky Nun)
Luis Mendo
9
J'ai travaillé très dur pour vérifier s'il s'agissait d'un dupe et apparemment ce n'est pas le cas
Blue
4
@totallyhuman qui dépend de vous.
SpookyGengar

Réponses:

14

05AB1E , 2 octets

Essayez-le en ligne!

Notez que cela sort comme une liste de lignes, comme l'OP l'a explicitement autorisé. Le lien utilise une version avec jolie impression (rejoint par des nouvelles lignes).

Comment ça marche

  • A renvoie l'alphabet minuscule.
  • ƶ soulève l'alphabet (multiplie chaque élément par son index).
  • » rejoint par des nouvelles lignes.
M. Xcoder
la source
9

APL (Dyalog) , 12 8 5 octets SBCS

3 octets enregistrés grâce à @ngn

4 octets enregistrés grâce à @ Adám

⍴⍨⌸⎕A

Les lettres majuscules clarifiées OP sont valides, ainsi que la sortie sous forme de tableau de chaînes.

Essayez-le en ligne!

Comment?

nous donne chaque lettre de l' ⎕Aalphabet avec ses index, remise à la fonction ⍴⍨avec la lettre comme argument de gauche et l'index es comme argument de droite.

⍴⍨resha es son argument de droite à la longueur fournie par sa gauche. bascule la gauche et la droite (donc le symbole de celui-ci, ressemblant au visage de quelqu'un qui lit cette explication).

Uriel
la source
819⌶↑⎕A⍴¨⍨⍳26
2017 à
@ Adám merci! J'ai essayé toutes les variantes de / et \, une forme complètement ignorée ⍨
Uriel
Vous pouvez également supprimer le .
2017
@ Adám mais ça aurait l'air plus laid ⍨
Uriel
Allumez la boxe!
Adám
8

Haskell , 27 octets

[c<$['a'..c]|c<-['a'..'z']]

Essayez-le en ligne! Renvoie une liste de lignes. (Merci à @totallyhuman d'avoir souligné que cela est désormais autorisé)

Explication:

             c<-['a'..'z']  -- for each character c from 'a' to 'z'
[           |c<-['a'..'z']] -- build the list of
[   ['a'..c]|c<-['a'..'z']] -- the lists from 'a' to c, e.g. "abcd" for c='d'
[c<$['a'..c]|c<-['a'..'z']] -- with each element replaced by c itself, e.g. "dddd"
Laikoni
la source
* s'incline * Explication pour un noob? Répète-t-il <$son premier argument n fois, où n est la longueur de son deuxième argument?
2017 totalement humain
@totallyhuman Voilà. N'hésitez pas à demander à Of Monads and Men si vous avez d'autres questions.
Laikoni
Il y a des opérateurs très intéressants dans Prelude ... Merci pour l'explication!
2017
7

brainfuck , 74 octets

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+<<[->>[->+<<.>]>[-<+>]<+<+<<.>]

Essayez-le en ligne!

Explication

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
TAPE:
  000
  010   C_NEWLINE
  026   V_ITERCOUNT
  097   V_ALPHA
 >001<  V_PRINTCOUNT
  000   T_PRINTCOUNT

V_ITERCOUNT TIMES:      <<[-   

  V_PRINTCOUNT TIMES:     >>[-
    INC T_PRINTCOUNT        >+
    OUTPUT V_ALPHA          <<.
                          >]

  RESTORE V_PRINTCOUNT    >[-<+>]
  INC V_PRINTCOUNT        <+
  INC V_ALPHA             <+
  OUTPUT C_NEWLINE        <<.
                        >]

Essayez-le en ligne!

Conor O'Brien
la source
7

Befunge-98 (FBBI) , 27 octets

1+:0\::'`j'@+\k:$$>:#,_$a,

est un caractère de substitution (ASCII 26)

Essayez-le en ligne!

Utilise des lettres majuscules et a une nouvelle ligne de fin.

Explication

Le code fonctionne en stockant un compteur (0 initialement), et sur chaque boucle:

  • 1+ - Incrémente de 1
  • :0\:: - Pousse les choses pour que la pile ressemble à ceci: bottom [N, 0, N, N, N] top
  • '`j'@ - Vérifie si le compteur est supérieur à 26
    • j'@- Si c'est le cas, nous sautons par dessus 'et sortons en utilisant@
    • j'@- Si ce n'est pas le cas, nous exécutons le ', qui pousse la valeur ASCII de @la pile

Maintenant, la pile ressemble à ceci: bottom [N, 0, N, N, 64] top

  • +\- Ajoute, puis bascule le top 2: bottom [N, 0, (N+64), N] top la première fois, c'est ASCII 65, ouA
  • k:- Duplique la seconde des meilleurs (N+1)temps - maintenant il y a des (N+2)valeurs de (N+64)sur la pile (plus le Net 0du précédent)
  • $$- Jetez les 2 premières valeurs - maintenant il n'y a que des Nvaleurs de(N+64)
  • >:#,_- Imprime chaque valeur supérieure jusqu'à ce qu'elle atteigne un 0- cela signifie que des Ncopies de (N+64)sont imprimées
  • $- Jette le 0- Maintenant, la pile est justeN
  • a, - Imprime une entrée

Et ça se répète


J'aime la façon dont j'ai utilisé les @deux pour terminer le programme et pour l'ajouter au compteur.

MildlyMilquetoast
la source
@JamesHolderness Yep. Merci d'avoir attrapé ça!
MildlyMilquetoast
7

Rubis , 32 30 octets

-2 octets grâce à @EricDuminil.

27.times{|n|puts (n+96).chr*n}

Essayez-le en ligne!

Jordan
la source
1
Excellent. Selon un commentaire de OP, les sauts de ligne de fin / de début sont autorisés. Dans ce cas, ce 27.times{|n|puts (n+96).chr*n}serait correct avec 30 octets
Eric Duminil
6

JavaScript (ES6), 54 octets

f=(n=9)=>++n<36?n.toString(36).repeat(n-9)+`
`+f(n):''

O.innerText = f()
<pre id=O></pre>

Arnauld
la source
6

Excel VBA, 38 octets

Utilisation de la fenêtre immédiate. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"
remoel
la source
Ah. Ma faute. Je pensais que c'était Excel parce que j'utilisais les fonctions Excel en utilisant la fenêtre immédiate.
remoel
Vous pouvez supprimer un octet en supprimant le terminal"
Taylor Scott
5

Rubis, 38 octets

Renvoie un tableau de chaînes

->{(a=*?a..?z).map{|x|x*-~a.index(x)}}

-5 octets grâce à totalement humain

* -11 octets grâce à l'excellent golf de Jordan.

Afficher un nom
la source
Ce n'est que 48 octets par mon compte .
Jordan
1
Vous n'avez pas besoin "\n"du tout; putsfait cela pour vous (bien que pour référence future il $/soit plus court de 2 octets), mais vous pouvez vous en débarrasser putsentièrement si vous en faites un lambda qui retourne juste un tableau de lignes. Vous pouvez également passer a=[*?a..?z];puts a.mapà puts (a=*?a..?z).mapet x*(a.index(x)+1)à x*-~a.index(x). Ensemble, cela fait 38 octets .
Jordan
La version 38 octets fonctionne bien sur TiO (voir le lien dans le commentaire précédent). Notez que le (a=*?a..?z)est à l'intérieur du bloc, pas la partie arguments du lambda.
Jordan
4

V , 9 octets

¬az\ÓÎÛäl

Essayez-le en ligne!

Hexdump:

00000000: ac61 7a5c d3ce dbe4 6c                   .az\....l
DJMcMayhem
la source
4

MATL , 9 octets

2Y2"@X@Y"

Essayez-le en ligne!

Explication

2Y2     % Push string 'abc...z'
"       % For char in that string each
  @     %   Push current char
  X@    %   Push iteration index (1-based)
  Y"    %   Run-length decoding: repeat char that many times
        % Implicit end. Implicit display
Luis Mendo
la source
Savez-vous pourquoi &ne peut pas être utilisé pour dupliquer et transposer2Y2 ?
Stewie Griffin
@StewieGriffin &ne fait pas de duplication et de transposition, bien qu'il produise parfois le même résultat que cela. Il modifie le nombre d'entrées / sorties de la fonction suivante. Par exemple, si vous utilisez &+, la +fonction prend désormais une entrée au lieu de deux et génère la somme de l'entrée avec elle-même transposée. Mais c'est seulement parce que c'est comme ça que ça + marche avec 1 entrée (la même chose pour =, >et quelques autres)
Luis Mendo
4

Python 3 , 37 octets

for k in range(27):print(chr(k+96)*k)

Imprime une nouvelle ligne de début (ce qui est autorisé).

Essayez-le en ligne!

Luis Mendo
la source
4

Gelée ,  5  4 octets

abus de mise en œuvre sournoise de Python

-1 octet grâce à Adám (la sortie d'une liste de lignes a été autorisée; comme, maintenant, a écrit une fonction plutôt qu'un programme)

Øa×J

Un lien niladic qui retourne une liste de chaînes, les lignes
(pour imprimer avec les nouvelles lignes comme un programme complet juste ajouter de Ynouveau dans ).

Essayez-le en ligne! (le pied de page appelle le lien en tant que nilad (¢) et obtient la représentation Python du résultat (ŒṘ) pour plus de clarté car le comportement par défaut du programme complet écraserait le résultat ensemble commeabbccc...)

Comment?

Øa×J - main link: no arguments
Øa   - yield the alphabet = ['a','b','c',...,'z']
   J - range of length    = [1,2,3,...,26]
  ×  - multiplication     = ["a","bb","ccc",...,"zzzzzzzzzzzzzzzzzzzzzzzzzz"]
     - (Python multiplication lengthens chars to strings - not usually a Jelly thing)
Jonathan Allan
la source
1
Øa×J devrait suffire .
2017
hmm, peut-être - nous pouvons "sortir" une liste de lignes, mais nous devons "créer un programme" - lors de l'exécution en tant que programme, la sortie des quatre octets est écrasée pour n'avoir aucune indication sur sa nature de liste.
Jonathan Allan
programme ou fonction
Adám
4

MATL , 11 octets

2Y2t!g*!YRc

Essayez-le en ligne!

Utilise la multiplication de diffusion avec ceux pour obtenir une grande matrice carrée 26x26 des lettres souhaitées. Ensuite, la partie triangulaire inférieure est prise et imprimée implicitement.

Aussi 11 octets:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'
Sanchises
la source
@StewieGriffin J'étais en fait à mi-chemin de commenter votre réponse Octave sur la coïncidence de trouver la même solution.
Sanchises
4

Javascript, 87 octets , 72 octets (Un grand merci à @steenbergh)

Ma première réponse aussi:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};
NTCG
la source
Bienvenue! On dirait que vous pouvez le raccourcir un peu en supprimant les espaces autour ind=1au début, le point-virgule après i<123et le point-virgule final. veuillez également rendre votre en-tête un peu plus clair en indiquant la langue - bytecount, préfixée par un #.
steenbergh
Vous pouvez économiser six octets en abandonnant jcomplètement:for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
steenbergh
@steenbergh merci encore une fois, vous êtes gentil de m'aider.
NTCG
4

Japt , 9 7 octets

Produit un tableau de lignes

;C¬Ëp°E

Essayez-le


Explication

Divisez ( ¬) l'alphabet en minuscules ( ;C) en un tableau de caractères, mappez le tableau ( Ë) et répétez ( p) l'élément en cours par l'index en cours ( E) incrémenté ( °) fois.

Hirsute
la source
Exactement ce que j'avais, sauf que j'ai utilisé®p°Y
ETHproductions
3

Pip , 9 octets

FczPcX++i

Essayez-le en ligne!

En pseudocode, c'est

For-each c in z
    Print (c string-multiply ++i)

zest préréglé sur l'alphabet minuscule et iest préréglé sur 0.


Les solutions basées sur une carte prennent un octet supplémentaire car elles ont besoin que l' -nindicateur s'affiche sur plusieurs lignes:

{aX++i}Mz
B X_+1MEz
DLosc
la source
3

Acc !! , 66 octets

Count i while 26-i {
Count j while i+1-j {
Write 97+i
}
Write 10
}

Essayez-le en ligne!

Avec commentaires

# Loop i from 0 to 25
Count i while 26-i {
    # Loop j from 0 to i (inclusive)
    Count j while i+1-j {
        # Print a letter
        Write 97+i
    }
    # Print a newline
    Write 10
}
DLosc
la source
3

Haskell , 31 octets

-12 octets grâce à nimi.

zipWith replicate[1..26]['a'..]

Essayez-le en ligne!

Ce n'est pas un extrait, c'est une fonction nullary (celle qui ne prend aucun argument) qui génère une liste de lignes qui est autorisée en raison de ce méta consensus .

totalement humain
la source
3

R , 38 octets

Une réponse relativement peu intéressante. Itérer ide 1 à 26, imprimer la ie lettre des iheures de l'alphabet (avec un saut de ligne implicite).

for(i in 1:26)print(rep(letters[i],i))

Essayez-le en ligne!

Une approche plus intéressante pourrait être d'utiliser quelque chose comme ceci:

cat(letters[(1:351*2)^.5+.5])

Cela nous donne toutes les lettres dans la bonne quantité, mais pas de sauts de ligne. Peut-être que quelqu'un de plus intelligent que moi peut trouver un moyen de l'utiliser pour faire une réponse de golfeur.

rturnbull
la source
2
Je ne sais pas non plus comment utiliser votre deuxième approche, mais je sais que rep(letters, 1:26)c'est beaucoup plus court ...
Giuseppe
@Giuseppe Hah! Comme je l'ai dit, "quelqu'un de plus intelligent que moi" est absolument nécessaire.
rturnbull
3

Rouille , 82 octets

||for i in 1..27u8{println!("{}",((i+96) as char).to_string().repeat(i as usize))}

J'avais espéré que cela aurait été beaucoup plus court, mais la conversion / conversion explicite entre les types prend beaucoup d'octets :(

Essayez-le en ligne!

Wakawakamush
la source
1
J'ai 76 octets: essayez-le en ligne!
Conor O'Brien
3

PHP, 47 46 octets

for($c=a;$i<26;)echo"
",str_pad($c,++$i,$c++);

ou

for($c=a;$i<26;)echo str_pad("
",++$i+1,$c++);

Courez avec -nrou essayez-le en ligne .

Titus
la source
3

J , 18 17 octets

a.{~(#"0+&96)i.27

Explication:

              i.27      - list of integers 0 - 26
     (   +&96)          - adds 96 to the above list (starting offset of 'a')
      #"0               - copies the right argument left argument times  
  {~                    - select items from a list (arguments reversed)
a.                      - the whole alphabet


#"0 +&96 is a hook, which means that at first +96 is applied to the list i.27,
resulting in a list 96, 97, 98... 122, then #"0 is applied to this result. 
So it is evaluated as ((i.27)#"0(96+i.27)){a:

Essayez-le en ligne!

Galen Ivanov
la source
3

Octave , 25 24 octets

['',tril((x=65:90)'+~x)]

Essayez-le en ligne!

Sauvegardé d'un octet grâce à Giuseppe qui m'a informé que OP autorise les lettres majuscules.

Explication:

Créez un vecteur xavec les valeurs ASCII de l'alphabet majuscule et transposez-le. Ajoutez le négatif x(donc 26 zéros, dans un vecteur ligne, afin de créer une grille avec (les valeurs ASCII de):

AAAA
BBBB
CCCC

Prenez la matrice triangulaire inférieure et convertissez-la en caractères en concaténant avec la chaîne vide.

Stewie Griffin
la source
3

C (gcc) , 48 octets 50 octets

Version réexécutable, selon cleblanc et Steadybox dans les commentaires ci-dessous.

s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}

Essayez-le en ligne!

gastropner
la source
1
Bonne réponse. Je pense que votre fonction échouera la prochaine fois qu'elle sera appelée et selon ce lien, elle devrait être réutilisable; codegolf.meta.stackexchange.com/questions/4939/…
cleblanc
Voici une version fixe en 50 octets: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}bat toujours ma réponse de quelques octets :)
Steadybox
3

Japt, 17 16 11 octets

-5 octets grâce à Oliver

Dans ISO-8859-1

;26ÆCgX pXÄ

Pas le meilleur score, mais je suis toujours novice. Toute suggestion est la bienvenue.

Affiche la liste des lignes, comme OP le permet. Le lien contient 3 octets de plus pour les sauts de ligne.

Essayez-le en ligne!

;                      - Use string variables
 26                    - Literal 26
   Æ                   - For range 0..26
    C                  - Alphabet
     gX                -         . character at index X
        pXÄ            - Duplicate X+1 times
                       - End function (implicit)
Trèfle rouge
la source
1
Agréable! 1oBÊÄpeut être remplacé par 26õ. Vous pouvez économiser quelques octets supplémentaires en faisant quelque chose comme;26ÆCgX pXÄ
Oliver
@Oliver Comment diable je n'ai pas vu que 26 est plus court que la longueur de l'alphabet?! Merci. En outre, mon mauvais, je n'ai pas trouvé cela oprend l' fargument ...
RedClover