Алфавит треугольник


48

Вы должны напечатать этот точный текст:

A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A

Спекуляции

  • Дополнительные трейлинг-строки разрешены в конце вывода.
  • В конце каждой строки допускаются дополнительные завершающие пробелы (U + 0020), включая дополнительные завершающие новые строки.
  • Вы можете использовать все строчные буквы вместо прописных, но нельзя печатать частично строчные, частично заглавные.
  • Вы можете вернуть текст как вывод функции вместо печати в полной программе.

счет

Поскольку это треугольник, и у треугольника есть 3 стороны, а 3 - небольшое число, ваш код должен быть маленьким с точки зрения количества байтов.


22
Так много алфавитов в последнее время
downrep_nation

1
Моя синестезия становится дикой, @downrep_nation
DoctorHeckle

5
«Поскольку треугольник имеет 3 стороны, а 3 - небольшое число, значит, ваш код должен быть маленьким с точки зрения количества байтов». кажется законным
Рохан Jhunjhunwala

1
Квадраты чисел, состоящие только из 1, кажутся связанными: 1 * 1 = 1 ~ = A, 11 * 11 = 121 ~ = ABA, 111 * 111 = 12321 ~ = ABCBA ...
Caridorc

1
«Поскольку треугольник имеет 3 стороны и ...» Иллюминаты подтвердили.
HyperNeutrino

Ответы:


38

Vim, 37 байт

:h<_↵↵↵YZZPP$xqqxYpGP√2G$A♥-€k$q24@qJ

введите описание изображения здесь

легенда

↵ = Return
√ = Ctrl+V
♥ = Ctrl+R
€ = Escape

2
Это действительно крутой GIF.
AdmBorkBork

13
Я никогда не перестану удивляться ответам Vim.
DanTheMan

Не хочешь объяснить, как это работает для тех, кто не владеет Vim?
Р. Кап

6
@ R.Kap Я рекомендую вам скачать Vim и попробовать решение самостоятельно - вы можете наблюдать, как решение разворачивается за ударом! По сути, я краду алфавит из файла справки ( :h<_↵↵↵YZZP), затем записываю макрос ( qq…q), который многократно отсекает букву в верхней строке, делает две ее копии, чтобы увеличить треугольник по вертикали, а затем добавляет отрубленную букву ко всем строкам. вырастить это горизонтально. Я повторяю этот макрос еще 24 раза, чтобы нарисовать полный треугольник.
Линн

31

Логотип, 232 207 196 190 байт

Кто-то говорил треугольники?

Вытащите свой компас и транспортир, и давайте сделаем это графическим способом. Геометрия использует равносторонний треугольник для выравнивания результатов. Раньше у меня был равнобедренный треугольник, но он занимал слишком много десятичных знаков. Это изменение также уплотняло вывод, уменьшая количество экранной подготовки и смены шрифта, которые я должен был сделать.

Я использовал онлайн-переводчик Calormen, чтобы уточнить это. Если вам не хватает экранной недвижимости, она обернется, но вы также можете поиграть с некоторыми цифрами, чтобы позаботиться об этом. Я использовал полноэкранный режим «F11» в своем браузере.

ht
pu
to r:n:b:l repeat:n[rt:b label char 90-:n lt:b fd:l] end
to t:s
fd 12 rt 120 bk 6
repeat 2[r:s 90 12]
repeat 2[rt 120 r:s 90-heading 24]
end
rt 90 label "Z lt 210
repeat 25[t repcount]

rПроцедура рисует линию nсимволов. Символ определяется автоматически в зависимости от того, сколько сегментов ему сказано использовать. bПараметр рассказывает , сколько временно повернуть так, чтобы буквы указывают в правильном направлении. lПараметр определяет линейное расстояние между буквами.

В tШаги процедуры на следующую позицию и вызывает rфункцию в четыре раза , чтобы создать треугольник, вращающийся в случае необходимости. Я назвал его дважды для вертикальной стороны, потому что это заняло меньше байтов, чем один раз для специальной обработки. Конец процедуры устанавливает черепашку для начала следующего треугольника, на один шаг выше.

