Le triangle alphabétique frappe à nouveau

24

Tâche

Votre tâche consiste à imprimer ce texte exact:

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

Spécifications

  • Vous pouvez le faire en minuscules au lieu de tout en majuscules.
  • Les sauts de ligne à la fin du triangle sont autorisés.
  • Les espaces de fin après chaque ligne sont autorisés.
  • Vous devez imprimer sur STDOUT au lieu de générer un tableau de chaînes.

Notation

C'est du . Programme avec le plus petit nombre de victoires d'octets.

Leaky Nun
la source
1
Que voulez-vous dire par "grèves à nouveau"? Y a-t-il eu un autre défi comme celui-ci?
haykam
1
Semble assez trivial avons-nous vraiment besoin d'un (autre) défi alphabétique?
Rohan Jhunjhunwala
2
C'est un bon défi, mais je pense que nous avons dépassé la saturation de ces défis alphabétiques, rien de personnel.
Rohan Jhunjhunwala
En fait, à la recherche d'un défi alphabétique que la lettre à une position ne peut pas être calculée par de simples expressions à partir de ses coordonnées impliquant la modfonction. Je peux en faire un moi-même si j'ai le temps.
Weijun Zhou

Réponses:

39

Vim, 29 octets

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

représente la touche Retour, la touche Échap et βla touche Retour arrière.

entrez la description de l'image ici

Lynn
la source
3
Comment me battez-vous toujours à la réponse vim à ce sujet? Aargh +1 de toute façon, je ne peux pas ne pas voter contre vim! :)
DJMcMayhem
7
Je pense toujours que vous devriez utiliser à la place de . Et au lieu de β. C'est pour cela que ces caractères Unicode ont été créés. utf8icons.com/subsets/control-pictures
mbomb007
9

Python 2, 65 octets

i=1
a=bytearray(range(65,91))*26
while a:print a[:i];a=a[i:];i+=2
xsot
la source
1
J'ai changé l'en-tête en Python 2 parce que le code ne fonctionnerait pas en Python 3.
Leaky Nun
7

Gelée , 10 octets

26RḤ’RØAṁY

Essayez-le en ligne!

Comment ça marche

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.
Dennis
la source
A l'époque, "Double" s'appelait "Unhalve"? Aussi, c'est super !! [en attente de félicitations pour 100k rep]
Erik the Outgolfer
C'est juste un mnémonique. Hest de moitié et est son inverse ( unhalve ).
Dennis
Je pense juste à /2ou *2, donc c'est "Halve" ou "Double". Voilà pourquoi j'étais confus.
Erik the Outgolfer
Aussi 10 octets:27Ḷ²IRØAṁY
Leaky Nun
Aussi 10 octets:51Rm2RØAṁY
HyperNeutrino
7

VBA Excel (80 octets, 1742 octets)


Excel, 1742 octets

Inspiré par la réponse créative de l'ugoren , j'ai réussi à trouver une formule Excel pour créer le motif comme indiqué dans l'OP.

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

Collez cette formule dans la cellule A1, puis faites-la glisser sur toute la plage A1: A26.

La longueur de la formule est de 67 octets mais vous devez la répliquer 26 fois, elle est donc égale à 67 * 26 = 1742 octets. Voici la sortie:

entrez la description de l'image ici


Excel VBA, 80 octets

Il est désormais possible d'intégrer Excel à VBA pour automatiser le processus et économiser de nombreux octets, car VBA est intégré à la plupart des applications Microsoft Office, y compris Excel. Écrivez et exécutez le code suivant dans la fenêtre Exécution (utilisez les touches de combinaison CTRL+ Gpour l'afficher dans Visual Basic Editor):

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

Le programme fonctionne en imprimant la formule Excel ci-dessus dans la plage A1: A26. Malheureusement, Excel et VBA n'ont pas d'alphabet intégré.

Anastasiya-Romanova 秀
la source
Pour moi, les noms des colonnes ressemblent à un alphabet intégré. Utilisez les 26 premiers noms de colonne.
mbomb007
1
@ mbomb007 Et alors? Je pense qu'il serait plus difficile de les utiliser au lieu de chaînes.
Erik the Outgolfer
@EriktheGolfer Alors? Mon point est qu'il est un alphabet de builtin.
mbomb007
1
@ mbomb007 Vous avez dit "Utilisez les 26 premiers noms de colonne", ce que j'ai perçu comme "Utilisez les 26 premiers noms de colonne au lieu de ce que vous utilisez actuellement", c'est pourquoi j'ai répondu.
Erik the Outgolfer le
@EriktheGolfer C'est une suggestion. Idk combien d'octets ce serait.
mbomb007
5

