Распечатать волну алфавита


37

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

ABABABABABABABABABABABABAB
BCBCBCBCBCBCBCBCBCBCBCBCBC
CDCDCDCDCDCDCDCDCDCDCDCDCD
DEDEDEDEDEDEDEDEDEDEDEDEDE
EFEFEFEFEFEFEFEFEFEFEFEFEF
FGFGFGFGFGFGFGFGFGFGFGFGFG
GHGHGHGHGHGHGHGHGHGHGHGHGH
HIHIHIHIHIHIHIHIHIHIHIHIHI
IJIJIJIJIJIJIJIJIJIJIJIJIJ
JKJKJKJKJKJKJKJKJKJKJKJKJK
KLKLKLKLKLKLKLKLKLKLKLKLKL
LMLMLMLMLMLMLMLMLMLMLMLMLM
MNMNMNMNMNMNMNMNMNMNMNMNMN
NONONONONONONONONONONONONO
OPOPOPOPOPOPOPOPOPOPOPOPOP
PQPQPQPQPQPQPQPQPQPQPQPQPQ
QRQRQRQRQRQRQRQRQRQRQRQRQR
RSRSRSRSRSRSRSRSRSRSRSRSRS
STSTSTSTSTSTSTSTSTSTSTSTST
TUTUTUTUTUTUTUTUTUTUTUTUTU
UVUVUVUVUVUVUVUVUVUVUVUVUV
VWVWVWVWVWVWVWVWVWVWVWVWVW
WXWXWXWXWXWXWXWXWXWXWXWXWX
XYXYXYXYXYXYXYXYXYXYXYXYXY
YZYZYZYZYZYZYZYZYZYZYZYZYZ
ZAZAZAZAZAZAZAZAZAZAZAZAZA

Спекуляции

  • Вы можете напечатать все строчные вместо всех прописных. Тем не менее, дело должно быть согласованным на протяжении всего вывода.
  • Вы можете распечатать один дополнительный завершающий перевод строки.

счет

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


39
Серьезно, еще одна проблема с алфавитом?
Натан Меррилл

6
@NathanMerrill Сколько бы они ни были, я не думаю, что они достойны отрицательных голосов. (Я не подразумеваю, что вы проголосовали, я просто говорю.)
Конор О'Брайен,

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

9
@Dennis, независимо от используемых символов, это их типовые «вызовы», которые становятся чрезмерными, IMO. Не думаю, что это оффтоп, но мне бы хотелось подышать свежим воздухом.
Натан Меррилл

13
Ясно, что спрос на алфавит больше не требуется - только 39 человек ответили в первые 15 часов ...
trichoplax

Ответы:


37

C, 60 байтов

main(i){for(;i<703;)putchar(i++%27?65+(i/27+i%27%2)%26:10);}

10
Это гений.
Утренняя монахиня

Приятно видеть C в соревновании по гольфу.
Майкл Джонсон

@MichealJohnson " см. C ", IC, что вы там сделали. ;) И я согласен с Leaky Nun . Иногда мне интересно, как люди придумывают некоторые из этих гениальных ответов.
Кевин Круйссен

@KevinCruijssen Это было непреднамеренно, лол.
Майкл Джонсон


14

Выпуклый, 10 байт

U_(+]D*zN*

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

U               Predefined Variable: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 _(+            Push a copy with the 'A at the end.
    ]           Add both strings to an array.
     D*         Repeat array 13 times. D defaults to 13.
       z        Transpose.
        N*      Join by newlines. N defaults to "\n"


8

Vim, 85 83 байта

:h<_<cr><cr><cr>YZZP:s/./\0\r/g<cr><c+v>ggy25Pqqlxj:let @a='xkPjj'<cr>25@akia<esc>25klq11@qh<ctrl+v>25jylpl<c+v>25jdGdd

Я знаю, что это может быть больше в гольфе, но моя голова болит, поэтому я должен остановиться на данный момент.

<cr>это клавиша ввода, <c+v>это ctrl + v и <esc>клавиша escape. Все они были посчитаны как один байт.

Я записал GIF этого, но он облажался. Видео хорошо, хотя: http://recordit.co/ldLKvho9Gi


8

Руби, 42 39 38 37 байт

-3 байта благодаря @ user81655
-1 байт благодаря @manatwork
-1 байту благодаря @NotthatCharles

?A.upto(?Z){|a|puts (a+a.next[0])*13}

Смотрите его на repl.it: https://repl.it/CmOJ


