Wydrukuj falę alfabetu


37

Masz wydrukować dokładnie ten tekst:

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

Okular

  • Możesz wydrukować wszystkie małe litery zamiast wszystkich wielkich. Jednak wielkość liter musi być spójna przez cały wynik.
  • Możesz wydrukować jedno dodatkowe podawanie końca linii.

Punktacja

Ponieważ jest to fala alfabetu, która waha się w niewielkim stopniu, kod powinien być również mały pod względem liczby bajtów. W rzeczywistości wygrywa najmniejszy kod pod względem liczby bajtów.


39
Poważnie, kolejne wyzwanie alfabetyczne?
Nathan Merrill,

6
@NathanMerrill Choć jest ich tak wiele, nie sądzę, aby byli godni pochwał. (Nie sugeruję, że jesteś zagłosowany, mówię tylko.)
Conor O'Brien,

14
Dopóki wzory są wystarczająco różne, nie sądzę, żeby miało to znaczenie, jeśli użyjemy alfabetu, cyfr dziesiętnych, gwiazdek i podkreślników itp.
Dennis

9
@Dennis, niezależnie od użytych znaków, jest tego rodzaju „wzorcowymi” wyzwaniami, które są nadużywane, IMO. Nie wydaje mi się, żeby to było nie na temat, ale chciałbym się cieszyć świeżym powietrzem.
Nathan Merrill,

13
Oczywiste jest, że nie ma już zapotrzebowania na alfabet - tylko 39 osób odpowiedziało w ciągu pierwszych 15 godzin ...
trichoplax

Odpowiedzi:


37

C, 60 bajtów

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

10
To jest genialne.
Leaky Nun

Miło widzieć C w golfowym konkursie kodowym.
Micheal Johnson,

@MichealJohnson „ patrz C ”, IC, co tam zrobiłeś. ;) I zgadzam się z Dziurawą Zakonnicą . Czasami zastanawiam się, jak ludzie wymyślają niektóre z tych genialnych odpowiedzi.
Kevin Cruijssen

@KevinCruijssen To był niezamierzony lol.
Micheal Johnson

17

Brainfuck, 104 bajty

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

1
Praktycznie taki sam rozmiar jak Hello World. Imponujący!
phyrfox,

3

14

Wypukły, 10 bajtów

U_(+]D*zN*

Wypróbuj online!

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"

9

Pyth, 11 10 bajtów

jC*13.<BG1

Wypróbuj tutaj.

        G   the alphabet
       B    bifurcate over
     .<  1  left shift by 1
  *13       repeat 13 times
 C          transpose
j           join on newlines

8

Vim, 85 83 bajtów

: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

Wiem, że można bardziej grać w golfa, ale boli mnie głowa, więc na razie muszę się zatrzymać.

<cr>to klawisz Enter, <c+v>to ctrl + v i <esc>to klawisz Escape. Wszystkie były liczone jako jeden bajt.

Nagrałem gif tego, ale to wszystko spieprzyło. Wideo jest w porządku: http://recordit.co/ldLKvho9Gi


8

Rubin, 42 39 38 37 bajtów

-3 bajty dzięki @ user81655
-1 bajtów dzięki @manatwork
-1 bajtów dzięki @NotthatCharles

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

Zobacz na repl.it: https://repl.it/CmOJ


7

Cheddar, 48 bajtów

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

Cheddar jest dobry z ciągami: D

Wypróbuj online!

Wyjaśnienie

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

Co ma l>89?65:l+1zrobić? Cóż, 89to kod char dla Y. Zasadniczo l>89sprawdza, czy list jest Z, co oznacza, że ​​powinniśmy wracać A. Jeśli l>89jest fałszywe. Wrócę l+1, następny char


Myślałem, że możesz wstawić @"między nimi.
Leaky Nun

Czy to nie używa funkcji powrotu?
Conor O'Brien,

@ ConorO'Brien tak?
Downgoat


@ ConorO'Brien oh, nie widziałem w specyfikacji wyzwania. naprawi
Downgoat

7

Galaretka , 10 bajtów

26ḶḂØAṙZj⁷

Wypróbuj online!

Jak to działa

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.

Nie Yistniał wtedy? Gratulacje za 100 000 powtórzeń !!
Erik the Outgolfer

Dzięki! Sprawdziłem i, niestety, zostałem Ydodany dwa dni po opublikowaniu wyzwania.
Dennis

Ponieważ mogłeś grać w golfa dalej 26ḶḂØAṙZY. Ale tak jak jest teraz, wciąż jest dobrze.
Erik the Outgolfer

7

Haskell, 60 58 bajtów

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

