Cetak gelombang alfabet


37

Anda harus mencetak teks ini:

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

Spesifikasi

  • Anda dapat mencetak semua huruf kecil dan bukan semua huruf besar. Namun, case harus konsisten di seluruh output.
  • Anda dapat mencetak satu linefeed tambahan tambahan.

Mencetak gol

Karena ini adalah gelombang alfabet yang berfluktuasi pada tingkat yang kecil, kode Anda juga harus kecil dalam hal byte-count. Bahkan, kode terkecil dalam hal byte-count menang.


39
Serius, tantangan alfabet lain ?
Nathan Merrill

6
@NathanMerrill Sebanyak mereka, saya tidak berpikir mereka layak untuk downvotes. (Saya tidak menyiratkan Anda diturunkan, saya hanya mengatakan.)
Conor O'Brien

14
Selama polanya cukup berbeda, saya tidak berpikir itu penting jika kita menggunakan alfabet, angka desimal, tanda bintang, dan garis bawah, dll.
Dennis

9
@ Dennis terlepas dari karakter yang digunakan, ini jenis "pola" tantangan yang semakin sering digunakan, IMO. Saya tidak berpikir itu offtopic, tetapi saya akan menikmati udara segar.
Nathan Merrill

13
Sudah jelas tidak ada lagi permintaan untuk tantangan alfabet - hanya 39 orang yang menjawab dalam 15 jam pertama ...
trichoplax

Jawaban:


37

C, 60 byte

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

10
Ini jenius.
Leaky Nun

Senang melihat C dalam tantangan kode golf.
Micheal Johnson

@MichealJohnson " lihat C ", IC apa yang Anda lakukan di sana. ;) Dan saya setuju dengan Leaky Nun . Terkadang saya bertanya-tanya bagaimana orang-orang memberikan jawaban yang cerdik ini.
Kevin Cruijssen

@KevinCruijssen Itu adalah lol yang tidak disengaja.
Micheal Johnson

17

Brainfuck, 104 byte

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

1
Praktis ukurannya sama dengan Hello World. Impresif!
phyrfox

3
@ phyrfox Sebenarnya ...
Sp3000

14

Cembung, 10 byte

U_(+]D*zN*

Cobalah 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 byte

jC*13.<BG1

Coba di sini.

        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 byte

: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

Saya tahu ini bisa bermain golf lebih banyak, tetapi kepala saya sakit jadi saya harus berhenti sekarang.

<cr>adalah tombol enter, <c+v>adalah ctrl + v, dan <esc>merupakan tombol pelarian. Itu semua dihitung sebagai satu byte.

Saya mencatat gif ini, tapi itu kacau. Video ini baik-baik saja: http://recordit.co/ldLKvho9Gi


8

Ruby, 42 39 38 37 byte

-3 byte terima kasih kepada @ user81655
-1 byte terima kasih kepada @manatwork
-1 byte terima kasih kepada @NotthatCharles

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

Lihat di repl.it: https://repl.it/CmOJ


7

Cheddar, 48 byte

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

Cheddar baik dengan string: D

Cobalah online!

Penjelasan

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

Apa yang l>89?65:l+1harus dilakukan Nah 89adalah kode untuk char Y. Pada dasarnya, l>89memeriksa apakah surat itu Z, itu berarti kita harus kembali A. Jika l>89salah. Saya akan kembali l+1, char berikutnya


Saya pikir Anda bisa memasukkan di @"antara mereka.
Leaky Nun

Bukankah ini menggunakan fungsi yang dikembalikan?
Conor O'Brien

@ Conor'Brien ya?
Downgoat


@ ConorO'Brien oh, tidak melihat dalam spec tantangan. akan memperbaiki
Downgoat

7

Jelly , 10 byte

26ḶḂØAṙZj⁷

Cobalah online!

Bagaimana itu bekerja

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.

Tidak Yada saat itu? Juga selamat untuk 100 ribu perwakilan !!
Erik the Outgolfer

Terima kasih! Saya memeriksa dan, sayangnya, Yditambahkan dua hari setelah tantangan diposting.
Dennis

Karena Anda bisa bermain golf lebih jauh ke bawah 26ḶḂØAṙZY. Tapi, seperti sekarang, masih bagus.
Erik the Outgolfer

7

Haskell, 60 58 byte

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

Dimulai dengan "A" scanr(:)membangun daftar dari karakter dari ['A'..'Z']kanan. (-> ["ABCDE...A", "BCDEF..A", ..., "XYZA", "YZA", "ZA", "A"]). (a:b:_)cocok dengan dua karakter pertama dari masing-masing sublists (dengan setidaknya dua karakter) dan membuat 13 salinannya.


