Buat Gelombang Meksiko


64

Dalam sesedikit mungkin byte, tulislah sebuah program atau fungsi yang menampilkan berikut ini:

Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz

Newline tambahan diizinkan. Anda dapat menemukan referensi implementasi Python ungolfed di sini .


1
Apakah aman untuk menganggap input tidak pernah menjadi huruf besar?
Winny

40
@ Winny Tidak ada input. Outputnya sudah diperbaiki. Bahkan, itulah ide umum pertanyaan kolmogorov-kompleksitas .
Chris Jester-Young

Ini telah ada dalam daftar HNQ secara konsisten sejak Anda mempostingnya. Kerja bagus. :)
Alex A.

1
Anda dapat menemukan referensi implementasi Python ungolfed di sini. -> tautan rusak
Franck Dernoncourt

Poin Franck Dernoncourt masih berdiri. Tautan rusak.
Jonathan Frech

Jawaban:


64

Pyth, 12 byte

V+Gt_GXGNrN1

Demonstrasi.

Dalam Pyth, Gadalah huruf kecil. +Gt_Gadalah abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba, karakter yang perlu ditulis dalam huruf besar di setiap baris.

Vmengatur a for loop di atas string ini, dengan Nsebagai variabel loop.

Di dalam tubuh, XGNrN1adalah fungsi terjemahan string. Xmenerjemahkan G, alfabet, menggantikan Ndengan rN1, versi huruf besar dari N. r ... 1adalah fungsi huruf besar. Ini memberikan output yang diinginkan.


31
Apakah saya satu-satunya yang merasa lucu bahwa huruf kecil diwakili oleh huruf besar?
Alex A.

31

C, 73

Terkadang pendekatan yang paling sederhana adalah yang terbaik: cetak setiap karakter satu per satu. ini mengalahkan banyak bahasa yang seharusnya tidak perlu.

i;f(){for(i=1377;i--;)putchar(i%27?123-i%27-32*!(i/702?i%28-4:i%26):10);}

penjelasan

i;f(){
   for(i=1377;i--;)
   putchar(i%27?                 //if I not divisible by 27
     123-i%27-                   //  print lowercase letter from ASCII 122 downards
       32*!(i/702?i%28-4:i%26)   //  subtract 32 to make it uppercase where necessary: above i=702, use i%28-4, below it use i%26
     :10);                       //if I divisible by 27 print a newline (10)
}

26

Python 2, 69 byte

i=25
exec"L=range(97,123);L[~abs(i)]^=32;i-=1;print bytearray(L);"*51

Bagus dan sederhana, saya pikir.


Itu sangat pintar. Ulangi membuka gulungan!
Alex Van Liew

20

Brainfuck (8bit), 231 byte

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

Ok, jadi itu tidak akan pernah menjadi yang terpendek, tapi bagian yang terpenting ... kan ?!

Cobalah di sini (pastikan untuk mencentang 'Memori dinamis')


5
Jika tujuannya adalah menjadi kode terpanjang yang mungkin masih sepenuhnya tidak dapat dipahami oleh programmer manusia rata-rata ...
Caleb

7
@ Caleb Saya pikir kode BF adalah beberapa kode termudah untuk dipahami. Ini adalah program / fungsionalitas yang sulit dimengerti. Setiap orang harus tahu bahwa >menggeser satu sel ke kanan, misalnya.
mbomb007

4
Selalu menyukai jawaban BF;)
RedPanda

Anda tidak langsung menulis kode ini, bukan ?
BAR

6
Aku malu mengatakan itu!
Jarmex

13

MS-DOS Binary, 61

Kode ini tidak harus dikompilasi, kode ini akan berjalan dalam MS-DOS jika Anda menulisnya ke file bernama wave.com. Kode dalam hex:

ba3d0189d7b91a00b061aa404975fbb00aaab00daab024aa31f6e8130046
83fe1a75f7be1800e807004e75fae80100c389d3802820b409cd21800020
c3

Atau, jika Anda lebih suka sesuatu yang lebih mudah dibaca, berikut adalah cara memproduksinya menggunakan debug.exe (baris kosong setelah kode penting):

