Das Alphabet-Dreieck schlägt wieder zu


24

Aufgabe

Ihre Aufgabe ist es, genau diesen Text auszudrucken:

A
BCD
EFGHI
JKLMNOP
QRSTUVWXY
ZABCDEFGHIJ
KLMNOPQRSTUVW
XYZABCDEFGHIJKL
MNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLM
NOPQRSTUVWXYZABCDEFGHIJKLMN
OPQRSTUVWXYZABCDEFGHIJKLMNOPQ
RSTUVWXYZABCDEFGHIJKLMNOPQRSTUV
WXYZABCDEFGHIJKLMNOPQRSTUVWXYZABC
DEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL
MNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW
XYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJ
KLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY
ZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOP
QRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
JKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCD
EFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA
BCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ

Technische Daten

  • Sie können dies in Kleinbuchstaben anstatt in Großbuchstaben tun.
  • Das Nachziehen von Zeilenumbrüchen am Ende des Dreiecks ist zulässig.
  • Nachstehende Leerzeichen nach jeder Zeile sind zulässig.
  • Sie müssen auf STDOUT drucken, anstatt ein Array von Zeichenfolgen auszugeben.

Wertung

Das ist . Programm mit der niedrigsten Bytezahl gewinnt.


1
Was meinst du mit "wieder zuschlagen"? Gab es eine andere Herausforderung, die Sie so gemacht haben?
Haykam


1
Scheint ziemlich trivial, brauchen wir wirklich eine (andere) Alphabet-Herausforderung?
Rohan Jhunjhunwala

2
Es ist eine gute Herausforderung, aber ich denke, wir haben die Sättigung dieser Alphabet-Herausforderungen übertroffen, nichts Persönliches.
Rohan Jhunjhunwala

Eigentlich auf der Suche nach einer alphabetischen Herausforderung, bei der der Buchstabe an einer Position nicht durch einfache Ausdrücke aus den Koordinaten der modFunktion berechnet werden kann. Kann man sich machen, wenn ich Zeit habe.
Weijun Zhou

Antworten:


39

Vim, 29 Bytes

:h<_↵↵↵y$ZZ26P0qqa↵♥βjllq25@q

Dabei steht die Eingabetaste, die Escape-Taste und βdie Rücktaste.

enter image description here


3
Wie schlagen Sie mich immer auf die vim Antwort auf diese? Aargh +1 sowieso, ich kann nicht nicht vim upvote! :)
DJMcMayhem

7
Ich denke immer noch, dass Sie anstelle von verwenden sollten . Und statt β. Dafür wurden diese Unicode-Zeichen entwickelt. utf8icons.com/subsets/control-pictures
mbomb007

9

Python 2, 65 Bytes

i=1
a=bytearray(range(65,91))*26
while a:print a[:i];a=a[i:];i+=2

1
Ich habe den Header in Python 2 geändert, da der Code in Python 3 nicht funktionieren würde.
Leaky Nun

7

Gelee , 10 Bytes

26RḤ’RØAṁY

Probieren Sie es online!

Wie es funktioniert

26RḤ’RØAṁY  Main link. No Arguments.

26          Set the return value to 26.
  R         Range; yield [1, 2, ..., 25, 26].
   Ḥ        Unhalve; yield [2, 4, ..., 50, 52].
    ’       Decrement; yield [1, 3, ..., 49, 51].
     R      Range; yield [[1], [1, 2, 3], ..., [1, ..., 49], [1, ..., 51]].
      ØA    Yield the uppercase alphabet.
        ṁ   Mold the alphabet as the array of ranges. This repeats the uppercase
            letters over an over again, until all integers in the range arrays
            have been replaced with letters.
         Y  Join, separating by linefeeds.

Wurde "Double" damals "Unhalve" genannt? Ist auch super !! [Warten auf Glückwunsch für 100.000 Wiederholungen]
Erik the Outgolfer

Es ist nur eine Gedächtnisstütze. Hist halbiert und ist umgekehrt (nicht halbiert ).
Dennis

Ich denke nur an /2oder *2, also ist es "Halbieren" oder "Verdoppeln". Deshalb war ich verwirrt.
Erik der Outgolfer


