Надрукувати хвилю алфавіту


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 Як нечисленні вони, я не думаю, що вони гідні прихильників. (Я не маю на увазі, що ви зволікаєте, я просто кажу.)
— Conor O'Brien

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

9
@ Денніс незалежно від використовуваних символів, його типів "візерункових" викликів, які надмірно використовуються, 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
Це геній.
— Leaky Nun

Приємно бачити C у коді для гольфу.
— Мішель Джонсон

@MichealJohnson " дивись С ", IC що ти там робив. ;) І я погоджуюся з Leaky Nun . Іноді мені цікаво, як люди придумують деякі з цих геніальних відповідей.
— Kevin Cruijssen

@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>є клавішею клавіші. Усі вони рахувалися як один байт.

Я записав 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, наступний чар


Я думав, ви можете вставити @"між ними.
— Лина монахиня

Це не використовує функцію повернення?
— Conor O'Brien

@ ConorO'Brien так?
— Пуховина


@ ConorO'Brien о, не бачив у специфіці виклику. виправлять
— Пуховик

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 Кб !!
— Ерік Аутгольфер

Спасибі! Я перевірив і, на жаль, Yбув доданий через два дні після опублікування виклику.
— Денніс

Тому що ти міг би гольфувати це далі 26ḶḂØAṙZY. Але, як зараз, все одно добре.
— Erik the 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

@MarLinn: Ні, я не думаю, що так. Мови для гольфу розроблені з урахуванням неявного друку, і більшість інших відповідей мають певну команду друку. Btw, unlinesнавіть коротше, ніж (++"\n")=<<.
— nimi

7

PowerShell, 49 43 байти

Ремікс TimmyD:

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

було 49 байт:

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

Example output


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
якщо ви зміните індекс на, i in 1:26а потім вибір літер до LETTERS[c(i,i%%26+1)]вас може впасти як 6 або 7 байт
— user5957401

1
@ user5957401 arf Я так наполегливо робив, (i+1)%%26що мені не спало на думку робити щось навпаки! Спасибі!
— планнапус

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

Знизу вгору:

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

1
Я хотів спробувати покататися на гольфі, але тоді я побачив ім'я того, хто написав код.
— Leaky Nun

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

5

Vim, 31 байт

:h<_↵↵↵YZZPJra0qqy2l13Plr↵25@qD

Де ↵ключ повернення.

enter image description here


5

Perl, 26 байт

Рішення від @Dom Hastings . (12 байт коротше мого!)
-1 байт завдяки @Ton Hospel

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

Виконати з -M5.010або -E:

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

Managed to get this down to 33: say+($_++,$_--=~/^./g)x13for A..Z, but I'm sure there's a way to get a shorter one from: say+($_++,$_--)x13for A..Z...
— Dom Hastings

Not sure why I have the -- in there, it's not needed! O_o. 27: say+($_++,/^./g)x13for A..Z
— Dom Hastings

@DomHastings Nicely done! I tried say+($_,$_++)x13for A..Z at first which didn't work, but it seems I should have push further into that direction!
— Dada

1
say+($_++,chop)x13for A..Z saves one more byte
— Ton Hospel

@TonHospel great, thanks for that.
— Dada

5

T-SQL 133 Bytes (Golfed by : @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 Bytes

Using CTE to generate sequence of number

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

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

I have golfed your answer down to 113 characters. I provided a very different answer in TSQL
— t-clausen.dk

@t-Clausen.dk That is excellent. Please post your answer. I would delete mine.
— Anuj Tripathi

no reason to delete your answer, you can just use my fiddle to improve your answer. I already posted 1 hour ago ago, if you enjoy TSQL , you should take a look at my other answers. I made Fiddles for most of them
— t-clausen.dk


4

Pyth, 10 bytes

jCm.<G~!ZG

Demonstration

Explanation:

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

Nice, wish I knew as much as you do about Pyth
— Stan Strum

4

Brainfuck, 88 86 bytes

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

Requires an interpreter with 8-bit cells and a tape not bounded on the left. Try it online!


3

Lua, 80 65 Bytes.

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

With help from Leaky Nun

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

Lua is a pretty inefficent language in regards to handling of strings and such, so this is the best I can narrow it down.


Welcome to PPCG! Nice first post! You can save 5 bytes if you remove some unnecessary whitespace: 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 (not tested)
— Leaky Nun

Because string.rep(x,13) is basically x:rep(13)
— Leaky Nun

Right! I forgot the string metatable defaultly indexes to the string library.
— ATaco

Although good, numbers such as 65+(i%26) don't count as strings unless stored as such. I'll work on a way to make that work for the hell of it.
— ATaco


3

05AB1E, 12 bytes

ADÀ)øvyJ5Ø×,

Explanation

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

Try it online


I know this is an old question but i just can't help myself. ADÀ)ø13×» works as well with 9 bytes.
— Datboi

@Datboi: That does indeed work now, but unfortunately it didn't work at the time this question was posted :(
— Emigna

3

Mathematica, 82 75 67 66 bytes

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

Technically shorter, although it prints in lowercase instead of uppercase:

Mathematica, 64 bytes

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

1
Nice trick using PadLeft.
— Leaky Nun


1

MATLAB, 47 38 bytes

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

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

The first makes a column array of the alphabet in ASCII, appends a shifted copy as a column to its right, replicates the resulting 26*2 array 13 times columnwise, casts to a character array and prints by default.

The second makes a 2*26 array of alphabet and shifted alphabet, transposes it then continues as above.


You can save one byte using [... ''] instead of char(...).
— pajonk

And you can use simply [65:90;66:90 65] saving two bytes.
— pajonk



1

PHP, 102 bytes

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

You can remove the quotes from the Alphabet string. Replace \n with an actual enter instead of \n. Stole that idea from @insertusernamehere. So check his answer for what I mean. Edit: Also use the short-tag notation <?. You also do not need a space after <?. So <?$a='ABC' also works.
— Jeroen

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