7

Чеддер, 48 байтов

print(65|>90).map(l->@"[l,l>89?65:l+1]*13).vfuse

Чеддер хорош со строками: D

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

объяснение

print
  (65|>90)            // Range from 65 (A) to 90 (Z)
  .map(l->            // Map through range
    @"                // Convert following array of char codes to string
      [l,             // The character 
       l>89?65:l+1]   // See below for explanation
      *13             // Repeat 13 times
  ).vfuse             // Vertically fuse

Что делает l>89?65:l+1? Ну, 89это код для Y. По сути, l>89это проверка, если письмо Z, это означает, что мы должны вернуться A. Если l>89ложно. Я вернусь l+1, следующий символ


Я думал, что вы можете вставить @"между ними.
Утренняя монахиня

Разве это не использует функцию возврата?
Конор О'Брайен

@ ConorO'Brien, да?
Downgoat


@ ConorO'Brien о, не видел в спецификации вызова. будет исправлено
Downgoat

7

Желе , 10 байт

26ḶḂØAṙZj⁷

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

Как это работает

26ḶḂØAṙZj⁷  Main link. No arguments.

26Ḷ         Yield [0, ..., 25].
   Ḃ        Bit; compute the parity of each intger.
    ØAṙ     Rotate the alphabet by these amounts.
       Z    Zip; transpose rows and columns.
        j⁷  Join, separating by linefeeds.

Не Yсуществовало тогда? Также поздравляю за 100 тыс. Представителей!
Эрик Outgolfer

Благодарность! Я проверил и, к сожалению, Yбыл добавлен через два дня после объявления о проблеме.
Деннис

Потому что вы могли бы сыграть в гольф еще ниже 26ḶḂØAṙZY. Но, как сейчас, все равно хорошо.
Эрик Outgolfer

7

Haskell, 60 58 байт

mapM putStrLn[[0..12]>>[a,b]|a:b:_<-scanr(:)"A"['A'..'Z']]

Начиная с «А» scanr(:)строит список из символов ['A'..'Z']справа. (-> ["ABCDE...A", "BCDEF..A", ..., "XYZA", "YZA", "ZA", "A"]). (a:b:_)соответствует первым двум символам каждого подсписка (по крайней мере, с двумя символами) и составляет 13 его копий.


Рассматривая некоторые из читов, используемых другими языками на регулярной основе, я считаю справедливым не включать фактическую печать. В этом случае вы можете заменить его на "(++" \ n ") = <<" и сохранить 2 байта. Возможно больше.
Марлинн

@MarLinn: нет, я так не думаю. Языки игры в гольф разработаны с учетом неявной печати, и большинство других ответов имеют какую-то команду печати. Кстати, unlinesдаже короче, чем (++"\n")=<<.
Ними

7

PowerShell, 49 43 байта

Ремикс TimmyD:

65..89|%{-join[char[]]($_,++$_)*13};"ZA"*13

было, 49 байт:

0..25|%{(""+[char]($_+++65)+[char]($_%26+65))*13}

Пример вывода


6

Python 2, 70 68 54 байта

Решение на основе списка:

L=map(chr,range(65,91))
for i in range(-26,0):print(L[i]+L[i+1])*13

Но зачем создавать список? Спасибо LeakyNun:

for i in range(26):print(chr(i+65)+chr(-~i%26+65))*13

6

R 72 67 60 56 байт

write(matrix(LETTERS[c(1:26,2:26,1)],26,26,T),"",26,,"")

Спасибо @Giuseppe за дополнительные 4 байта!

Старое repрешение на 60 байтов:

for(i in 1:26)cat(rep(LETTERS[c(i,i%%26+1)],13),"\n",sep="")

Смотрите здесь на онлайн переводчик. Спасибо @ user5957401 за дополнительные 7 байтов!

Старое матричное решение на 72 байта:

for(i in 1:26)cat(matrix(LETTERS[c(1:26,2:26,1)],26,26)[i,],"\n",sep="")

Смотрите здесь на онлайн переводчик.


1
если вы измените значение Indext на, i in 1:26а затем выбор буквы для LETTERS[c(i,i%%26+1)]вас может уменьшиться на 6 или 7 байтов
user5957401

1
@ user5957401 arf Я так упрямо делал, (i+1)%%26что мне не пришло в голову сделать обратное! Благодарность!
plannapus

1
56 байтов снова с использованием матриц :)
Джузеппе

5

MATL , 13 байт