Auch 10 Bytes:51Rm2RØAṁY
HyperNeutrino

7

VBA Excel (80 Byte, 1742 Byte)


Excel, 1742 Bytes

Inspiriert von der kreativen Antwort des UGOREN , fand ich eine Excel-Formel, um das Muster wie im OP zu erstellen.

=MID(REPT("ABCDEFGHIJKLMNOPQRSTUVWXYZ",26),(ROW()-1)^2+1,2*ROW()-1)

Fügen Sie diese Formel in Zelle A1 ein und ziehen Sie sie über den gesamten Bereich A1: A26.

Die Länge der Formel beträgt 67 Byte, Sie müssen sie jedoch 26 Mal replizieren, sodass sie 67 * 26 = 1742 Byte entspricht. Hier ist die Ausgabe:

enter image description here


Excel VBA, 80 Bytes

Jetzt ist es möglich, Excel in VBA zu integrieren, um den Prozess zu automatisieren und viele Bytes zu sparen, da VBA in die meisten Microsoft Office-Anwendungen, einschließlich Excel, integriert ist. Schreiben Sie den folgenden Code und führen Sie ihn im Direktfenster aus (verwenden Sie die Kombinationstasten CTRL+ G, um ihn im Visual Basic-Editor anzuzeigen):

[A1:A26]="=MID(REPT(""ABCDEFGHIJKLMNOPQRSTUVWXYZ"",26),(ROW()-1)^2+1,2*ROW()-1)"

Das Programm druckt die obige Excel-Formel in den Bereich A1: A26. Leider haben sowohl Excel als auch VBA kein eingebautes Alphabet.


Die Spaltennamen sehen für mich wie ein eingebautes Alphabet aus. Verwenden Sie die ersten 26 Spaltennamen.
mbomb007

1
@ mbomb007 Na und? Ich denke, es wäre schwieriger, sie anstelle von Zeichenfolgen zu verwenden.
Erik der Outgolfer

@EriktheGolfer Also? Mein Punkt war , dass es ist ein builtin Alphabet.
mbomb007

1
@ mbomb007 Sie sagten "Verwenden Sie die ersten 26 Spaltennamen", was ich als "Verwenden Sie die ersten 26 Spaltennamen anstelle dessen, was Sie derzeit verwenden" empfand. Deshalb habe ich geantwortet.
Erik der Outgolfer

@EriktheGolfer Es ist ein Vorschlag. Idk, wie viele Bytes es sein würde.
mbomb007

5

Haskell, 67 Bytes

_#53=[]
s#i=take i s:drop i s#(i+2)
mapM putStrLn$cycle['A'..'Z']#1

Eine einfache Rekursion über die Länge ider Linie. In jedem Schritt werden die nächsten iZeichen aus einer unendlichen Wiederholung des Alphabets entnommen.


4

Mathematica, 90 Bytes