debug.exe wave.com
a
mov dx,13d
mov di,dx
mov cx,1a
mov al,61
stosb
inc ax
dec cx
jnz 10a
mov al,a
stosb
mov al,d
stosb
mov al,24
stosb
xor si,si
call 130
inc si
cmp si,1a
jnz 11a
mov si,18
call 130
dec si
jnz 126
call 130
ret
mov bx,dx
sub byte ptr [si+bx],20
mov ah,9
int 21
add byte ptr [si+bx],20
ret

rcx
3e
w
q

11

Ruby: 71 68 65 63 karakter

puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse

Contoh dijalankan:

bash-4.3$ ruby -e 'puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse' | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

1
63:puts f=(e=*?a..?z).map{|c|(e*"").tr c,c.upcase},f[0,25].reverse
Ventero

Doh. Saya mencoba beberapa ide bodoh untuk mengoptimalkan penggunaan kembali e, tetapi tentu saja tidak dengan cara yang benar. Terima kasih, @Ventero.
manatwork

10

Matlab, 60 58 54 byte

I=32*eye(26);[ones(51,1)*(97:122) '']-[I;I(25:-1:1,:)])

Dengan terima kasih kepada Dennis Jaheruddin karena telah menyelamatkan saya 4 byte.


Di sini Anda juga dapat menggunakan tipuan tipikal untuk menggantikan char(x)dengan [x '']menyimpan byte.
Dennis Jaheruddin

Juga end-1merupakan cara yang agak verbose untuk menulis 25!
Dennis Jaheruddin

@DennisJaheruddin Ups. Terima kasih untuk keduanya! Sebenarnya [x '']triknya sama sekali tidak biasa bagi saya. Tapi sekarang saya ingat melihatnya di salah satu jawaban Anda :-)
Luis Mendo

8

SWI-Prolog, 136 byte

a:-(R=0;R=1),between(1,26,I),(I=1,R=0;I\=1,nl),between(1,26,J),(R=0,L=I;R=1,L is 27-I),(J=L,K is J+64,put(K);J\=L,K is J+96,put(K)),\+!.

Menyalahgunakan mundur untuk mengulang ...


8

Haskell 100 89 88 byte

putStr$map toEnum.(\(h,c:t)->h++c-32:t++[10]).(`splitAt`[97..122]).(25-).abs=<<[-25..25]

Fungsi pembantu lambda \(h,c:t)mengambil sepasang daftar nilai ascii dan menggabungkan keduanya, tetapi dengan nilai pertama dari daftar kedua dikapitalisasi. Fungsi utama membagi alfabet huruf kecil (diberikan dalam ascii, 97..122) di setiap posisi 0,..,24,25,24,..,0dan memanggil lambda di setiap langkah. Sebelum mencetak setiap nilai diubah menjadi karakter yang sesuai.



8

Scala 110 109 karakter

val a=('a'to'z').map(c⇒('a'to'z').map(v⇒if(v==c)c.toUpper else v).mkString)
a++a.init.reverse foreach println

5
OMG dalam simbol Scala ⇒ digunakan? Maksud saya bukan => tetapi ⇒ ???
shabunc

2
Keduanya valid :)
gilad hoch

bisa mencukur 1 byte jika saya mengubah foreach printlnke mkString("\n"), dan output string sebagai nilai kembali bukan mencetaknya ke layar
Gilad hoch

7

SQL (postgreSQL), 107 101

Hasilkan adalah seri dari -25 hingga 25 dan gunakan nilai absolut untuk mengganti karakter dengan versi huruf besar mereka. Berkat manatwork untuk tip tentang operator @.

select replace('abcdefghijklmnopqrstuvwxyz',chr(122- @i),chr(90- @i))from generate_series(-25,25)a(i)

Anda tahu bahwa PostgreSQL memiliki @operator?
manatwork

@manatwork nggak, aku tidak tahu itu, tapi sekarang aku berterima kasih
MickyT

7

Haskell, 81 byte

Menghitung byte seperti yang dilakukan @nimi; fadalah tindakan IO yang mencetak output yang diinginkan.