Mempertimbangkan beberapa kode curang yang digunakan oleh bahasa lain secara teratur, saya menganggap wajar untuk tidak menyertakan cetakan yang sebenarnya. Dalam hal ini Anda bisa menggantinya dengan "(++" \ n ") = <<" dan menyimpan 2 byte. Mungkin lebih.
MarLinn

@ MarsLinn: Tidak, saya rasa tidak. Bahasa golf dirancang dengan pemikiran pencetakan implisit dan sebagian besar jawaban lain memiliki semacam perintah pencetakan. Btw, unlinesbahkan lebih pendek dari (++"\n")=<<.
nimi

7

PowerShell, 49 43 byte

Remix TimmyD:

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

adalah, 49 byte:

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

Contoh output


6

Python 2, 70 68 54 byte

Solusi berbasis daftar:

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

Tetapi mengapa membuat daftar? Terima kasih LeakyNun:

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

6

R, 72 67 60 56 byte

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

Terima kasih kepada @Giuseppe untuk tambahan 4 byte!

repSolusi berbasis lama pada 60 byte:

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

Lihat di sini di penerjemah online. Terima kasih kepada @ user5957401 untuk off 7 byte tambahan!

Solusi berbasis matriks lama pada 72 byte:

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

Lihat di sini di penerjemah online.


1
jika Anda mengubah indext ke i in 1:26dan kemudian pemilihan huruf untuk LETTERS[c(i,i%%26+1)]Anda dapat turun seperti 6 atau 7 byte
user5957401

1
@ user5957401 arf saya begitu keras kepala melakukan (i+1)%%26itu tidak terpikir oleh saya untuk melakukan yang sebaliknya! Terima kasih!
plannapus

1
56 byte menggunakan matriks lagi :)
Giuseppe

5

MATL , 13 byte

1Y2tn:!to~!+)

Cobalah 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

Ubur-ubur , 26 byte

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

Perhatikan trailing karakter yang tidak diinginkan pada dua baris terakhir. Cobalah online!

Penjelasan

Ini pada dasarnya adalah pendekatan manipulasi aritmatika: buat kisi 26 × 26 dengan pola bolak-balik 0-1, tambahkan indeks setiap baris ke setiap elemen baris, kurangi mod 26, dan tambahkan nilai ASCII dari A. Karakter dalam Ubur-ubur hanyalah angka dengan bendera khusus, dan semua aritmatika berfungsi sesuai harapan.

Dari bawah ke atas:

  • Ini 'adalah karakter literal; mereka diikuti oleh unsintables dengan kode ASCII 26, dan mendukung karakter tersebut.
  • Semakin rendah rmenghitung rentang karakter dari 0 hingga 25.
  • The ,membentuk pasangan dari dua karakter tak patut ditulis.
  • Semakin tinggi rdiberikan argumen 2, dan membentuk kisaran[0 1] .
  • Yang $mengambil rentang itu, dan membentuk kembali ke bentuk yang diberikan oleh argumen lainnya, yang merupakan pasangan yang tidak dapat dicetak. Ini memberikan 26 × 26 matriks bolak baris0 1 0 1 0 1 ...
  • Semakin rendah +menambahkan rentang karakter 0-25 ke matriks ini. Penambahan didistribusikan pada baris, jadi baris i bertambah oleh i . Ini juga dikonversi ke matriks char, karena argumen selatan terdiri dari karakter.
  • The ~|adalah modulus dengan argumen membalik: argumen selatan (di atas arang matriks) berkurang Modulo argumen timur (yangS ternyata argumen-mencari proses selatan, jadi ini adalah tak patut ditulis literal 26).
  • Semakin tinggi +menambahkan literalA ke setiap koordinat dari matriks yang dihasilkan.
  • The Pcetakan hasil dalam format matriks, yaitu, setiap baris pada baris sendiri tanpa tanda kutip.

1
Saya ingin mencoba golf tetapi kemudian saya melihat nama dia yang menulis kode.
Leaky Nun

@ LeakyNun Anda masih dapat mencoba! Meskipun 26 byte cocok untuk tantangan ini.
Zgarb

5

Vim, 31 byte

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

Di mana tombol Return.

masukkan deskripsi gambar di sini


5

Perl, 26 byte

Solusi dari @Dom Hastings . (12 byte lebih pendek dari milikku!)
-1 byte berkat @Ton Hospel

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

Jalankan dengan -M5.010atau -E:

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

