Alphabet-Treppe

30

Die Herausforderung

Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die Folgendes ohne Eingabe ausgibt:

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

Wertung

Das ist , also gewinnt die kürzeste Antwort in jeder Sprache.

SpookyGengar
quelle
4
Ausgabe als Zeilenliste?
Totalhuman
5
Können wir stattdessen das Großbuchstaben verwenden?
Uriel
9
Ich vermisste Alphabet Herausforderungen! (aber lass es Leaky Nun nicht wissen)
Luis Mendo
9
Ich habe sehr hart gearbeitet, um zu überprüfen, ob es ein Betrug war und anscheinend nicht
Blue
4
@totallyhuman das liegt an dir.
SpookyGengar

Antworten:

14

05AB1E , 2 Bytes

Probieren Sie es online!

Beachten Sie, dass dies als Liste von Zeilen ausgegeben wird, da das OP dies ausdrücklich zulässt. Der Link verwendet eine Version mit hübschem Aufdruck (verbunden mit Zeilenumbrüchen).

Wie es funktioniert

  • A ergibt das Kleinbuchstaben.
  • ƶ hebt das Alphabet an (multipliziert jedes Element mit seinem Index).
  • » verbindet durch Zeilenumbrüche.
Mr. Xcoder
quelle
9

APL (Dyalog) , 12 8 5 Bytes SBCS

3 Bytes gespart dank @ngn

4 Bytes gespart dank @ Adám

⍴⍨⌸⎕A

OP- geklärte Großbuchstaben sind gültig und werden als Array von Zeichenfolgen ausgegeben.

Probieren Sie es online!

Wie?

gibt uns jeden Buchstaben im ⎕Alphabet mit seinem Indizes darin, in die Funktion übergab ⍴⍨mit dem Buchstaben als linkes Argument und dem Index es als rechtes Argument.

⍴⍨Das rechte Argument wird auf die Länge des linken umgerechnet . wechselt zwischen links und rechts (daher das Symbol dafür, das aussieht wie das Gesicht eines Lesers dieser Erklärung).

Uriel
quelle
819⌶↑⎕A⍴¨⍨⍳26
Adám
@Adám danke! Ich habe versucht, alle Variationen von / und \, völlig ignorierte Form ⍨
Uriel
Sie können das auch entfernen .
Adám
@ Adám, aber es würde hässlicher aussehen ⍨
Uriel
Boxen einschalten!
Adám
8

Haskell , 27 Bytes

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

Probieren Sie es online! Gibt eine Liste von Zeilen zurück. (Danke an @totallyhuman für den Hinweis, dass dies jetzt erlaubt ist)

Erläuterung:

             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
quelle
* Bögen * Erklärung für einen Noob? Hat <$wiederholt ihr erstes Argument n - mal, wobei n die Länge seines zweiten Arguments ist?
Totalhuman
@totallyhuman Los geht's. Fühlen Sie sich frei, in Of Monads and Men zu fragen, wenn Sie weitere Fragen haben.
Laikoni
Es gibt einige sehr interessante Operatoren in Prelude ... Danke für die Erklärung!
Totalhuman
7

Brainfuck , 74 Bytes

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

Probieren Sie es online!

Erläuterung

++++++++[>+>+++>++++++++++++<<<-]>++>++>+>+
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        <<.
                        >]

Probieren Sie es online!

Conor O'Brien
quelle
7

Befunge-98 (FBBI) , 27 Bytes

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

wo ist ein Substitutionszeichen (ASCII 26)

Probieren Sie es online!

Verwendet Großbuchstaben und hat einen nachgestellten Zeilenumbruch.

Erläuterung

Der Code speichert einen Zähler (anfangs 0) und in jeder Schleife:

  • 1+ - Erhöht es um 1
  • :0\:: - Pusht Dinge so, dass der Stack so aussieht: bottom [N, 0, N, N, N] top
  • '`j'@ - Prüft, ob der Zähler größer als 26 ist
    • j'@- Wenn es so ist, springen wir über das 'und verlassen es mit@
    • j'@- Wenn nicht, führen wir den aus ', der den ASCII-Wert von @zum Stapel schiebt