ZЭто особый случай, поэтому мы просто печатаем его напрямую и вращаем, как будто мы только что закончили треугольник. Наконец, tвызывается 25 раз.

Идет аннотированное изображениеГотовый результат


3
Из коробки. Красиво сделано.
Кузен Кокаин

19

Haskell, 58 байт

f x=init x++reverse x
t=unlines$f[f['A'..c]|c<-['A'..'Z']]

Определяет функцию, tкоторая возвращает вывод в виде строки.

f x=               define a helper function
init x             take the argument minus its last element
++                 and concatenate it with
reverse x          the argument reversed, producing ex. [a,b,c,b,a] from [a,b,c]

t=                                    define the main function
           [         |c<-['A'..'Z']]  for every char c from 'A' to 'Z'...
             ['A'..c]                 generate the range from 'A' to c
            f                         call the helper function to "reflect" it
          f                           call the helper function on the entire list
  unlines$                            join on newlines

12

Желе , 16 13 байт

Ṗ;Ṛ
ØAḣJÇ€Çj⁷

Спасибо @LeakyNun за игру в 3 байта!

Попробуйте онлайн!

Как это устроено

Ṗ;Ṛ        Helper link. Argument: A (array)

Ṗ          Pop; yield A without its last element.
  Ṛ        Reversed; yield A with inverted order.
 ;         Concatenate the results to both sides.


ØAḣJÇ€Çj⁷  Main link. No arguments.

ØA         Alphabet; set link argument and return value to "A...Z".
   J       Indices; yield [1, ..., 26].
  ḣ        Head; take the first, the first two, etc. elements of the alphabet.
           This yields ["A", AB", ..., "A...Z"].
    ǀ     Apply the helper link to each string.
      Ç    Apply the helper link to the array itself.
       j⁷  Join, separating by linefeeds.


@LeakyNun Спасибо.
Деннис

4
Мне было бы интересно узнать, как в мире это работает ...
Сократов Феникс

может быть, если использовать дубликатор ссылок, вы можете сохранить один байт
Leaky Nun

3
@MathieuRodic Jelly использует пользовательскую кодовую страницу, которая кодирует все 256 символов, которые он понимает как один байт каждый. В байтах ссылаются в точках заголовка к нему.
Денис

10

Python, 74 байта

def f(x=66,s='A'):
 t=s+s[-2::-1];print t
 if x<91:f(x+1,s+chr(x));print t

Функция Python 2, которая печатает и не принимает аргументов. Ключевой идеей является создание треугольного паттерна туда-сюда с рекурсией. Сначала рассмотрим эту более простую функцию, которая печатает буквы «А» до «Z» и вниз до «А»:

def f(x=65):
 t=chr(x);print t
 if x<90:f(x+1);print t 

Функция сначала печатает «A» (код символа 65), затем возвращается к «B» (66) и так далее до «Z» (90). Оттуда он перестает повторяться. По пути возврата обратно в рекурсивный стек он печатает любой символ, tнапечатанный на том же слое, от «Y» до «A».

Основной код делает то же самое, за исключением того, что он накапливается в sцепочку букв и печатает строку вверх и вниз s+s[-2::-1].

Спасибо xsot за 2 байта.

В Python 3 то же самое происходит на один байт короче (73 байта), помещая все в одну строку.

def f(x=66,s='A'):t=s+s[-2::-1];print(t);x>90or[f(x+1,s+chr(x)),print(t)]

Вы можете сохранить 2 байта , если смещение переменных, то есть f(x=66,s='A'). Это позволяет обновлять sвызов функции вместо тела функции.
xsot

Я думаю, что ваша версия Python 3, как и ее родственник Python 2, нуждается в значении 90 вместо 89, чтобы иметь самую длинную строку, которая идет вплоть до Z и обратно.
Tebbe

@Tebbe Спасибо, исправил их.
xnor

8

брейнфук, 1733 121 119 байт

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

Чуть более читаемая версия:

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

Объяснение возможно приехать.


Попробуйте использовать цикл вместо построения каждого символа вручную.
Утренняя монахиня

@ LeakyNun Я понятия не имею, как это сделать. Какие-либо предложения?
DanTheMan

4
Хорошо, так что вы спали только 4 часа.
Утренняя монахиня

1
Поздравляем с получением программы меньше, чем результат!
GuitarPicker

1
Как один гольф с 1612 байтов?
FantaC

8

05AB1E , 20 13 12 6 байтов

Сохранено 2 байта благодаря Аднану.
Сохранено 6 байт благодаря Magic Octopus Urn и некоторым новым языковым функциям.

Aη€ûû»

Попробуйте онлайн!

объяснение

Aη       # push prefixes of alphabet
  €û     # palendromize each prefix
    û    # palendromize the whole list
     »   # join on newlines

Очень хорошо! Вы можете изменить Œ26£на .p, что является префиксной командой. Кроме того , вы можете изменить , D,чтобы =, который печатает без выскакивают.
Аднан

Ух, умная выходка gF,!
Аднан

@Adnan: Спасибо! Я знал, что там где-то есть префиксная команда :) Хотя я редко проверяю расширенные.
Emigna