Berhasil mendapatkan ini ke 33:, say+($_++,$_--=~/^./g)x13for A..Ztapi saya yakin ada cara untuk mendapatkan yang lebih pendek dari: say+($_++,$_--)x13for A..Z...
Dom Hastings

Tidak yakin mengapa saya punya --di sana, itu tidak diperlukan! O_o. 27:say+($_++,/^./g)x13for A..Z
Dom Hastings

@HomHastings Dilakukan dengan baik! Saya mencoba say+($_,$_++)x13for A..Zpada awalnya yang tidak berhasil, tetapi tampaknya saya harus mendorong lebih jauh ke arah itu!
Dada

1
say+($_++,chop)x13for A..Zmenghemat satu byte lagi
Ton Hospel

@TonHospel bagus, terima kasih untuk itu.
Dada

5

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

Menggunakan CTE untuk menghasilkan urutan angka

;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

Saya telah memasukkan jawaban Anda hingga 113 karakter. Saya memberikan jawaban yang sangat berbeda di TSQL
t-clausen.dk

@ t-Clausen.dk Itu bagus sekali. Silakan kirim jawaban Anda. Saya akan menghapus milik saya.
Anuj Tripathi

tidak ada alasan untuk menghapus jawaban Anda, Anda bisa menggunakan biola saya untuk meningkatkan jawaban Anda. Saya sudah memposting 1 jam yang lalu, jika Anda menikmati TSQL, Anda harus melihat jawaban saya yang lain. Saya membuat Fiddles untuk sebagian besar dari mereka
t-clausen.dk


4

Pyth, 10 byte

jCm.<G~!ZG

Demonstrasi

Penjelasan:

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

Bagus, seandainya aku tahu sebanyak yang Anda lakukan tentang Pyth
Stan Strum

4

Brainfuck, 88 86 byte

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

Membutuhkan juru bahasa dengan sel 8-bit dan selotip tidak dibatasi di sebelah kiri. Cobalah 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

Dengan bantuan dari Leaky Nun

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

Lua adalah bahasa yang cukup tidak efisien dalam hal menangani string dan semacamnya, jadi ini adalah yang terbaik yang bisa saya persempit.


Selamat datang di PPCG! Posting pertama yang bagus! Anda dapat menyimpan 5 byte jika Anda menghapus spasi kosong yang tidak perlu: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(tidak diuji)
Leaky Nun

Karena string.rep(x,13)pada dasarnyax:rep(13)
Leaky Nun

Kanan! Saya lupa string metatable diindeks secara default ke perpustakaan string.
ATaco

Meski baik, angka seperti 65+ (i% 26) tidak dihitung sebagai string kecuali disimpan seperti itu. Saya akan bekerja pada cara untuk membuat itu berhasil untuk itu.
ATaco


3

05AB1E, 12 byte

ADÀ)øvyJ5Ø×,

Penjelasan

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

Cobalah online


Saya tahu ini adalah pertanyaan lama tetapi saya tidak bisa menahan diri. ADÀ)ø13×»berfungsi juga dengan 9 byte.
Datboi

@ Datboi: Itu memang bekerja sekarang, tapi sayangnya itu tidak berfungsi pada saat pertanyaan ini diposting :(
Emigna

3

Mathematica, 82 75 67 66 byte

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

Secara teknis lebih pendek, meskipun dicetak dalam huruf kecil dan bukan huruf besar:

Mathematica, 64 byte

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

1
Trik yang bagus untuk digunakan PadLeft.
Leaky Nun


1

MATLAB, 47 38 byte

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

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

Yang pertama membuat array kolom alfabet di ASCII, menambahkan salinan bergeser sebagai kolom di sebelah kanannya, mereplikasi array 26 * 2 yang dihasilkan 13 kali secara kolom, dilemparkan ke array karakter dan dicetak secara default.

Yang kedua membuat 2 * 26 array alfabet dan alfabet bergeser, transpos kemudian melanjutkan seperti di atas.


Anda dapat menyimpan satu byte menggunakan [... '']bukan char(...).
pajonk

Dan Anda dapat menggunakan hanya [65:90;66:90 65]menyimpan dua byte.
pajonk



1

PHP, 102 byte

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

Anda dapat menghapus tanda kutip dari string Alfabet. Ganti \ n dengan input aktual, bukan \ n. Curi ide itu dari @insertusernamehere. Jadi, periksa jawabannya untuk apa yang saya maksud. Sunting: Juga gunakan notasi tag pendek <?. Anda juga tidak perlu spasi setelah <?. Begitu <?$a='ABC'juga bekerja.
Jeroen

1

Ruby, 41 byte

26.times{|i|puts [*?A..?Z,?A][i,2]*''*13}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.