Nun sieht der Stack so aus: bottom [N, 0, N, N, 64] top

  • +\- Fügt hinzu und schaltet dann die Top 2 um: Beim bottom [N, 0, (N+64), N] top ersten Durchgang ist dies ASCII 65 oderA
  • k:- Dupliziert die Sekunde von den höchsten (N+1)Zeiten - jetzt gibt es (N+2)Werte von (N+64)auf dem Stapel (plus die Nund 0von früher)
  • $$- Werfen Sie die oberen 2 Werte weg - jetzt gibt es nur NWerte von(N+64)
  • >:#,_- Druckt jeden Spitzenwert aus, bis es zu einem kommt. 0Dies bedeutet, dass NKopien von (N+64)gedruckt werden
  • $- Wirft die weg 0- Jetzt ist der Stapel geradeN
  • a, - Druckt eine Eingabe

Und es wiederholt sich


Mir gefällt, wie ich @beide zum Beenden des Programms und zum Hinzufügen zum Zähler verwendet habe.

MilderMilquetoast
quelle
@ JamesHolderness Yep. Danke, dass du das verstanden hast!
MildlyMilquetoast
7

Ruby , 32-30 Bytes

-2 Bytes dank @EricDuminil.

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

Probieren Sie es online!

Jordan
quelle
1
Ausgezeichnet. Nach einem Kommentar von OP sind nachgestellte / führende Zeilenumbrüche erlaubt. In diesem Fall 27.times{|n|puts (n+96).chr*n}wäre mit 30 Bytes richtig
Eric Duminil
6

JavaScript (ES6), 54 Byte

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

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

Arnauld
quelle
6

Excel VBA, 38 Bytes

Sofortfenster verwenden. :)

[A1:A26]="=REPT(CHAR(96+ROW()),ROW())"
remoel
quelle
Ah. Mein Fehler. Ich dachte, es ist Excel, weil ich Excel-Funktionen mit Sofortfenster verwendet habe.
Remoel
Sie können ein Byte löschen, indem Sie das Terminal entfernen"
Taylor Scott
5

Ruby, 38 Bytes

Gibt ein Array von Strings zurück

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

-5 bytes dank totalhuman

* -11 Bytes dank des hervorragenden Golfspiels von Jordan.

Anzeigename
quelle
Dies sind nach meiner Zählung nur 48 Bytes .
Jordanien
1
Du brauchst überhaupt nicht "\n"; putserledigt das für Sie (obwohl die Referenz für die Zukunft $/2 Bytes kürzer ist) - aber Sie können es putsganz loswerden, wenn Sie dies zu einem Lambda machen, das nur ein Array von Zeilen zurückgibt. Sie können auch a=[*?a..?z];puts a.mapzu puts (a=*?a..?z).mapund x*(a.index(x)+1)zu wechseln x*-~a.index(x). Insgesamt sind das 38 Bytes .
Jordanien
Die 38-Byte-Version funktioniert bei TiO einwandfrei (siehe Link im vorherigen Kommentar). Beachten Sie, dass sich das (a=*?a..?z)im Block befindet und nicht der Argumentteil des Lambda.
Jordanien
4

V , 9 Bytes

¬az\ÓÎÛäl

Probieren Sie es online!

Hexdump:

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

MATL , 9 Bytes

2Y2"@X@Y"

Probieren Sie es online!

Erläuterung

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
quelle
Wissen Sie, warum &nicht zum Duplizieren und Transponieren verwendet werden kann2Y2 ?
Stewie Griffin
@StewieGriffin &dupliziert und transponiert nicht wirklich, obwohl es manchmal das gleiche Ergebnis liefert. Was es tut, ist die Anzahl der Ein- / Ausgänge der nächsten Funktion zu ändern. Wenn Sie zum Beispiel verwenden &+, nimmt die +Funktion jetzt eine anstelle von zwei Eingaben und gibt die Summe der Eingaben mit sich selbst transponiert aus. Aber das ist nur , weil das ist , wie die + Arbeit mit 1 Eingang (gleiche gilt für =, >und einige andere)
Luis Mendo
4

Python 3 , 37 Bytes

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