2
Эта раздвоенная команда Âочень хороша и очень удобна.
миль

1
@carusocomputing: к сожалению, ûэто новее, чем вызов, и этот ответ не будет конкурировать.
Эминья,

6

J, 26 23 22 байта

f(f=:,1}.|.)\u:65+i.26

объяснение

,1}.|.  Monad f: Input: A
    |.  Reverse the items in A
 1}.    Drop the first item in the reversed A
,       Join A and the previous

f(f=:,1}.|.)\u:65+i.26
                  i.26  Create the range [0, 1, ..., 25]
               65+      Add 65 to each
             u:         Convert to characters to get 'A..Z'
  f=:,1}.|.             Define a verb f
 (         )\           Call f monadically on each prefix of 'A..Z'
f                       Call f again on that result

f=:,1}.|.попробуйте это
Leaky Nun

@LeakyNun Спасибо, я не знаю, почему я думал, что они разные.
миль




5

C 272 247 234 230 144 137 байт:

( Сохранено много байтов ( 272 -> 230) в моем предыдущем методе благодаря отличным подсказкам и трюкам от sigalor ! )

( Сохранено почти 100 байт ( 230 -> 144) путем переключения на лучший метод. )

main(q,i,e,x){for(q=0;q<51;q++){i=q>25 ? 25-(q-25):q;for(e=65;e<66+i;e++)printf("%c",e);for(x=64+i;x>64;x--)printf("%c",x);printf("\n");}}

Мой первый ответ когда - либо в C. Я только недавно начал самообучаться, так что давайте посмотрим, как это происходит.

С этим в действии! (Ideone)


1
Аааа, я просто хотел также добавить ответ на C ... В любом случае, тогда я просто помогу вам;) Во-первых, это гольф-код, вам не нужно писать идеальный код. Предупреждения компилятора полностью в порядке. Вот почему вы можете удалить main()тип возвращаемого значения и даже #include <stdio.h>. GCC (а также такие сайты, как Ideone) согласны с этим. Затем вы можете «передать» определения переменных в список параметров функции. Пусть for(int i=65;...станет for(i=65...и изменение main()к main(i). Сделайте то же самое для любой другой переменной int (GCC по умолчанию пропускает типы int).
Сигалор

@sigalor Спасибо за советы! :) Только один вопрос: зачем мне переходить main()на main(i)?
Р. Кап

@sigalor На самом деле, теперь я получаю кучу ошибок компиляции.
Р. Кап

Когда вы не объявляете свою iпеременную в инициализации цикла for, вам нужно объявить ее где-нибудь еще. И поскольку (по крайней мере, в C) параметры функции можно использовать как обычные переменные, проблем не должно быть. Кстати, какой компилятор вы используете?
Сигалор

@sigalor В настоящее время Cв Ideone. Я получаю несколько <variable> undeclaredошибок.
Р. Кап


5

Mathematica 59 байт

