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


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.