Алфавітний трикутник знову вражає


24

Завдання

Ваше завдання - надрукувати саме цей текст:

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

Технічні характеристики

  • Ви можете робити це у великих літерах, а не у великих літерах.
  • У кінці трикутника дозволено прокладання нових рядків.
  • Доступні пробіли після кожного рядка.
  • Ви повинні надрукувати в STDOUT замість виведення масиву рядків.

Оцінка балів

Це . Програма з найнижчою кількістю перемог у байтах.


1
Що ви маєте на увазі під "повторними ударами"? Чи був такий виклик, який ви зробили так?
haykam


1
Здається, досить тривіально, чи нам справді потрібна (ще одна) абетка?
Rohan Jhunjhunwala

2
Це хороший виклик, але я думаю, що ми перевершили насиченість цих проблем з алфавітом, нічого особистого.
Рохан Джунджунвала

Насправді шукаємо виклик алфавіту, який букви в позиції неможливо обчислити простими виразами з його координат, що містять mod функцію. Можу зробити собі, якщо встигну.
Вейджун Чжоу

Відповіді:


39

Vim, 29 байт

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

Де відображається ключ повернення, ключ утечі таβ ключ Backspace.

enter image description here


3
Як ти завжди бив мене на відповідь vim на ці? Aargh +1 у будь-якому випадку, я не можу підтвердити vim! :)
DJMcMayhem

7
Я все ще думаю, що слід використовувати замість цього . І замість цього β. Саме для цього були зроблені ці символи Unicode. utf8icons.com/subsets/control-pictures
mbomb007

9

Python 2, 65 байт

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

1
Я змінив заголовок на Python 2, тому що код не працюватиме в Python 3.
Leaky Nun,

7

Желе , 10 байт

26RḤ’RØAṁY

Спробуйте в Інтернеті!

Як це працює

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.

