Абетка трикутник


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 - це невелика кількість, то ваш код повинен бути малим за кількістю байтів." здається законним
Rohan 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
Я ніколи не перестаю дивуватися відповідям Віма.
DanTheMan

Хочете пояснити, як це працює для тих, хто не вільно володіє Vim?
Р. Кап

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

31

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

Хтось сказав трикутники?

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

Я використовував онлайн-перекладача Калормена, щоб розібрати це. Якщо у вас не вистачає нерухомості на екрані, вона збирається завершити, але ви також можете поспілкуватися з деякими номерами, щоб подбати про це. Я використовував повноекранний режим "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
З коробки. Чудово зроблено.
CousinCocaine

19

Хаскелл, 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
Мені було б цікаво дізнатись, як у світі це працює ...
Сократичний Фенікс

можливо, якщо скористатись дублікатором посилань u, можна зберегти один байт
Leaky Nun

3
@MathieuRodic Jelly використовує користувацьку кодову сторінку, що кодує всі 256 символів, які вона розуміє, як один байт кожен. Посилання байтів у заголовку вказує на нього.
Денніс

10

Пітон, 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, яка друкує та не бере аргументів. Ключова ідея - генерувати трикутний візерунок туди і назад з рекурсією. Спочатку розглянемо цю простішу функцію, яка друкує літери "A" до "Z" і вниз назад до "A":

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

Функція спочатку друкує "A" (char-код 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 Спасибі, виправили їх.
xnor

8

мозковий ебать, 1733 121 119 байт

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

Трохи більш читабельна версія:

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

Пояснення можливо.


Спробуйте використовувати цикл, а не будувати кожен символ вручну.
Leaky Nun

@LeakyNun Я поняття не маю, як це зробити. Будь-які пропозиції?
DanTheMan

4
Приємно, тому ти спав лише 4 години.
Leaky Nun

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: Дякую! Я знав, що там десь є команда префікса :) Хоча я рідко перевіряю розширені.
Емінья

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) у моєму попередньому методі завдяки чудовим підказкам з гольфу та хитрощів від сигалору ! )

( Збережено майже 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. Я нещодавно почав самостійно його вивчати, тож давайте подивимось, як це відбувається.

C це в дії! (Ідеон)


1
А-а-а, я просто хотів також додати відповідь С ... Що б там не було, я тобі просто допоможу;) По-перше, це гольф з кодом, вам не потрібно писати ідеальний код. Попередження компілятора є повністю чудовими. Ось чому ви можете видалити 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, вам потрібно оголосити її десь в іншому місці. А оскільки (принаймні в С) параметри функції можуть використовуватися як звичайні змінні, проблеми не повинно бути. Btw, який компілятор ви використовуєте?
сигалор

@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). Вих. [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+ байтів, тому ніколи цього не публікував. У вас, справді, краще рішення, ніж у мене. Ще раз :)
Ануй Трипаті

3

Javascript (використовуючи зовнішню бібліотеку - безліч), 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/Шілька

Пояснення коду: Створіть діапазон вводів, починаючи з 1, на число 51. Для кожного напишіть рядок відповідно до складного передбачення. Зробіть кілька майстрів JS із глобальними змінними та кешування ... та вуаля. Для кожного int в WriteLine ми створюємо лівий діапазон int і зберігаємо в глобальний "g", а String Joining (Write) з ""роздільником і відображаємо кожен int до відображення String на int char код. Потім ми стискаємо праву частину, роблячи перевернення цієї послідовності (і пропускаючи перший елемент, тому що це буде відповідати останньому елементу початкового порядку ...), пишемо з тією ж логікою. EDIT: оновлено внутрішні записи програми Write в бібліотеці. Порожня послідовність запише порожній рядок замість нуля. Це також поголив 15 байт від відповіді

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


1
Чи не потрібно включати байти, які потрібно імпортувати в бібліотеку?
MatthewRock

1
Idk, я написав понад 20 відповідей, використовуючи бібліотеку, і ти будеш першим, хто це сказав мені. Я не думаю, що когось насправді хвилює, оскільки мої відповіді ніколи не виграють
applejacks01

1
@ applejacks01 Досить впевнений, що якщо ви не імпортуєте його, вам потрібно сказати щось на кшталт "JS + Enumerable" вгорі. Схожі на "Bash + Coreutils"
mbomb007

2
Це звичайна інформація для підрахунку імпорту. Відповіді Python + SymPy все ще є import sympyабо from sympy import*вгорі. Відповіді Bash + x відрізняються тим, що вам потрібно встановити лише x , а не якось увімкнути його.
Денніс

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виробляє провідний молодик, означає, що мені потрібно буде генерувати перший рядок вручну, а потім присвоїти решта.

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

Діапазон був напіввключений Після виправлення помилок вона стала всеосяжною.

Використання

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)can be1@"26
Downgoat

String.letterscan be(65@"91)
Downgoat

String.letters.slice(0,i)може бути65@"(66+i)
Пуховик

Ага, я бачу , ти грати свого 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

Зателефонувати у вікно негайного натискання?

Просто для пояснення того, що відбувається: я двічі використовую функцію Abs, щоб відображати як проходження алфавіту, так і довжину рядка. Це добре підходить до завдання через єдине екстремальне значення в обох випадках, яке відповідає нульовому перетину змінної pre Abs.

Як простий набір команд у вікні негайного VBA, а не програма чи функція, для наступного потрібно 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 на "" - але кому потрібно більше одного з цих трикутників?)
Joffan

2
Ти навіть не потребуєш Т, якщо ?ти їдеш ;.
GuitarPicker

Мені вдалося поголити його до 71 за допомогою цього методу. Підказка: вам також не знадобиться vbCrLf.
GuitarPicker

1
так, я отримав те саме; зауважте, що повернення потрібно.
Йофан

3

Пітон, 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 - значення ассії наступної літери в алфавіті
    • 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в Predicate 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містить великі літери.

Безголівки:

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є більш коротким способом розкручування 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;
    }
}

Кодегольф

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

Кодегольф

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. Будь ласка, прочитайте "Як мені відповісти на код гольфу?" Якісь підказки? ” На інформаційній сторінці тегу коду-гольфу . Очікується, що відповіді на подібні виклики представлять зусилля щодо зменшення розміру коду. У цьому ви можете знайти допомогу в Підказки для гольфу на Java та Поради щодо гольфу на <всіх мовах> .
манатура

1
Там ви використовуєте 4 потрійні оператори, і всі умови містяться в дужках. Ви можете видалити їх, щоб зберегти 8 символів.
манатура

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

Переміщено
операції

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

Сесос , 27 байт

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

Спробуйте в Інтернеті! Поставте прапорець Налагодження, щоб побачити сформований код SBIN.

Збірка Sesos

Бінарний файл, описаний вище, був сформований шляхом складання наступного коду 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.