Column@FromCharacterCode[#@#@26+64]&[#-Abs@Range[1-#,#-1]&]

Я думаю, что удаление //Columnс конца и префикс вашего кода сработает Column@.
Yytsi

2
Вы, кажется, сосчитали и как отдельные байты. Я сомневаюсь, что есть однобайтовая кодовая страница, которая имеет их и также поддерживается Mathematica из коробки. Они были бы на три байта в UTF-8, поэтому они не сохраняют ничего поверх обычного [[...]]. Я также не уверен, насколько это законно Column, поскольку он отображает только список строк в блокноте Mathematica. Запуск этого кода из файла скрипта ничего не отобразит. Тем не менее, Print/@такое же количество байтов и работает в любом случае.
Мартин Эндер

Если вы хотите сделать ссылку на страницу с длинным адресом, вы можете сделать следующее: [what you see](actual link). Ex. [Example Link](https://www.example.com), который показывает в качестве примера ссылку
Стэн Струм


4

R, 63 61 59 байт

for(i in c(1:26,25:1))cat(LETTERS[c(1:i,i:1-1)],"
",sep="")

Полезно LETTTERS[0]не возвращает никаких символов.

Редактировать: потерял один благодаря @leakynun

Изменить: еще два благодаря @plannapus


1
Вы можете использовать буквальный перевод строки вместо\n
Leaky Nun

3

TSQL, 159 байт

DECLARE @ varchar(52)='ABCDEFGHIJKLMNOPQRSTUVWXY',@o varchar(max)SELECT @+='Z'+REVERSE(@)+'
',@o=@
WHILE''<@
SELECT @=STUFF(@,LEN(@)/2,2,''),@o=@+@o+@
PRINT @o

скрипка


1
Я пытался сделать это, но в итоге получилось 250+ байтов, поэтому я так и не опубликовал это. У вас действительно есть лучшее решение, чем у меня. Еще раз :)
Anuj Tripathi

3

Javascript (с использованием внешней библиотеки-Enumerable), 135 байт

_.Range(1,51).WriteLine(x=>(g=_.Range(65,x>25?52-x:x)).Write("",y=>(w=String.fromCharCode)(y))+(g.Reverse().Skip(1).Write("",y=>w(y))))

Ссылка на библиотеку: https://github.com/mvegh1/Enumerable

Объяснение кода: Создайте диапазон целых чисел, начиная с 1, для количества 51. Для каждого напишите строку в соответствии со сложным пред. Сделайте некоторое волшебство JS с глобальными переменными и кэшированием ... и вуаля. Для каждого int в WriteLine мы создаем левый диапазон целых чисел и сохраняем его в глобальном «g», а также String Joining (Write) с ""разделителем и отображаем каждое int в String, сопоставляя код int. Затем мы объединяем правую часть, беря обращение этой последовательности (и пропуская первый элемент, потому что он будет соответствовать последнему элементу исходного порядка ...), записывая с той же логикой. РЕДАКТИРОВАТЬ: Обновлены внутренние записи в библиотеке. Пустая последовательность теперь напишет пустую строку вместо нуля. Это также побрило 15 байтов от ответа

введите описание изображения здесь


1
Разве вам не нужно включать байты, необходимые для импорта библиотеки?
MatthewRock

1
ИДК, я опубликовал более 20 ответов, используя библиотеку, и ты первый сказал бы мне это. Я не думаю, что кому-то все равно, потому что мои ответы никогда не выиграют
applejacks01

1
@ applejacks01 Уверен, если вы не импортируете его, то вы должны сказать что-то вроде «JS + Enumerable» вверху. Аналогично "Bash + Coreutils"
mbomb007

2
Это обычное дело считать импорт. Python + SymPy ответы все еще есть import sympyили from sympy import*в верхней части. В + х Баш ответы различны , потому что вы должны установить только х , не позволит ему каким - то образом.
Деннис

1
@PatrickRoberts До тех пор, пока библиотека существовала до публикации заявки, да. Python отвечает использование сделать из sympy, numpy, scipyи т.д. , все время.
Денис

3

Powershell, 61 52 байта

Спасибо TimmyD за сохранение 9 байтов!

65..90+89..65|%{-join[char[]]((65..$_-ne$_)+$_..65)}

Прокручивает значения ASCII для заглавных букв вперед, затем назад. Для каждого числа создается массив первых чисел X, удаляется номер X-1, затем добавляется обратная сторона первых чисел X, которые затем преобразуются в символы и объединяются в строку.


Эй, это хорошо, спасибо! Я подключился 65..90..65по прихоти ранее безуспешно. Думаю, я забыл, что могу просто сложить диапазоны.
Бен Оуэн

3

Чеддер , 102 96 79 69 67 байт

17 байтов благодаря Downgoat и вдохновение для еще 10.

"A"+(2@"27+@"(25|>1)).bytes.map(i->65@"(64+i)+@"((64+i)|>65)).vfuse

Тот факт, что строки могут объединять, но не массивы, означает, что мне придется преобразовать два диапазона в строки, объединить, а затем преобразовать обратно в массивы.

Кроме того, тот факт, что vfuseсоздаются ведущие newliens, означает, что мне нужно будет сгенерировать первую строку вручную, а затем сопоставить с остальными.

@" как диада (функция с двумя аргументами) может преобразовывать в строку напрямую, но не работает для обратного диапазона (если первый аргумент больше, чем второй).

Диапазон был наполовину включен. После исправления ошибки это стало включительно.

использование

cheddar> "A"+(2@"27+@"(25|>1)).bytes.map(i->(65@"(64+i)+@"((64+i)|>65))).vfuse
"A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNONMLKJIHGFEDCBA
ABCDEFGHIJKLMNMLKJIHGFEDCBA
ABCDEFGHIJKLMLKJIHGFEDCBA
ABCDEFGHIJKLKJIHGFEDCBA
ABCDEFGHIJKJIHGFEDCBA
ABCDEFGHIJIHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A"

Чеддер, 55 байтов (неконкурентный)

В последней версии со всеми исправлениями ответ таков:

(|>25+24|>0).map(i->65@"(65+i)+(i?(64+i)@"65:"")).vfuse

но это было сделано после вызова.


@"(1|>26)может быть1@"26
Downgoat

String.lettersможет быть(65@"91)
Downgoat

String.letters.slice(0,i)может быть65@"(66+i)
Downgoat

Ага, я вижу , ты решетку своего ByteCount.
Steenbergh


3

VBA, 94 байта

Function T:For j=-25To 25:k=25-Abs(j):For i=-k To k:T=T &Chr(65+k-Abs(i)):Next:T=T &vbLf:Next

Позвонить в ближайшее окно с? T

Просто чтобы объяснить, что происходит: я использую функцию Abs дважды, чтобы отразить как перемещение по алфавиту, так и длину строки. Он хорошо подходит для этой задачи из-за единственного экстремального значения в обоих случаях, которое соответствует пересечению нуля переменной pre-Abs.

В качестве простого набора команд в окне VBA Immediate, а не программы или функции, для следующего потребуется 72 байта:

For j=-25To 25:k=25-Abs(j):For i=-k To k:?Chr(65+k-Abs(i));:Next:?:Next

(с благодарностью @GuitarPicker)


1
Я использовал похожую логику в одном из своих представлений о флаге Исландии. Не могли бы вы продвинуться дальше, запустив его полностью в непосредственном окне и пропустив объявление функции, или это нарушает какое-то правило, с которым я не знаком?
GuitarPicker

@GuitarPicker; не уверен, что выполнение в непосредственном окне считается полной программой, но если это так, то на 8 байтов меньше, эффективно; вместо того, чтобы начинать с Function T:, заканчивайте с :?T(хотя это сработает только один раз, потому что после этого вам нужно будет сбросить T на «» - но кому нужно более одного из этих треугольников?)
Джоффан

2
Тебе даже не нужен Т, если ?ты идешь с ним ;.
GuitarPicker

Я смог побрить его до 71 с помощью этого метода. Подсказка: вам также не понадобится vbCrLf.
GuitarPicker

1
да, я получил то же самое; обратите внимание, что возврат не требуется.
Джоффан

3

Python, 73 71 байт

Спасибо @xnor за рекурсию

f=lambda x=66,s='A',t='':x/92*t or t+f(x+1,s+chr(x),s+s[-2::-1]+"\n")+t

объяснение

  • Параметры :
    • x является значением ASCII следующей буквы в алфавите
    • s это аккумулятор для алфавита
    • tэто линия в треугольнике (то есть s+ s backwards)
  • Возвращение :t если алфавит сделан (то есть мы в центре)
  • Остальное : t+f(...)+tс:
    • x порядковым
    • s сопровождается следующим письмом
    • tсброс на s+ s backwards+\n

Обновить

  • -2 [16-08-05] Удалите начальные \n(+1) и сокращенные условные (-3) все благодаря @xnor

1
Какой умный метод, продвигающийся tк следующему циклу. Хотя есть дополнительный ведущий символ новой строки; x=66,s='A''избавляется от этого. Базовый случай может быть сокращен до x/92*t or .
xnor

3

HTML + CSS, 884 символа

(763 символа HTML + 121 символ CSS)

Просто расширение Дырявый Nun «s комментарий о MonkeyZeus » s ответ . (Хотя я могу неправильно прочитать комментарий ...)

p{margin:0}p:before{content:"ABCDEFGH"}p:after{content:"HGFEDCBA"}a:before{content:"IJKLMNOP"}a:after{content:"PONMLKJI"}
<pre>A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
<p>I</p><p>IJI</p><p>IJKJI</p><p>IJKLKJI</p><p>IJKLMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNOPONMLKJI</p><p><a>Q</p><p><a>QRQ</p><p><a>QRSRQ</p><p><a>QRSTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXYZYXWVUTSRQ</p><p><a>QRSTUVWXYXWVUTSRQ</p><p><a>QRSTUVWXWVUTSRQ</p><p><a>QRSTUVWVUTSRQ</p><p><a>QRSTUVUTSRQ</p><p><a>QRSTUTSRQ</p><p><a>QRSTSRQ</p><p><a>QRSRQ</p><p><a>QRQ</p><p><a>Q</a></p><p>IJKLMNOPONMLKJI</p><p>IJKLMNONMLKJI</p><p>IJKLMNMLKJI</p><p>IJKLMLKJI</p><p>IJKLKJI</p><p>IJKJI</p><p>IJI</p><p>I</p>ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A


3

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

Кредиты Fatalize для его помощи во всем.

4 байта благодаря Fatalize и вдохновение для еще 4 байтов.

@A:1&e:"a"yr:1&cw@Nw\
:Lc.r.!

Попробуйте онлайн!

Предикат 0 (Основной предикат)

@A:1&e:"a"yr:1&cw@Nw\
@A:1&                  Apply predicate 1 to @A, which is
                       basically "abcdefghijklmnopqrstuvwxyz"
     e                 Choose one element from the result (choice point)
      :"a"yr               generate substring from element to "a"
            :1&            apply predicate 1
               c           concatenate
                w          write to STDOUT
                 @Nw       write "\n" to STDOUT
                    \  Backtrack to last choice point to choose
                       another element until there is no more
                       choice left, then halt.

Предикат 1 (Вспомогательный предикат)

Это в основном строит палиндром из заданной строки.

:Lc.r.!
:Lc.     output is [input:L]
   .r.   output reversed is still output
      !  stop searching after the first output

Вы можете заменить ,Aв Предикате 1 h, сохранив один байт.
Роковая

Вы можете также сохранить два байта, заменив :1:2yt.с :2&.и добавляя !(точки выбора разреза) в конце предиката 2.
Fatalize


3

R 127 125 байт

k=cat;L=LETTERS;for(i in 1:26)k(c(L[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))

Не полностью удовлетворен этим решением, особенно двумя forпетлями, но не мог прийти с чем-то лучшим!
LETTERSсодержит заглавные буквы

Ungolfed:

for(i in 1:26){
  cat(c(LETTERS[1:i],LETTERS[(i-1):0],"\n"))
               }

for(i in 1:26){
  cat(c(LETTERS[0:(26-i)],LETTERS[ifelse((25-i)>=0,25-i,0):0],"\n"))
               }

ifelseэто более короткий путь для unsing if... else...и работает следующим образом:ifelse(condition,action if TRUE, action if FALSE)

Другое решение 125 байтов:

for(i in 1:26)(k=cat)(c((L=LETTERS)[1:i],L[(i-1):0],"\n"));for(i in 1:26)k(c(L[0:(26-i)],L[ifelse((25-i)>=0,25-i,0):0],"\n"))


3

Java 131 байт

Без использования строки (131 байт)

public static void main(String[] args) {
    for(int i = 0 ,k=1; i>-1; i+=k){
        for(int c= 65, d = 1; c>64;){
            d = d>-1 & c < 65+i?1:-1;
            System.out.print((char)c+((c+=d)<65?"\n":""));
        }
        k = k>-1 & i < 25?1:-1;
    }
}

Codegolfed

for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));

Со строкой (173 байта)

String a="abcdefghijklmnopqrstuvwxyz";
for(int i = 1 ,k=1; i>0; i+=k==1?1:-1){
    System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i));
    k = k>-1 & i < 26?1:-1;
}