x!y|x==min(50-y)y=65|0<1=97
f=mapM putStrLn[[toEnum$x+x!y|x<-[0..25]]|y<-[0..50]]

Sangat elegan. Tidak tahu bahwa penjaga dapat digunakan sebaris.
user2845840


6

MATLAB - 58 byte

char(bsxfun(@minus,97:122,32*[eye(25,26);rot90(eye(26))]))

Mirip dengan solusi Luis Mendo , tetapi menggunakan kemampuan penyiaran bsxfun.

Mengambil keuntungan bahwa dalam ASCII, perbedaan antara huruf kapital dan huruf kecil persis 32 nilai dari satu sama lain, kami pertama-tama menghasilkan huruf kecil dari kode ASCII 97 hingga 122 yang merupakan kode ASCII dari huruf kecil a ke huruf kecil z dengan hormat, lalu membuat 51 baris matriks yang berisi 26 kode ASCII dari 97 hingga 122. Oleh karena itu, setiap baris dari matriks ini berisi urutan nilai numerik dari 97 hingga 122. Selanjutnya, kita membuat matriks lain di mana setiap baris ke-1 dari matriks ini berisi 32 di kolom ke- i . 26 baris pertama dari matriks ini memiliki pola ini, yang pada dasarnya adalah matriks identitas dikalikan dengan 32. Fungsinyaeyemenciptakan matriks identitas untuk Anda. 25 baris terakhir dari matriks ini adalah matriks identitas berskala yang diputar 90 derajat.

Dengan mengambil matriks identitas khusus berbobot ini dan mengurangkannya dengan matriks pertama, lalu mengonversi kode ASCII yang dihasilkan menjadi karakter, urutan "Topi Meksiko" yang diinginkan dihasilkan.

Contoh Jalankan

>> char(bsxfun(@minus,97:122,32*[eye(25,26);rot90(eye(26))]))

ans =

Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwxyZ
abcdefghijklmnopqrstuvwxYz
abcdefghijklmnopqrstuvwXyz
abcdefghijklmnopqrstuvWxyz
abcdefghijklmnopqrstuVwxyz
abcdefghijklmnopqrstUvwxyz
abcdefghijklmnopqrsTuvwxyz
abcdefghijklmnopqrStuvwxyz
abcdefghijklmnopqRstuvwxyz
abcdefghijklmnopQrstuvwxyz
abcdefghijklmnoPqrstuvwxyz
abcdefghijklmnOpqrstuvwxyz
abcdefghijklmNopqrstuvwxyz
abcdefghijklMnopqrstuvwxyz
abcdefghijkLmnopqrstuvwxyz
abcdefghijKlmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
Abcdefghijklmnopqrstuvwxyz

Anda juga dapat menjalankan contoh ini menggunakan lingkungan Octave online IDEone. Oktaf pada dasarnya adalah MATLAB tetapi gratis: http://ideone.com/PknMe0


1
rot90- dipikirkan dengan baik!
Luis Mendo

char (yang (26,1) * [97: 122] -eye (26) * 32)
user3528438

@ user3528438 bagaimana Anda menangani babak kedua? Kode hanya menghitung paruh pertama gelombang. Anda perlu menghitung sisanya.
rayryeng

@ user3528438 - Perhatikan juga bahwa apa yang Anda tulis pada dasarnya adalah bagian pertama dari jawaban Luis Mendo. Saya memutuskan untuk menulis sesuatu yang sedikit berbeda untuk mencapai hal yang sama :)
rayryeng - Reinstate Monica

@rayryeng ya, itu mengejutkan saya bahwa paruh kedua lebih sulit untuk ditangani, dan juga bagaimana menghindari duplikat pusat.
user3528438

5

J, 31 23 byte

u:|:(97+i.26)-32*=|i:25

8 byte disimpan berkat @Mauris.

Cobalah online di sini.


Saya bisa mendapatkan 23: u:|:(97+i.26)-32*=|i:25(monad =benar-benar berguna di sini!)
Lynn

@Mauris Terima kasih, saya belum berpikir untuk menggunakan monad di =sini. Itu sangat bagus!
randomra

5

Perl, 51 byte

50 byte kode + 1 byte parameter baris perintah