1Y2tn:!to~!+)

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

1Y2    % Predefined string literal: 'AB···Z'
tn:    % Duplicate, number of elements, range: gives [1, 2, ···, 26]
!      % Transpose into a column vector
to~!   % Duplicate and transform into [0, 1, 0, 1, ···, 1] using modulo 2
+      % Addition with broadcast. Gives 2D numeric array
)      % Index (modularly) into string. Implicitly display.

5

Медуза , 26 байт

P
+'A
~
| S
+$ r2
 ,'
r'

Обратите внимание на конечные непечатаемые символы в последних двух строках. Попробуйте онлайн!

объяснение

Это в основном подход арифметической манипуляции: создайте сетку 26 × 26 с чередующимся шаблоном 0-1, добавьте индекс каждой строки к каждому элементу строки, уменьшите модуль 26 и добавьте значение ASCII: A . Символы в Медузах - это просто числа со специальным флагом, и все арифметические операции над ними работают, как и ожидалось.

Снизу вверх:

  • В 'ы являются символьные литералы; за ними следуют непечатаемые с кодом ASCII 26, и обозначают эти символы.
  • Нижняя rвычисляет диапазон символов от 0 до 25.
  • ,Образует пару из двух непечатных символов.
  • Чем выше rприведен аргумент 2, и образуется диапазон [0 1].
  • Он $берет этот диапазон и преобразует его в форму, заданную другим аргументом - парой непечатаемых. Это дает матрицу 26 × 26 чередующихся строк0 1 0 1 0 1 ...
  • Нижняя +добавляет диапазон символов 0-25 к этой матрице. Добавление распределяется по строкам, поэтому строка i увеличивается на i . Он также преобразуется в матрицу char, поскольку аргумент south состоит из символов char.
  • Модуль ~|является модулем с перевернутыми аргументами: аргумент южный (приведенная выше матрица символов) уменьшается по модулю аргумента восток ( Sповорачивает процесс поиска аргументов на юг, так что это непечатаемый литерал 26).
  • Чем выше +добавляется литерал Aк каждой координате полученной матрицы.
  • В Pпечатает результат в формате матрицы, то есть, каждая строка на отдельной строке без кавычек.

1
Я хотел попробовать сыграть в гольф, но потом увидел имя того, кто написал код.
Утренняя монахиня

@LeakyNun Вы все еще можете попробовать! Хотя 26 байтов подходит для этой задачи.
Згарб


5

Perl, 26 байт

Решение от @Dom Hastings . (На 12 байт меньше, чем у меня!)
-1 байт благодаря @Ton Hospel

say+($_++,chop)x13for A..Z

Запустите с -M5.010или -E:

perl -E 'say+($_++,chop)x13for A..Z'

Удалось сократить это до 33:, say+($_++,$_--=~/^./g)x13for A..Zно я уверен, что есть способ получить более короткий из: say+($_++,$_--)x13for A..Z...
Dom Hastings

Не уверен, почему у меня --там, это не нужно! O_o. 27:say+($_++,/^./g)x13for A..Z
Дом Гастингс

@DomHastings Отлично сделано! say+($_,$_++)x13for A..ZСначала я попробовал , но это не сработало, но, похоже, мне следовало двигаться дальше в этом направлении!
Дада

1
say+($_++,chop)x13for A..Zсохраняет еще один байт
Тон Хоспел

@TonHospel отлично, спасибо за это.
Дада

5

T-SQL 133 байта (Гольф: @ t-clausen.dk)

SELECT REPLICATE(Char(number+65)+IIF(number=25,'A',Char(number+66)),13)FROM spt_values WHERE number<26and'P'=TYPE

T-SQL, 151 байт

Использование CTE для генерации последовательности чисел

;WITH n(a,v) AS(SELECT CHAR(65)+CHAR(66), 66 UNION ALL SELECT CHAR(v)+CHAR(v+1), v+1 FROM n WHERE v < 91)SELECT REPLICATE(REPLACE(a,'[','A'),13) FROM n

T-SQL, 155 байт

SELECT REPLICATE(Char(number+65)+ CASE WHEN number=25 THEN 'A' ELSE Char(number+66) END, 13) FROM master.dbo.spt_values  WHERE name IS NULL AND number < 26

Я довел ваш ответ до 113 символов. Я дал совсем другой ответ в TSQL
t-clausen.dk

@ t-Clausen.dk Это отлично. Пожалуйста, оставьте свой ответ. Я бы удалил мой.
Ануй Трипати