Тоді "Double" називали "Unhalve"? Також чудово !! [чекаю, щоб сказати привітання за 100
кп.

Це просто мнеміка. Hє навпіл і є його зворотним ( нечесне ).
Денніс

Я просто думаю, /2чи *2, так що «Halve» або «Double». Тому я розгубився.
Ерік Аутгольфер

Також 10 байт:27Ḷ²IRØAṁY
Leaky Nun

Також 10 байт:51Rm2RØAṁY
HyperNeutrino

7

VBA Excel (80 байт, 1742 байт)


Excel, 1742 байт

Надихнувшись творчою відповіддю ugoren , мені вдалося знайти формулу Excel для створення шаблону, як показано в ОП.

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

Вставте цю формулу в комірку A1, потім перетягніть по всьому діапазону A1: A26.

Довжина формули - 67 байт, але її потрібно повторити 26 разів, тому вона дорівнює 67 * 26 = 1742 байти. Ось вихід:

enter image description here


Excel VBA, 80 байт

Тепер можливо інтегрувати Excel з VBA, щоб автоматизувати процес і заощадити багато байт, оскільки VBA вбудований у більшість програм Microsoft Office, включаючи Excel. Напишіть та запустіть наступний код у Негайне вікно (використовуйте комбіновані клавішіCTRL + Gдля відображення його у Visual Basic Editor):

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

Програма працює, надрукувавши формулу Excel вище до діапазону A1: A26. На жаль, і Excel, і VBA не мають вбудованого алфавіту.


Назви стовпців для мене схожі на вбудований алфавіт. Використовуйте перші 26 назв стовпців.
mbomb007

1
@ mbomb007 Так що? Я думаю, було б важче використовувати їх замість струн.
Ерік Аутгольфер

@EriktheGolfer Отже? Моя точка зору в тому , що там є це вбудована алфавіт.
mbomb007

1
@ mbomb007 Ви сказали "Використовуйте перші 26 імен стовпців", що я сприймав як "Використовуйте перші 26 імен стовпців замість того, що ви зараз використовуєте", тому я відповів.
Ерік Аутгольфер

@EriktheGolfer Це пропозиція. Idk скільки байтів було б.
mbomb007

5

Haskell, 67 байт

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

Проста рекурсія по довжині iлінії. На кожному кроці наступні iсимволи приймаються з нескінченного повторення алфавіту.


4

Математика, 90 байт

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

Анонімна функція. Не приймає введення і повертає рядок як вихід. Пропозиції з гольфу вітаються. Приклад того, що Internal`PartitionRaggedробить:

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

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

Математика має вбудований алфавітний трикутник?
Буфер над

4

C, 79 байт

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

Моя перша відповідь на C \ o /

Пропозиції з гольфу більш ніж вітаються.


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

@xsot Спасибі, але боюся, що провідні новинки не дозволяються.
Leaky Nun

1
Але немає ведучого нового рядка?
xsot

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

@immibis Я думаю, я повинен це розмістити тоді.
xsot

4

Брахілог , 37 байт

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

Спробуйте в Інтернеті!

Пояснення

  • Основний предикат:

    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
    
  • Присудок 1: використовується для створення змінних рядків непарної довжини.

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

Нарешті ви робите виклик мистецтву ascii
Leaky Nun

@LeakyNun Класифікував би це як маніпуляцію з струнами більше, ніж арт-
іммо

Чи слід додати це до тегу?
Leaky Nun

Приємно використовувати той факт, що останній рядок - це єдиний рядок, який закінчується Z, тому що він 26є квадратним.
Leaky Nun


3

JavaScript (ES6), 77 82 88

EcmaScript 6 потрібно просто зберегти 1 байт, використовуючи буквальний рядок шаблону для нового рядка.

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

Менше гольфу

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

Тест

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


\ o / відповідь ES6, яку я можу запустити у своєму браузері
Downgoat

Я вкрав вашу логіку .toString (36) ... тепер вам належить бити 80 байт !!
applejacks01

Ага, я визнаю, я не можу придумати жодного способу, щоб перемогти це своєю бібліотекою. Дякую за виклик!
applejacks01

3

Perl, 42 41 39 байт

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

Просто код:

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

Очевидно коротша версія, на жаль, запускає внутрішню проблему perl (Використання звільненого значення в ітерації):

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

2

JavaScript, 129 байт

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
Використання оператора спред може заощадити 3 байти : [...'ABCDEFGHIJKLMNOPQRSTUVWXYZ']замість 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split``.
insertusernamehere


2

Ідіть, 133 байт

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 байт

Це також буде працювати з Octave , ви можете спробувати онлайн тут .

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

Тож після деяких великих змін я зберег ще 14 32 байтів. Це стає набагато більше схожим на довжину, яку я б очікував від MATLAB. Я залишив стару версію нижче, оскільки вона істотно відрізняється.

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

Оригінальна версія:

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

Нічого собі, що один виявився довшим, ніж я думав, що це станеться. Я побачу, чи не можу я вибити кілька байт від нього.

Недозволена версія для пояснення:

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

Подяка

  • 3 байти збережено - дякую @LuisMendo

2

XPath 3.0 (і XQuery 3.0), 84 байти

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

Пояснення:

(1 to 26)!(65 to 90) є алфавітом 26 разів

(0 to 25)!(subsequence(XX, start, len),10) займає 26 послідовностей цього, за кожним слідує новий рядок

subsequence(X, .*.+1, 2*.+1) приймає послідовні послідовності із початковою позицією та довжиною: (1, 1), (2, 3), (5, 5), (10, 9) тощо.

codepoints-to-string() перетворює кодові точки Unicode в символи


Браво. Я думав, що знаю, що таке XQuery. Виявляється, я поняття не мав.
Йорданія

Сумніваюсь, що багато публікацій тут багато розповідають про мову, на якій вони написані.
Майкл Кей


2

05AB1E (поперемінно) 15 байт

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

Спробуйте в Інтернеті!

Пояснення:

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 байт

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

Безголовки:

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

В основному, bце вектор непарних чисел між 1і 51, таким чином, даючи довжину кожного рядка. Очевидно, що sumфункція підсумовує числа цього вектора і дає початкові та кінцеві індекси.

-5 байт завдяки @plannapus!
-4 байти завдяки @plannapus!


1
arf, вибачте, що я цього не бачив раніше, але оскільки ви використовуєте лише aодин раз, вам не потрібно його визначати, тобто ви можете поголити ще пару байтів: 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="")працює.
планнапус

@plannapus Дурний мене! Знову дякую ! Я також інтегрував b=seqчастину в основний корпус, так що це ще менше читається!
Фредерік

2

R, 81 73 65 63 байт

Простий forциклічний підхід. Повторіть алфавіт 26 разів і проведіть цикл через розсувний діапазон індексів, який обчислюється за допомогою (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="")


1

Пакетна, 123 байти

@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

Rexx, 74 72 байти

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

Безголівки:

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 байт

ВИКОРИСТОВУЙТЕ МАЙСТЕР на початку сценарію - це забезпечити виконання запиту в головній базі даних, яка за замовчуванням для багатьох користувачів (не враховуючи для цього байтів).

Гольф:

USE MASTER

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

Безголівки:

USE MASTER

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

Скрипка

Скрипка для старшої версії за допомогою xml шляху


1

PowerShell, 68 байт

$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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.