@a=a..z,@a[-1-abs]=uc@a[-1-abs],print@a for-25..25

Dapat digunakan sebagai berikut:

perl -le '@a=a..z,@a[-1-abs]=uc@a[-1-abs],print@a for-25..25'

Atau online di sini (catatan saya harus menambahkan ,"\n"ini karena saya tidak bisa menambahkan -l arg).


Metode yang jauh lebih lama Sebelum versi singkat di atas, saya mencoba metode yang berbeda yang akhirnya cukup tebal. Saya meninggalkannya di bawah untuk referensi.

86 kode byte + 1 byte baris perintah arg

$_=join"",0,a..z,1;print s/1//r while s/(([A-Z])|0)(\D)|(.)((?2))(1)/\L\2\U\3\4\6\L\5/

Perl Pertama saya pernah bermain golf dengan benar, jadi saya membayangkan ada banyak hal yang dapat dilakukan dengannya - tolong sarankan perbaikan!

Dapat digunakan sebagai berikut:

perl -le '$_=join"",0,a..z,1;print s/1//r while s/(([A-Z])|0)(\D)|(.)((?2))(1)/\L\2\U\3\4\6\L\5/'

Atau online di sini (perhatikan saya harus menambahkan. "\ N" untuk ini karena saya tidak bisa menambahkan -l arg).

Penjelasan

Pendekatan umum adalah dengan menggunakan substitusi regex untuk melakukan semua kerja keras. Kami memulai dengan:

0abcdefghijklmnopqrstuvwxyz1

Ini cocok (([A-Z])|0)(\D)dan akan diganti dengan \U\3(\ U berubah menjadi huruf besar) untuk memberikan:

Abcdefghijklmnopqrstuvwxyz1

Dari titik ini dan seterusnya, kami terus mencocokkan regex yang sama dan menggantinya dengan \L\2\U\3:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

Sekarang pergantian kedua dari regex cocok, (.)((?2))(1)(yang sama dengan (.)([A-Z])(1)). Kami ganti dengan \U\4\6\L\5memberi:

abcdefghijklmnopqrstuvwxY1z

Ini terus mencocokkan dan mengganti sampai kami mencapai:

A1bcdefghijklmnopqrstuvwxyz

dan tidak ada lagi pertandingan regex.

Pada setiap titik dalam loop kita melepas tanda '1' dan mencetak.


5

PHP, 87 71 69 byte

Bukan yang terpendek, tetapi berfungsi sebagaimana dimaksud.
Terima kasih kepada @manatwork untuk beberapa tips untuk mengurangi ukurannya dengan banyak.
Dan terima kasih kepada @Blackhole , ukurannya dikurangi 2 byte.

for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'
';

Tidak persis cantik, tetapi berhasil.


1
"Rekatkan Default ke string kosong." - Dokumentasi PHP tentang join()parameter pertama.
manatwork

1
Subskrip string itu tidak benar-benar optimal: $i<25?$i:25-($i-25)25-abs($i-25)
manatwork

1
Mengingat Anda sudah mengabaikan peringatan (untuk konstanta yang tidak ditentukan a dan z), Anda bisa mengabaikan yang lain untuk $ i yang belum diinisialisasi. Sambil menyentuh $ i, pindahkan kenaikannya ke dalam subskrip string. for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(Hanya bungkus baris di mana saya menggunakan "↵" dalam kode.)
manatwork

@manatwork Terima kasih banyak! Saya benar-benar lupa bahwa \nitu ada di sana. Inisialisasi $idibiarkan sebagai kecelakaan. Dan terima kasih banyak untuk 25-abs($i-25). Saya tidak akan sampai di sana sendirian.
Ismael Miguel

2
forLoop Anda dapat dioptimalkan: for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2 byte).
Blackhole

5

PowerShell 3.0, 82 byte

$(0..25)+$(24..0)|%{$i=$_;[string](@(97..122)|%{[char]@($_,($_-32))[$_-eq$i+97]})}

5

TIS Node Tipe T21 Arsitektur - 216 215 byte

Saksikan beraksi di sini! Ada DOWNdalam video itu yang kemudian saya mainkan golf ANY, tetapi secara fungsional identik.