Haskell, 67 octets

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

Une récursivité simple sur la longueur ide la ligne. À chaque étape, les icaractères suivants sont extraits d'une répétition infinie de l'alphabet.

nimi
la source
4

Mathematica, 90 octets

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

Fonction anonyme. Ne prend aucune entrée et renvoie une chaîne en sortie. Suggestions de golf bienvenues. Un exemple de ce qui Internal`PartitionRaggedfait:

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

Out[1]= {{2, 3}, {5, 7, 11}, {13}}
LegionMammal978
la source
Mathematica a un intégré pour les triangles alphabet?
Mémoire tampon lue
4

C, 79 octets

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

Ma première réponse en C \ o /

Les suggestions de golf sont plus que bienvenues.

Leaky Nun
la source
62:i;main(j){while(i<676)printf("\n%c"+(j*j^i++||!j++),i%26+65);}
xsot
@xsot Merci mais je crains que les nouvelles lignes ne soient pas autorisées.
Leaky Nun
1
Mais il n'y a pas de nouvelle ligne leader?
xsot
60:i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
xsot
@immibis Je suppose que je devrais le poster alors.
xsot
4

Brachylog , 37 octets

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

Essayez-le en ligne!

Explication

  • Prédicat principal:

    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édicat 1: utilisé pour générer des chaînes variables de longueurs impaires.

    =            Assign a value to the Input
    :2%1,        That value must be odd
    .#@l?,       Output is a string of length Input
    
Fatalize
la source
Enfin, vous relevez un défi d'ascii-art
Leaky Nun
@LeakyNun classerait cela comme une manipulation de chaînes plus que l'art ASCII imo
Fatalize
Dois-je ajouter cela à la balise?
Leaky Nun
Belle utilisation du fait que la dernière ligne est la seule ligne qui se termine, Zcar 26est sans carré.
Leaky Nun
3

JavaScript (ES6), 77 82 88

EcmaScript 6 requis juste pour enregistrer 1 octet en utilisant un littéral de chaîne de modèle pour la nouvelle ligne.

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

Moins golfé

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

Tester

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

edc65
la source
\ o / une réponse ES6 que je peux exécuter dans mon navigateur
Downgoat
J'ai volé votre logique .toString (36) ... maintenant vous devez battre 80 octets !!
applejacks01
Ahh je concède, je ne vois pas de moyen de battre cela avec ma bibliothèque. Merci pour le défi!
applejacks01
3

Perl, 42 41 39 octets

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

Juste le code:

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

Une version plus courte évidente déclenche malheureusement un problème perl interne (utilisation de la valeur libérée dans l'itération):

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

JavaScript, 129 octets

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++)
Penne
la source
1
L'utilisation de l'opérateur d'étalement pourrait vous faire économiser 3 octets : [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']au lieu de 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``.
insertusernamehere
2

Aller, 133 octets

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

MATLAB, 112109 95 79 77 octets

Cela fonctionnera également avec Octave , vous pouvez essayer en ligne ici .

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

Donc, après quelques changements majeurs, j'ai enregistré 14 32 octets supplémentaires . Celui-ci devient beaucoup plus semblable à la longueur que j'attendais de MATLAB. J'ai laissé l'ancienne version ci-dessous car elle est sensiblement différente.

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

Version originale:

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 celui-là a fini par être plus long que je ne le pensais. Je vais voir si je ne peux pas en supprimer quelques octets.

Une version non golfée pour expliquer:

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

Remerciements

  • 3 octets enregistrés - merci @LuisMendo
Tom Carpenter
la source
2

XPath 3.0 (et XQuery 3.0), 84 octets

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

Explication:

(1 to 26)!(65 to 90) est l'alphabet 26 fois

(0 to 25)!(subsequence(XX, start, len),10) en prend 26 sous-séquences, chacune suivie d'une nouvelle ligne

subsequence(X, .*.+1, 2*.+1) prend des sous-séquences successives avec position de départ et longueur: (1, 1), (2, 3), (5, 5), (10, 9) etc.

codepoints-to-string() transforme les points de code Unicode en caractères

Michael Kay
la source
Bravo. Je pensais savoir ce qu'était XQuery. Il s'avère que je n'en avais aucune idée.
Jordan
Je doute que beaucoup de messages ici vous en disent long sur la langue dans laquelle ils sont écrits.
Michael Kay
2

05AB1E (alternatif) 15 octets

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

Essayez-le en ligne!

Explication:

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.
ruds
la source
2

R, 120 115 111 octets

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="")

Non golfé:

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="")

Fondamentalement, best le vecteur des nombres impairs entre 1et 51, donnant ainsi la longueur de chaque ligne. Évidemment, la sumfonction additionne les nombres de ce vecteur et donne les index de début et de fin.

-5 octets grâce à @plannapus!
-4 octets grâce à @plannapus!

Frédéric
la source
1
arf, désolé, je ne l'ai pas vu plus tôt, mais comme vous ne l'utilisez qu'une afois, vous n'avez pas vraiment besoin de le définir, ce qui signifie que vous pouvez raser quelques octets de plus: 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="")fonctionne.
plannapus
@plannapus Silly me! Merci encore ! J'ai également intégré la b=seqpièce dans le corps principal, donc c'est encore moins lisible!
Frédéric
2

R, 81 73 65 63 octets

Une forapproche en boucle simple . Répétez l'alphabet 26 fois et parcourez une plage d'index mobile calculée à l'aide de (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="")
Billywob
la source
2

Husk , 10 octets

Cİ1ṠṁK…"AZ

Essayez-le en ligne!

Explication

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
Leo
la source
1

Lot, 123 octets

@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%%
Neil
la source
1

05AB1E , 18 17 octets

26FA26×N>n£NnF¦},

Explication

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

Essayez-le en ligne!

Emigna
la source
1

Rexx, 74 72 octets

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

Non golfé:

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

TSQL, 129 octets

UTILISER MASTER au début du script est de s'assurer que la requête est exécutée dans la base de données master qui est par défaut pour de nombreux utilisateurs (sans compter les octets pour cela).

Golfé:

USE MASTER

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

Non golfé:

USE MASTER

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

Violon

Fiddle pour les anciennes versions utilisant le chemin xml

t-clausen.dk
la source
1

PowerShell, 68 octets

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

La section précédant le premier point-virgule produit une chaîne contenant 26 copies de l'alphabet majuscule. La section suivante injecte des sauts de ligne à l'index de chaque nombre carré (en travaillant en arrière donc je n'ai pas à tenir compte du décalage). Enfin, le $aà la fin pousse simplement cette variable de chaîne sur l'équivalent de PowerShell STDOUT.

Ben N
la source
1

C, 60 octets

i;main(j){for(;j<27;j*j^++i||puts("",j++))putchar(i%26+65);}
xsot
la source
putsne prend qu'un seul argument. (Certains comportements indéfinis sont autorisés dans codegolf normalement, mais c'est un peu trop loin des couloirs habituels)
MM
@MM Un comportement non défini est exploité en permanence. La règle est qu'une soumission est valide tant qu'elle fonctionne dans un compilateur, sinon nous aurions à exclure explicitement une longue liste d'exceptions. Ce code fonctionne dans gcc, c'est donc une soumission valide.
xsot
1

C ++, 111 octets

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';}}

Essayez d'abord l'un d'entre eux. Utilise un int "c" pour enregistrer la lettre à imprimer à tout moment. Une fois que "c" dépasse 90 ('Z'), il est réinitialisé à 65 ('A'). Imprime la pyramide à l'aide de boucles.

limelier
la source
Bonne réponse! Vous pouvez faire if(c<92)c=65pour supprimer un octet, et vous pourriez également le faire à la int a()place de void a(), mais je ne suis pas sûr si cela fonctionne sans le retour. Autre que cela, je pense que vous devez inclure #include <iostream>dans votre nombre d'octets.
DJMcMayhem
Je pense que vous vouliez dire if(c>90)c=65, mais merci pour la suggestion, c'est une bonne idée. Aussi, je suppose que je vais l'inclure, merci.
limelier
1

PHP, 76 69 octets

for(;$i<26&&$a.=join(range(A,Z));)echo substr($a,$i**2,1+2*$i++)."
";
  • Créez 26 alphabets (plus que suffisant) et contactez-les dans $ a
  • boucle pour i <26
  • afficher $ a sous-chaîne début i ^ 2, fin 2 * i + 1
Crypto
la source