Począwszy od „A” scanr(:)buduje listę z znaków ['A'..'Z']z prawej strony. (-> ["ABCDE...A", "BCDEF..A", ..., "XYZA", "YZA", "ZA", "A"]). (a:b:_)dopasowuje pierwsze dwa znaki każdej podlisty (z co najmniej dwoma znakami) i tworzy 13 kopii.


Biorąc pod uwagę niektóre kody regularnie używane przez inne języki, uważam za słuszne nie uwzględniać faktycznego drukowania. W takim przypadku możesz zastąpić go „(++” \ n ”) = <<” i zapisać 2 bajty. Prawdopodobnie więcej.
MarLinn,

@MarLinn: Nie, nie sądzę. Języki gry w golfa zostały zaprojektowane z myślą o drukowaniu niejawnym, a większość innych odpowiedzi zawiera polecenie drukowania. Btw, unlinesjest nawet krótszy niż (++"\n")=<<.
nimi

7

PowerShell, 49 43 bajtów

Remiks TimmyD:

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

było 49 bajtów:

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

Przykładowe dane wyjściowe


6

Python 2, 70 68 54 bajtów

Rozwiązanie oparte na liście:

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

Ale po co tworzyć listę? Dzięki LeakyNun:

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

6

R, 72 67 60 56 bajtów

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

Dzięki @Giuseppe za dodatkowe 4 bajty!

Stare reprozwiązanie o wielkości 60 bajtów:

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

Zobacz tutaj na tłumacza online. Dzięki @ user5957401 za dodatkowe 7 bajtów off!

Stare rozwiązanie oparte na macierzy o wielkości 72 bajtów:

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

Zobacz tutaj na tłumacza online.


1
jeśli zmienisz indeksu na, i in 1:26a następnie wybór litery do LETTERS[c(i,i%%26+1)]możesz upuścić jak 6 lub 7 bajtów
5957401

1
@ user5957401 arf Tak uparcie robiłem (i+1)%%26, że nie przyszło mi do głowy odwrotnie! Dzięki!
plannapus,

1
56 bajtów przy użyciu macierzy ponownie :)
Giuseppe,

5

MATL , 13 bajtów

1Y2tn:!to~!+)

Wypróbuj online!

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

Meduza , 26 bajtów

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

Zwróć uwagę na końcowe znaki niedrukowalne w dwóch ostatnich wierszach. Wypróbuj online!

Wyjaśnienie

Jest to w zasadzie podejście arytmetyczne: utwórz siatkę 26 × 26 z naprzemiennym wzorem 0-1, dodaj indeks każdego wiersza do każdego elementu wiersza, zmniejsz mod 26 i dodaj wartość ASCII A. Postacie w meduzach to tylko liczby ze specjalną flagą, a wszystkie działania arytmetyczne działają na nich zgodnie z oczekiwaniami.

Od dołu do góry:

  • Do 's są literały znakowe; po nich znajdują się niedrukowalne kody ASCII 26 i oznaczają te znaki.
  • Niższy roblicza zakres znaków od 0 do 25.
  • ,Tworzy parę z dwóch niedrukowalnych znaków.
  • Im wyższy rargument 2, tym jest on zakresem [0 1].
  • $Wykonuje on ten zakres, i przekształca je do postaci danym swoim drugim argumencie, który jest para unprintables. Daje to macierz 26 × 26 na przemian rzędów0 1 0 1 0 1 ...
  • Niższy +dodaje zakres znakowy 0-25 do tej macierzy. Dodanie rozdziela się na rzędy, więc rząd i jest zwiększany o i . Jest również konwertowany na macierz char, ponieważ argument południowy składa się z znaków.
  • Jest ~|to moduł z odwróconymi argumentami: argument południowy (powyższa macierz znaków) jest zredukowany modulo argument wschodni ( Sodwraca proces szukania argumentów na południe, więc jest to drukowalny literał 26).
  • Wyższy +dodaje literał Ado każdej współrzędnej wynikowej macierzy.
  • Wyświetla Pwynik w formacie macierzy, to znaczy każdy wiersz w swoim wierszu bez cudzysłowów.

1
Chciałem spróbować golfa, ale potem zobaczyłem nazwisko tego, który napisał kod.
Leaky Nun

@LeakyNun Nadal możesz spróbować! Chociaż 26 bajtów nadaje się do tego wyzwania.
Zgarb,

5

Vim, 31 bajtów

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

Gdzie jest klawisz Return.

wprowadź opis zdjęcia tutaj


5

Perl, 26 bajtów

Rozwiązanie @Dom Hastings . (12 bajtów krótszych niż moje!)
-1 bajt dzięki @Ton Hospel

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

Uruchom z -M5.010lub -E:

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

Udało się to obniżyć do 33:, say+($_++,$_--=~/^./g)x13for A..Zale jestem pewien, że istnieje sposób, aby uzyskać krótszy z: say+($_++,$_--)x13for A..Z...
Dom Hastings