Bahasa ini tidak memiliki konsep string atau karakter, jadi saya harus menunjukkan bahwa saya menggunakan nilai ASCII, yaitu output dimulai 97, 66, 67... 88, 89, 90, 10, 65, 98...

Berikut kode dalam format penyimpanan data TIS-100, untuk tujuan penilaian:

@5
ADD 25
L:MOV 27 ANY
SUB 1
JGZ L
MOV 25 ANY
JRO -1
@6
JRO 2
S:MOV 10 ANY
ADD 65
MOV ACC ANY
SUB 90
JEZ S
ADD 26
@9
MOV 32 ANY
ADD UP
L:MOV 0 ANY
SUB 1
JGZ L
@10
MOV UP ACC
ADD ANY
SUB 42
D:JEZ D
ADD 42
MOV ACC ANY

Penjelasan


apakah ini pertanyaan pertama dalam TIS-100 atau apa?
noɥʇʎԀʎzɐɹƆ

1
Saya telah menerapkan emulator TIS untuk TIO, jadi sekarang Anda dapat mencobanya secara online!
Phlarx

4

JavaScript ES6, 121 byte

_=>Array(51).fill('abcdefghijklmnopqrstuvwxyz').map((e,i)=>e.replace(/./g,(f,j)=>j==i|i+j==50?f.toUpperCase():f)).join`
`

Ini sangat panjang karena lebih masuk akal untuk mengubah kode alfabet daripada menggunakan panjang yang tidak masuk akal String.fromCharCodeuntuk menghasilkan karakter. Uji di bawah dengan cuplikan Stack, yang menggunakan ES5 yang didukung lebih baik dan di bawah.

f=function(){
  return Array(51).fill('abcdefghijklmnopqrstuvwxyz').map(function(e,i){
    return e.replace(/./g,function(f,j){
      return j==i|i+j==50?f.toUpperCase():f
    })
  }).join('\n')
}

// Polyfill for ES6-only fill()
Array.prototype.fill = Array.prototype.fill || function(val){
  for(i=0;i<this.length;i++){
    this[i] = val
  }
  return this
}

document.getElementById('p').innerText=f()
<pre id="p"></pre>


4

CJam, 23 byte

51{25-z~'{,97>'[2$+tN}/

Cobalah online di juru bahasa CJam .

Bagaimana itu bekerja

51{                  }/ e# For I from 0 to 50:
   25-                  e#   Compute J := I - 25.
                        e#   This maps [0 ... 50] to [-25 ... 25].
      z                 e#   Compute K := abs(J).
                        e#   This maps [-25 ... 25] to [25 ... 0 ... 25].
       ~                e#   Compute L := ~K = -(K + 1).
                        e#   This maps [25 ... 0 ... 25] to [-26 ... -1 ... -26].
        '{,             e#   Push ['\0' ... 'z'].
           97>          e#   Discard the first 97. Pushes ['a' ... 'z'].
              '[2$+     e#   Add L to '['. Pushes 'A' for -26, 'Z' for -1.
                   t    e#   Set ['a' ... 'z'][L] to '[' + L.
                    N   e#   Push a linefeed.

4

R, 78 70

M=replicate(26,c(letters,"\n"));diag(M)=LETTERS;cat(M,M[,25:1],sep="")

Ditingkatkan oleh @MickyT


2
Hampir identik dengan yang saya buat tetapi diletakkan di satu sisi. Saya menggunakan M=replicate(26,c(letters,"\n"))daripada matriks. Ini akan menghemat beberapa byte
MickyT

Hemat 1 byte dengan menggunakan write: tio.run/##K/r/…
JayCe

4

Perakitan Linux, 289

Sayangnya tidak bersaing dengan bahasa tingkat tinggi dan mungkin jauh dari optimal, tetapi cukup mudah. Jalankan menggunakan nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a(biner yang dihasilkan hanya berukuran 568 byte):

section .data
s:db 'abcdefghijklmnopqrstuvwxyz',10
section .text
global _start
_start:
mov esi,0
a:call c
inc esi
cmp esi,26
jne a
mov esi,24
b:call c
dec esi
jnz b
call c
mov eax,1
call d
c:mov ecx,s
sub byte [ecx+esi],32
mov eax,4
mov edx,27
d:mov ebx,1
int 80h
add byte [ecx+esi],32
ret

Tampaknya buang-buang ruang untuk mengkompilasi ini ke ELF (banyak nol yang membengkak di sana). Itu bisa jauh berkurang jika dilakukan sebagai program COM DOS. Saya kira itu kemudian bisa berjalan di dosbox di Linux :)
Ruslan

Saya tahu dan saya melakukan hal itu. Lihatlah postingan saya yang lain codegolf.stackexchange.com/a/53984/42642 :)
user2845840