Gibt eine führende neue Zeile aus (was erlaubt ist).

Probieren Sie es online!

Luis Mendo
quelle
4

Gelee ,  5  4 Bytes

hinterhältiger Missbrauch der Python-Implementierung

-1 Byte dank Adám (das Ausgeben einer Liste von Zeilen war erlaubt; so wie das Schreiben einer Funktion anstelle eines Programms)

Øa×J

Ein Niladic-Link, der eine Liste von Zeichenfolgen und Zeilen zurückgibt
(um sie mit den neuen Zeilen als vollständiges Programm auszudrucken, fügen Sie Ysie einfach wieder hinzu ).

Probieren Sie es online! (Die Fußzeile ruft den Link als nilad (¢) auf undruftŒṘaus Gründen der Übersichtlichkeitdie Python-Darstellung des Ergebnisses () ab, da das Standardverhalten des vollständigen Programms das Ergebnis wie folgt zusammenfassen würde.abbccc...)

Wie?

Ø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
quelle
1
Øa×J sollte reichen .
Adám
hmm, vielleicht - wir können eine Liste von Zeilen "ausgeben", aber wir müssen "ein Programm erstellen" - wenn wir als Programm ausgeführt werden, wird die Ausgabe des 4-Bytes zerschlagen, um keinen Hinweis auf seine Listennatur zu erhalten.
Jonathan Allan
Programm oder Funktion
Adám
4

MATL , 11 Bytes

2Y2t!g*!YRc

Probieren Sie es online!

Verwendet Broadcast-Multiplikation mit Einsen, um eine große quadratische 26x26-Matrix der gewünschten Buchstaben zu erhalten. Als nächstes wird der untere dreieckige Teil genommen und implizit gedruckt.

Auch 11 Bytes:

2Y2!t~!+YRc  % Using broadcast addition with zeroes
2Y2!l26X"YR  % Using 'repmat'
Sanchises
quelle
@StewieGriffin Eigentlich habe ich Ihre Octave-Antwort zur Hälfte kommentiert, weil ich auf die gleiche Lösung gekommen bin.
Sanchises
4

Javascript, 87 Bytes , 72 Bytes (Vielen Dank an @steenbergh)

Meine erste Antwort auch:

for(i=1,j=97;j<123;){console.log(String.fromCharCode(j++).repeat(i++))};
NTCG
quelle
Herzlich willkommen! Sieht so aus, als könnten Sie es ein wenig verkürzen, indem Sie die Leerzeichen ind=1am Anfang, das Semikolon danach i<123und das letzte Semikolon entfernen . Bitte verdeutlichen Sie Ihren Header auch durch die Angabe der Sprache - bytecount, der ein # vorangestellt ist.
Steenbergh
Sie können sechs Bytes sparen, indem Sie jinsgesamt for(i=1;i<27;){console.log(String.fromCharCode(i+96).repeat(i++))}
löschen
@steenbergh nochmals vielen dank, wie nett du bist, mir zu helfen.
NTCG
4

Japt , 9 7 Bytes

Gibt ein Array von Zeilen aus

;C¬Ëp°E

Versuch es


Erläuterung

Teilen Sie ( ¬) das Kleinbuchstaben ( ;C) in ein Array von Zeichen, ordnen Sie es dem Array ( Ë) zu und wiederholen Sie ( p) das aktuelle Element um den aktuellen Index ( E), indem Sie ihn inkrementieren ( °).

Zottelig
quelle
Genau das, was ich hatte, außer dass ich verwendet habe®p°Y
ETHproductions
3

Pip , 9 Bytes

FczPcX++i

Probieren Sie es online!

Im Pseudocode ist dies

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

wo zist mit dem Kleinbuchstaben vorgegeben und iist voreingestellt auf 0.


Kartenbasierte Lösungen benötigen ein zusätzliches Byte, da das -nFlag in mehreren Zeilen angezeigt werden muss:

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

Acc !! 66 Bytes

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

Probieren Sie es online!

Mit Kommentaren

# 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
quelle
3

Haskell , 31 Bytes

-12 bytes dank nimi.

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

Probieren Sie es online!