Nie jestem pewien, dlaczego mam --tam, to nie jest potrzebne! O_o. 27:say+($_++,/^./g)x13for A..Z
Dom Hastings,

@DomHastings Ładnie zrobione! Na początku próbowałem, say+($_,$_++)x13for A..Zco nie zadziałało, ale wydaje się, że powinienem był pójść dalej w tym kierunku!
Dada,

1
say+($_++,chop)x13for A..Zoszczędza jeszcze jeden bajt
Ton Hospel

@TonHospel świetnie, dzięki za to.
Dada,

5

T-SQL 133 Bytes (grał w golfa: @ 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 bajtów

Używanie CTE do generowania sekwencji liczb

;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 bajtów

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

Grałem w golfa twoją odpowiedź do 113 znaków.
Podałem

@ t-Clausen.dk To jest doskonałe. Proszę zamieścić swoją odpowiedź. Usunę moje.
Anuj Tripathi,

bez powodu, aby usunąć swoją odpowiedź, możesz po prostu użyć mojego skrzypka, aby poprawić swoją odpowiedź. Napisałem już godzinę temu, jeśli lubisz TSQL, powinieneś spojrzeć na moje inne odpowiedzi. Zrobiłem skrzypce dla większości z nich
t-clausen.dk,


4

Pyth, 10 bajtów

jCm.<G~!ZG

Demonstracja

Wyjaśnienie:

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

Fajnie, chciałbym wiedzieć tyle samo, co ty o Pyth
Stan Strum,

4

Brainfuck, 88 86 bajtów

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

Wymaga interpretera z 8-bitowymi komórkami i taśmą nieograniczoną po lewej stronie. Wypróbuj online!


3

Lua, 80 65 bajtów.

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

Z pomocą Dziurawej Zakonnicy

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

Lua jest dość nieefektywnym językiem, jeśli chodzi o obsługę ciągów znaków i takie, więc to jest najlepsze, co mogę zawęzić.


Witamy w PPCG! Miły pierwszy post! Możesz zaoszczędzić 5 bajtów, jeśli usuniesz niepotrzebne białe znaki: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(nie testowano)
Leaky Nun

Ponieważ string.rep(x,13)jest to w zasadziex:rep(13)
Leaky Nun

Dobrze! Zapomniałem, że metatable string domyślnie indeksuje do biblioteki stringów.
ATaco,

Chociaż dobre, liczby takie jak 65+ (i% 26) nie liczą się jako ciągi znaków, chyba że są przechowywane jako takie. Będę pracował nad sposobem, aby to zadziałało do cholery.
ATaco,


3

05AB1E, 12 bajtów

ADÀ)øvyJ5Ø×,

Wyjaśnienie

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

Wypróbuj online


Wiem, że to stare pytanie, ale nie mogę się powstrzymać. ADÀ)ø13×»działa również z 9 bajtami.
Datboi

@Datboi: To rzeczywiście działa teraz, ale niestety nie zadziałało w czasie, gdy to pytanie zostało opublikowane :(
Emigna

3

Mathematica, 82 75 67 66 bajtów

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

Technicznie krótszy, chociaż drukuje się małymi literami zamiast wielkich:

Mathematica, 64 bajty

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

1
Niezła sztuczka PadLeft.
Leaky Nun


1

MATLAB, 47 38 bajtów

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

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

Pierwszy tworzy tablicę kolumn alfabetu w ASCII, dołącza przesuniętą kopię jako kolumnę po swojej prawej stronie, replikuje wynikową tablicę 26 * 2 13 razy w kolumnie, rzutuje na tablicę znaków i drukuje domyślnie.

Drugi tworzy tablicę alfabetu 2 * 26 i przesunięty alfabet, transponuje go, a następnie kontynuuje jak wyżej.


Możesz zapisać jeden bajt, używając [... '']zamiast char(...).
pajonk,

I możesz użyć po prostu [65:90;66:90 65]oszczędzając dwa bajty.
pajonk,

1

J, 20 19 bajtów

1 bajt dzięki milom.

u:65+26|(+/2&|)i.26

Tłumacz online

To jest właściwie program, którego użyłem do wygenerowania tekstu w wyzwaniu.


Możesz usunąć@
mile


1

PHP, 102 bajty

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

Możesz usunąć cudzysłowy z ciągu alfabetu. Zamień \ n na rzeczywisty enter zamiast \ n. Ukradnij ten pomysł z @insertusernametherethere. Więc sprawdź jego odpowiedź, co mam na myśli. Edycja: użyj również skrótu notacji <?. Nie potrzebujesz również spacji po <?. Tak <?$a='ABC'też działa.
Jeroen,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.