Ya, melihatnya, membenarkannya. Tidak menyadari itu karena kamu juga.
Ruslan

4

perakitan x86 untuk DOS, 41 Bytes dikompilasi

Biner:

00000000  b9 e6 ff b3 61 b8 61 02  50 38 d8 75 02 24 df 88
00000010  c2 cd 21 58 40 3c 7b 75  ef b2 0a cd 21 41 79 02
00000020  43 43 4b 80 f9 19 75 dd  c3

Kode sumber, simpan sebagai "wave.asm", kompilasi dengan "nasm -f bin -o wave.com wave.asm" dan jalankan dengan "dosbox wave.com"

org 100h 
section .text
start:
mov cx,-26
mov bl,'a'
next_line:
mov ax, 0261h
next_char:
push ax
cmp al,bl
jnz lower_case
and al,255-32
lower_case:
mov dl,al
int 21h
pop ax
inc ax
cmp al,'z'+1
jnz next_char
mov dl,0ah
int 21h
inc cx
jns move_left
inc bx
inc bx
move_left:
dec bx
cmp cl,25
jnz next_line
ret

4

C #, 140 139 135 132

void f(){int d=1,i=0;var s="abcdefghijklmnopqrstuvwxyz\n";for(;i>=0;i+=d=i==25?-1:d)Console.Write(s.Replace(s[i],(char)(s[i]-32)));}

Diperluas

void f()
{
    int d = 1, i =0;
    var s = "abcdefghijklmnopqrstuvwxyz\n";
    for (; i >= 0; i += d = i == 25 ? -1 : d)
        Console.Write(s.Replace(s[i], (char)(s[i] - 32)));
}

Disimpan 1 byte berkat @ Gunther34567 menggunakan ternary, bukanif

Disimpan 4 byte kemudian bersarang terner itu di dalam loop dan memindahkan alfabet ke luar loop

Disimpan 3 byte menggabungkan deklarasi integer berkat @eatonphil


1
Anda bisa menghemat 1 byte dengan mengubah if(i==25)d=-1;ked=i==25?-1:d;
grabthefish

1
Anda dapat menyimpan 3 byte dengan mengubah var d=1ke int d=1,i.
eatonphil

3

Bash: 76 66 karakter

printf -va %s {a..z}
for c in {a..z} {y..a};{ echo ${a/$c/${c^}};}

Contoh dijalankan:

bash-4.3$ printf -va %s {a..z};for c in {a..z} {y..a};{ echo ${a/$c/${c^}};} | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

Seorang pengguna anonim menyarankan bahwa baris pertama tidak diperlukan sama sekali yang akan mengurangi jumlah byte menjadi 45.
Martin Ender

Menarik. Lalu dari mana alfabet akan muncul?
manatwork

Aku tidak bisa memberitahumu. Suntingan itu hanya menghapus printfpanggilan. Saya menolak hasil edit , sehingga Anda dapat mengujinya sendiri.
Martin Ender