StringRiffle[Flatten[Alphabet[]&~Array~26]~Internal`PartitionRagged~Range[1,51,2],"
",""]&

Anonyme Funktion. Nimmt keine Eingabe an und gibt eine Zeichenfolge als Ausgabe zurück. Golfvorschläge sind willkommen. Ein Beispiel dafür, was Internal`PartitionRaggedmacht:

In[1]:= Internal`PartitionRagged[{2, 3, 5, 7, 11, 13}, {2, 3, 1}]               

Out[1]= {{2, 3}, {5, 7, 11}, {13}}

Mathematica hat ein eingebautes Alphabet für Dreiecke?
Buffer Over Read

4

C 79 Bytes

main(i,j){for(i=0,j=1;i<676;i++){putchar(i%26+65);if(j*j==i+1){puts("");j++;}}}

Meine erste Antwort in C \ o /

Golfvorschläge sind mehr als willkommen.


62:i;main(j){while(i<676)printf("\n%c"+(j*j^i++||!j++),i%26+65);}
xsot

@xsot Danke, aber ich befürchte, dass führende Zeilen nicht erlaubt sind.
Undichte Nonne

1
Aber es gibt keinen führenden Newline?
Xsot

60:i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
xsot

@immibis Ich denke, ich sollte es dann posten.
Xsot

4

Brachylog , 37 Bytes

26~l<:1aLc~j[@A:I],L~@nw
=:2%1,.#@l?,

Probieren Sie es online!

Erläuterung

  • Hauptprädikat:

    26~l         Let there be a list of 26 elements
    <            This list is an ascending list of integers
    :1aL         Apply predicate 1 to that list ; the resulting list of strings is L
    c            Concatenate the list of strings into one big string
    ~j[@A:I],    That big string is the result of juxataposing the alphabet I times to itself
    L~@n         Create a string which when splitted on line breaks results in L
    w            Write that string to STDOUT
    
  • Prädikat 1: Wird verwendet, um variable Zeichenfolgen ungerader Länge zu generieren.

    =            Assign a value to the Input
    :2%1,        That value must be odd
    .#@l?,       Output is a string of length Input
    

Schließlich machst du eine ASCII-Kunst-Herausforderung
Leaky Nun

@LeakyNun Würde klassifizieren, dass als Zeichenfolgenmanipulation mehr als ASCII-Kunst imo
Fatalize

Soll ich das zum Tag hinzufügen?
Undichte Nonne

Netter Gebrauch von der Tatsache, dass die letzte Zeile die einzige Zeile ist, in der endet Z, weil sie 26quadratfrei ist.
Undichte Nonne


3

JavaScript (ES6), 77 82 88

EcmaScript 6 benötigt nur 1 Byte, um ein Template-String-Literal für Newline zu verwenden.

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)

Weniger golfen

for(i = r = l = o = '';
    l + 52;
    r++ || (r = l -= 2, o += `\n`))
  o += (i++ % 26 + 10).toString(36);
alert(o);

Prüfung

for(i=r=l=o='';l+52;r++||(r=l-=2,o+=`
`))o+=(i++%26+10).toString(36);alert(o)


\ o / eine ES6-Antwort, die ich in meinem Browser
ausführen

Ich habe deine .toString (36) Logik gestohlen ... jetzt musst du 80 Bytes schlagen !!
AppleJacks01

Ahh, ich gebe zu, ich kann mir keine Möglichkeit vorstellen, dies mit meiner Bibliothek zu übertreffen. Danke für die Herausforderung!
AppleJacks01

3

Perl, 42 41 39 Bytes

perl -E '@b=(A..Z)x26;say splice@b,0,$#a+=2for@b'

Nur der Code:

@b=(A..Z)x26;say splice@b,0,$#a+=2for@b

Eine offensichtlich kürzere Version löst leider ein internes Perl-Problem aus (Verwendung des freigegebenen Werts in der Iteration):

say splice@b,0,$#a+=2for@b=(A..Z)x26

2

JavaScript, 129 Bytes

z=1,i=0,g=a=>{b=0,c="";while(a+a-1>b){c+='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``[i>26?i=0:i++];b++}console.log(c)};while(z<26)g(z++)

1
Durch die Verwendung des Spread-Operators können Sie 3 Bytes einsparen : [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']statt 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``.
Insertusernamehere


2

Los, 133 Bytes

package main
import S "strings"
func main(){s:=S.Repeat("ABCDEFGHIJKLMNOPQRSTUVXXYZ",26)
for i:=1;s!="";i+=2{println(s[:i]);s=s[i:]}}

2

MATLAB, 112 109 95 79 77 Bytes

Dies funktioniert auch mit Octave . Sie können es hier online versuchen .

a=['' 65:90 65:90]';j=0;for i=1:2:52;b=circshift(a,j);j=j-i;disp(b(1:i)');end

Nach einigen großen Änderungen habe ich weitere 14 32 Bytes gespeichert . Dieser wird viel länger, als ich es von MATLAB erwartet hätte. Ich habe die alte Version unten gelassen, da sie wesentlich anders ist.

a=['' 65:90 65:90]';        %Create 2 copies of the upper case alphabet
j=0;                        %Initialise cumulative sum
for i=1:2:52;               %For each line length
    b=circshift(a,j);       %Rotate the alphabet string by the cumulative offset
    j=j-i;                  %Update cumulative negative sum of offsets.
    disp(
         b(1:i)'            %Extract first 'line length' characters from rotated alphabet.
               );           %Display next line (disp adds newline automatically)
end

Originalfassung:

a=['' repmat(65:90,1,26)];c=cumsum(1:2:51);disp(cell2mat(arrayfun(@(s,f)[a(s:f) 10],[1,c(1:25)+1],c,'Un',0)))

Wow, das war länger als ich dachte. Ich werde sehen, ob ich ein paar Bytes nicht wegwerfen kann.

Eine ungolfed Version, um zu erklären:

a=['' repmat(65:90,1,26)]; %Create 26 copies of the upper case alphabet
c=cumsum(1:2:51);          %Calculate the end index of each row in the above array, by cumulatively summing the length of each line
disp(
     cell2mat(
              arrayfun(@(s,f)
                             [a(s:f) 10], %Extract the part of the alphabet and insert a new line.
                                         [1,c(1:25)+1],c, %start index is the previous end of line plus 1. End index is as calculated by cumsum.
                       'Un',0 %The returned values are not all the same length
                       )   %Do this for each line
              )            %Convert back to a matrix now new lines inserted
     )                     %And display it

Danksagung

  • 3 Bytes gespeichert - danke @LuisMendo

2

XPath 3.0 (und XQuery 3.0), 84 Byte

codepoints-to-string((0 to 25)!(subsequence(((1 to 26)!(65 to 90)),.*.+1,2*.+1),10))

Erläuterung:

(1 to 26)!(65 to 90) ist das Alphabet 26 Mal

(0 to 25)!(subsequence(XX, start, len),10) dauert 26 Untersequenzen davon, jeweils gefolgt von Newline

subsequence(X, .*.+1, 2*.+1) Nimmt aufeinanderfolgende Teilfolgen mit Startposition und Länge auf: (1, 1), (2, 3), (5, 5), (10, 9) usw.

codepoints-to-string() verwandelt Unicode-Codepunkte in Zeichen


Bravo. Ich dachte, ich wüsste, was XQuery ist. Es stellte sich heraus, dass ich keine Ahnung hatte.
Jordanien

Ich bezweifle, dass viele der Posts hier viel über die Sprache aussagen, in der sie geschrieben sind.
Michael Kay


2

05AB1E (alternativ) 15 Byte

A2×52µ¼D¾£,¾¼FÀ

Probieren Sie es online!

Erläuterung:

A2×              # push a string containing a-za-z
   52µ           # Loop the rest of the program until counter = 52
      ¼          # increment counter (it's 0 initially)
       D         # Duplicate the alpha string on the stack
        ¾£       # Replace alpha with alpha[0..counter]
          ,      # Pop the substring and print it
           ¾¼FÀ  # rotate the alpha string left counter++ times.

2

R, 120 115 111 Bytes

v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum((b=seq(1,51,2))[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")

Ungolfed:

a=rep(LETTERS,26)
b=seq(1,51,2)
v=vector()

for(i in 1:26)
    {
    v=c(v,c(a[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))
    }

cat(v,sep="")

Grundsätzlich bist der Vektor der ungeraden Zahlen zwischen 1und und 51gibt damit die Länge jeder Zeile an. Offensichtlich summiert die sumFunktion die Zahlen dieses Vektors und gibt den Anfangs- und den Endindex an.

-5 Bytes dank @plannapus!
-4 Bytes dank @plannapus!


1
arf, sorry, das habe ich vorher nicht gesehen, aber da du es nur aeinmal verwendest, musst du es eigentlich nicht definieren, was bedeutet, dass du ein paar Bytes mehr rasieren kannst: b=seq(1,51,2);v=c();for(i in 1:26){v=c(v,c(rep(LETTERS,26)[(sum(b[1:i-1])+1):sum(b[1:i])],"\n"))};cat(v,sep="")funktioniert.
Plannapus

@plannapus Dumme mich! Danke noch einmal ! Ich habe das b=seqTeil auch in den Hauptteil integriert, damit es noch weniger lesbar ist!
Frédéric

2

R 81 73 65 63 Bytes

Ein einfacher forLoop-Ansatz. Wiederholen Sie das Alphabet 26 Mal und durchlaufen Sie einen gleitenden Indexbereich, der mit berechnet wird (i^2-2*i+2):i^2.

for(i in 1:26)cat(rep(LETTERS,26)[(i^2-2*i+2):i^2],"\n",sep="")

2

Schale , 10 Bytes

Cİ1ṠṁK…"AZ

Probieren Sie es online!

Erläuterung

Cİ1ṠṁK…"AZ
      …"AZ    Get the alphabet
   ṠṁK        Replace each letter with the whole alphabet
C             Cut the resulting string into lines with lengths
 İ1            equal to the list of odd numbers

1

Batch, 123 Bytes

@set s=
@for /l %%i in (1,2,51)do @call set s=%%s%%ABCDEFGHIJKLMNOPQRSTUVWXYZ&call echo %%s:~0,%%i%%&call set s=%%s:~%%i%%

1

05AB1E , 18 17 Bytes

26FA26×N>n£NnF¦},

Erläuterung

26F                 # for N in range(0, 26) do
   A26×             # the alphabet repeated 26 times
       N>n£         # take (N+1)^2 letters
           NnF¦}    # throw away the first N^2 letters
                ,   # print with newline

Probieren Sie es online!


1

Rexx, 74 72 Bytes

i=1;m=1;do 26;say substr(copies(xrange('A','Z'),26),i,m);i=i+m;m=m+2;end

Ungolfed:

i=1
m=1
do 26
  say substr(copies(xrange('A','Z'),26),i,m)
  i=i+m
  m=m+2
end

1

TSQL, 129 Bytes

USE MASTER in the beginning of the script is to ensure that the query is run in the master database which is default for many users(not counting bytes for that).

Golfed:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)FROM spt_values WHERE number<26and'P'=type

Ungolfed:

USE MASTER

SELECT SUBSTRING(REPLICATE('ABCDEFGHIJKLMNOPQRSTUVWXYZ',26),number*number+1,number*2+1)
FROM spt_values
WHERE number<26and'P'=type

Fiddle

Fiddle for older version using xml path


1

PowerShell, 68 bytes

$a=-join(65..90|%{[char]$_})*26;26..1|%{$a=$a.Insert($_*$_,"`n")};$a

The section before the first semicolon produces a string containing 26 copies of the uppercase alphabet. The next section injects linebreaks at the index of each square number (working backward so I don't have to account for the shifting). Finally, the $a at the end just shoves that string variable onto PowerShell's equivalent of STDOUT.



1

C, 60 bytes

i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}

puts only takes one argument. (Some undefined behaviour is permitted in codegolf normally but this is a bit too far outside the usual lanes)
M.M

@M.M Undefined behaviour is exploited all the time. The rule is that a submission is valid as long as it works in some compiler, otherwise we would have to explicitly rule out a long list of exceptions. This code works in gcc so it's a valid submission.
xsot

1

C++, 111 bytes

void a(){int c=65,i,j;for(i=0;i<26;i++){for(j=0;j<=2*i;j++){std::cout<<(char)c;c++;if(c==91)c=65;}std::cout<<'\n';}}

First try at one of these. Uses an int "c" to record which letter it needs to print at any given time. Once "c" passes 90 ('Z') it gets reset to 65 ('A'). Prints the pyramid using for loops.


Nice answer! You could do if(c<92)c=65 to take one byte off, and you might also be able to do int a() instead of void a(), but I'm not positive if that works without the return. Other than that, I think you need to include #include <iostream> in your byte count.
DJMcMayhem

I believe you meant if(c>90)c=65, but thanks for the suggestion, it's a good idea. Also, I guess I'll include it, thanks.
limelier

1

PHP, 76 69 bytes

for(;$i<26&&$a.=join(range(A,Z));)echo substr($a,$i**2,1+2*$i++)."
";
  • Create 26 alphabet (more than enough) and contactenate them in $a
  • loop for i < 26
  • display $a substring start i^2, end 2*i+1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.