Нет причин, чтобы удалить свой ответ, вы можете просто использовать мою скрипку, чтобы улучшить свой ответ. Я уже писал 1 час назад, если вам нравится TSQL, вы должны взглянуть на мои другие ответы. Я сделал скрипки для большинства из них
t-clausen.dk


4

Pyth, 10 байт

jCm.<G~!ZG

демонстрация

Объяснение:

jCm.<G~!ZG
  m      G    Map over G, predefined to the lowercase alphabet.
              This will give 26 columns.
   .<G        Left shift (cyclically) G by
        Z     Z elements. Z is initialized to 0.
      ~!      After using its value, logical not Z. (0 -> 1, 1 -> 0)
 C            Transpose
j             Join on newlines

Хорошо, хотелось бы, чтобы я знал столько же, сколько ты знаешь о Пите
Стэн Струм

4

Brainfuck, 88 86 байт

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

Требуется переводчик с 8-битными ячейками и лентой, не ограниченной слева. Попробуйте онлайн!


3

Луа, 80 65 байт.

s = string c = s.char for i=1,26 do print(s.rep(c(64+i)..c((65+(i%26))),13)) end

С помощью Лики Нун

c=("").char for i=1,26 do print((c(64+i)..c(65+i%26)):rep(13))end

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


Добро пожаловать в PPCG! Хороший первый пост! Вы можете сэкономить 5 байт, если удалите ненужные пробелы:s=string c=s.char for i=1,26 do print(s.rep(c(64+i)..c((65+(i%26))),13))end
GamrCorps

for i=1,26 do print(((64+i):char()..(65+(i%26)):char()):rep(13))end(не проверено)
Дрянная Монахиня

Потому string.rep(x,13)что в основномx:rep(13)
Дрянная Монахиня

Правильно! Я забыл строку с метатабельными индексами по умолчанию для библиотеки строк.
ATaco

Хотя это хорошо, числа, такие как 65+ (i% 26), не считаются строками, если не сохранены как таковые. Я поработаю над тем, чтобы сделать эту работу, черт побери.
ATaco


3

05AB1E, 12 байтов

ADÀ)øvyJ5Ø×,

объяснение

AD            # push 2 copies of the alphabet
  À           # rotate the 2nd one left by 1
   )ø         # add to list and zip
     v        # for each
      yJ      # join the pair
        5Ø×   # repeat it 13 times
           ,  # print with newline

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


Я знаю, что это старый вопрос, но я просто не могу с собой поделать. ADÀ)ø13×»работает также с 9 байтами.
Датбои

@Datboi: Это действительно работает сейчас, но, к сожалению, это не сработало в то время, когда этот вопрос был опубликован :(
Emigna

3

Mathematica, 82 75 67 66 байт

Print@FromCharacterCode@PadLeft[{},26,{i-1,i}~Mod~26+65]~Do~{i,26}

Технически короче, хотя печатается не в верхнем, а в нижнем регистре:

Mathematica, 64 байта

Print[""<>FromLetterNumber@Table[{i-1,i}~Mod~26+1,13]]~Do~{i,26}

1
Хороший трюк с использованием PadLeft.
Утренняя монахиня


1

MATLAB, 47 38 байт

a=(65:90)';char(repmat([a a([2:end 1])],1,13))

char(repmat([65:90;[66:90 65]]',1,13))

Первый создает массив столбцов алфавита в ASCII, добавляет смещенную копию в виде столбца справа, реплицирует результирующий массив 26 * 2 13 раз по столбцам, приводит к массиву символов и печатает по умолчанию.

Второй создает массив алфавита 2 * 26 и сдвинутый алфавит, транспонирует его, затем продолжает, как описано выше.


Вы можете сохранить один байт, используя [... '']вместо char(...).
pajonk

И вы можете использовать просто [65:90;66:90 65]сохранение двух байтов.
pajonk



1

PHP, 102 байта

<?php $a='ABCDEFGHIJKLMNOPQRSTUVWXYZA';$i=-1;while($i++<25){echo str_repeat(substr($a,$i,2),13)."\n";}

Вы можете удалить кавычки из строки алфавита. Замените \ n фактическим вводом вместо \ n. Украл эту идею у @insertusername здесь. Так что проверьте его ответ, что я имею в виду. Изменить: Также используйте обозначение короткого тега <?. Вам также не нужен пробел после <?. Так <?$a='ABC'же и работает.
Йерун

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