Ya, saya melihat. (Situs memberi tahu saya tentang pengeditan dan nasibnya.) Karena tanpa baris ke-1 yang menempatkan alfabet dalam variabel a, baris ke-2 hanya dapat mencetak string kosong dari variabel a, saya tidak melihat resolusi selain menolaknya. :(
manatwork

3

Sed: 135 119 116 111 karakter

(109 kode karakter + 1 opsi baris perintah karakter + 1 input karakter.)

s/.*/abcdefghijklmnopqrstuvwxyz/
h;H;G;H;G;H;g;G
s/.{,28}/\u&/gp
s/$/\t/
:;s/(\w+\n?)\t(.*)/\t\2\1/;t
s/.*Z//

Contoh dijalankan:

bash-4.3$ sed -rf mexican.sed <<< '' | head
Abcdefghijklmnopqrstuvwxyz
aBcdefghijklmnopqrstuvwxyz
abCdefghijklmnopqrstuvwxyz
abcDefghijklmnopqrstuvwxyz
abcdEfghijklmnopqrstuvwxyz
abcdeFghijklmnopqrstuvwxyz
abcdefGhijklmnopqrstuvwxyz
abcdefgHijklmnopqrstuvwxyz
abcdefghIjklmnopqrstuvwxyz
abcdefghiJklmnopqrstuvwxyz

3

Javascript (ES6), 113 byte

c=-1;while(c++<50){console.log('abcdefghijklmnopqrstuvwxyz'.replace(/./g,(x,i)=>i==c|i+c==50?x.toUpperCase():x))}

110 byte

for(c=-1;c++<50;)console.log('abcdefghijklmnopqrstuvwxyz'.replace(/./g,(x,i)=>i==c|i+c==50?x.toUpperCase():x))

102 byte

Sekolah tua tidak terkalahkan kecuali kita akan memiliki operator jarak / fungsi / generator / apa pun di js

for(c=-1;c++<50;){for(s='',i=-1;i++<25;)s+=String.fromCharCode(i+(i==c|i+c==50?65:97));console.log(s)}

100 byte

Sayangnya Math.abs terlalu panjang

for(c=51;c--;){for(s='',i=26;i--;)s+=String.fromCharCode(c+i==25|c-i==25?90-i:122-i);console.log(s)}

96 94 byte

Meskipun saya sudah kalah dalam pemilihan tanpa penjelasan, saya melanjutkan perjuangan saya

for(c=-26;c++<25;){for(s='',i=26;i--;)s+=String.fromCharCode(c*c-i*i?122-i:90-i);console.log(s)}

Kami dapat memangkas beberapa byte dengan mengatur ulang instruksi loop:

for(c=-26;c++<25;console.log(s))for(s='',i=26;i--;s+=String.fromCharCode(c*c-i*i?122-i:90-i));

Tolong jelaskan downvotes. Outputnya salah?
shabunc

2
Mungkin karena Anda secara teknis memiliki beberapa jawaban dalam satu posting? Persetan kalau aku tahu, cukur yang bagus!
Sandy Gifford

Juga, saya pikir Anda dapat mencukur semi-colon terakhir itu
Sandy Gifford

Tidak, saya salah
Sandy Gifford

3

Perl - 95 64 byte

Mengambil keuntungan dari fakta \umembuat karakter berikutnya dicetak huruf besar dalam Perl.

for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}

Berkat manatwork karena telah menyimpan 31 byte dan memperbaikinya (kode saya sebelumnya tidak berfungsi.)


Yang \utampaknya bekerja dalam sampel terpisah, tetapi tidak dalam kode Anda. :( Semua karakter tinggal huruf kecil. Bisakah Anda menunjukkan kepada kami bagaimana kode Anda harus dieksekusi? (Saya memasukkannya ke dalam file kemudian memanggilnya perldengan nama file, tanpa switch.) Omong-omong, saya menggunakan perl5.20.2.
manatwork

By the way, tampaknya berfungsi ketika \udiikuti oleh surat untuk mengubah dalam string literal yang sama:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
manatwork

@Manatwork Aneh, itu berhasil ketika saya melakukannya. (Saya menggunakan 5.18.) Kode Anda berfungsi, dan mengurangi ukuran secara signifikan, jadi saya akan menggunakannya. Terima kasih!
ASCIIThenANSI

2

q (37 karakter)

Potongan pertama

@[.Q.a;;upper]'[(raze(|:\)til 26)_26]

@[.Q.a;;upper]@'x,1_reverse x:til 26selama 36 byte . Atau @[.Q.a;;.q.upper]@'x,1_|x:!26untuk 29 byte di K4.
streetster
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.