Dies ist kein Snippet, sondern eine Null-Funktion (keine Argumente), die eine Liste von Zeilen ausgibt, die aufgrund dieses Metakonsenses zulässig ist .

total menschlich
quelle
3

R , 38 Bytes

Eine relativ uninteressante Antwort. Iterieren Sie izwischen 1 und 26, und drucken Sie den dritten iBuchstaben des Alphabets i(mit einem impliziten Zeilenumbruch).

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

Probieren Sie es online!

Ein interessanterer Ansatz könnte sein, etwa Folgendes zu verwenden:

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

Dies gibt uns alle Buchstaben in der richtigen Menge, aber keine Zeilenumbrüche. Vielleicht kann jemand, der schlauer als ich ist, einen Weg finden, das zu nutzen, um eine golferischere Antwort zu finden.

rturnbull
quelle
2
Ich bin mir auch nicht sicher, wie ich Ihren zweiten Ansatz verwenden soll, aber ich weiß, dass rep(letters, 1:26)das viel kürzer ist ...
Giuseppe,
@ Giuseppe Hah! Wie ich schon sagte, "jemand schlauer als ich" ist definitiv erforderlich.
rturnbull
3

Rust , 82 Bytes

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

Ich hatte gehofft, dass es viel kürzer gewesen wäre, aber das explizite Konvertieren / Casting zwischen Typen benötigt eine Menge Bytes :(

Probieren Sie es online!

Wakawakamush
quelle
1
Ich habe 76 Bytes: Probieren Sie es online!
Conor O'Brien
3

PHP, 47 46 Bytes

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

oder

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

Laufen Sie mit -nroder versuchen Sie es online .

Titus
quelle
3

J , 18 - 17 Bytes

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

Erläuterung:

              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:

Probieren Sie es online!

Galen Ivanov
quelle
3

Oktave , 25 24 Bytes

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

Probieren Sie es online!

Dank Giuseppe, der mir mitteilte, dass OP Großbuchstaben zulässt, wurde ein Byte gespeichert.

Erläuterung:

Erstellen Sie einen Vektor xmit den ASCII-Werten des Großbuchstaben und transponieren Sie ihn. Addiere die negierten x(also 26 Nullen, in einem Zeilenvektor, um ein Gitter mit (den ASCII-Werten von) zu erzeugen:

AAAA
BBBB
CCCC

Nehmen Sie die untere Dreiecksmatrix und konvertieren Sie sie in Zeichen, indem Sie sie mit der leeren Zeichenfolge verketten.

Stewie Griffin
quelle
3

C (gcc) , 48 Bytes, 50 Bytes

Nachlauffähige Version, gemäß Cleblanc und Steadybox in den Kommentaren unten.

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

Probieren Sie es online!

Gastropner
quelle
1
Gute Antwort. Ich denke, Ihre Funktion wird beim nächsten Aufruf fehlschlagen und sollte gemäß diesem Link wiederverwendbar sein. codegolf.meta.stackexchange.com/questions/4939/…
cleblanc
Hier ist eine feste Version in 50 Bytes: s[9];main(i){for(;i<27;)puts(memset(s,i+95,i++));}Noch schlägt meine Antwort um ein paar Bytes :)
Steadybox
3

Japt, 17 16 11 Bytes

-5 Bytes danke an Oliver

In ISO-8859-1

;26ÆCgX pXÄ

Nicht das beste Ergebnis, aber ich bin immer noch ein Neuling. Anregungen sind sehr willkommen.

Gibt die Liste der Zeilen aus, sofern dies OP erlaubt. Der Link enthält 3 Bytes mehr für Zeilenumbrüche.

Probieren Sie es online!

;                      - 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)
Rotklee
quelle
1
Nett! 1oBÊÄkann durch ersetzt werden 26õ. Sie können tun , so etwas wie ein paar mehr Bytes speichern;26ÆCgX pXÄ
Oliver
@Oliver Wie zum Teufel habe ich nicht gesehen, dass 26 kürzer als das Alphabet ist ?! Vielen Dank. Auch mein schlechtes Ich habe nicht gefunden, dass odas fArgument ...
RedClover