Codegolfed

String a="abcdefghijklmnopqrstuvwxyz";for(int i=1,k=1;i>0;k=k>-1&i<26?1:-1,System.out.println(a.substring(0,i)+new StringBuilder(a).reverse().substring(27-i)),i+=k==1?1:-1);

Благодаря манатворку и Кевину Круйссену


2
Добро пожаловать в PPCG. Пожалуйста, прочитайте «Как я должен ответить на код гольф? Есть подсказки? » На информационной странице тега code-golf . Ожидается, что ответы на такого рода задачи представят усилия по уменьшению размера кода. В этом вы можете найти советы по игре в гольф на Java и советы по игре в гольф на <все языки> .
manatwork

1
Там вы используете 4 троичных оператора и все условия заключены в круглые скобки. Вы можете удалить их, чтобы сохранить 8 символов.
Манатворк

1
d и k не могут опуститься ниже -1, верно? Затем вы можете заменить d!=-1с d>-1, то же самое для к. (Кстати, вы забыли починить версию для гольфа.)
manatwork

Операторы
перенесены

1
Привет, я знаю, что это было довольно давно, но вы i+=k==1?1:-1можете играть в гольф двумя вещами: может быть i+=kи System.out.print((char)c+(c+d<65?"\n":"")),c+=d==1?1:-1);может быть System.out.print((char)c+((c+=d)<65?"\n":"")));. Таким образом, всего получается ( 131 байт ):for(int i=0,k=1;i>-1;k=k>-1&i<25?1:-1,i+=k)for(int c=65,d=1;c>64;d=d>-1&c<65+i?1:-1,System.out.print((char)c+((c+=d)<65?"\n":"")));
Кевин Круйссен


2

Sesos , 27 байт

0000000: a85ab9 ac5daa f8b1c7 785f9b b961f7 665c1b 73ccfc  .Z..]....x_..a.f\.s..
0000015: c01ecb 987303                                     ....s.

Попробуйте онлайн! Проверьте Debug, чтобы увидеть сгенерированный код SBIN.

Сесос сборка

Двоичный файл выше был сгенерирован путем сборки следующего кода SASM.

add 65, rwd 1, add 10, rwd 2, add 25
jmp
    fwd 3
    jmp
        put, fwd 1
    jnz
    rwd 1
    jmp
        fwd 1, add 1, fwd 1, add 1, rwd 2, sub 1
    jnz
    fwd 2
    jmp
        rwd 2, add 1, fwd 2, sub 1
    jnz
    rwd 1, add 1, rwd 2
    jmp
        put, rwd 1
    jnz
    rwd 1, sub 1
jnz
fwd 3
jmp
    jmp
        put, fwd 1
    jnz
    rwd 1, get, rwd 1
    jmp
        put, rwd 1
    jnz
    fwd 2
; jnz (implicit)

2

/// , 208 байт

/'/\/\///+/BA
AB'-/DC+CD'&/FE-EF')/HG&GH'=/JI)IJ'|/LK=KL'7/NM|MN'1/PO7OP'q/RQ1QR'p/TSqST'6/VUpUV'[/XW6WX/A
A+C+C-E-E&G&G)I)I=K=K|M|M7O7O1Q1QqSqSpUpU6W6W[Y[YZY[Y[W6W6UpUpSqSqQ1Q1O7O7M|M|K=K=I)I)G&G&E-E-C+C+A
A

Конечно, не победа, но вот она, предшествующая Мартину Эндеру ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.