Tạo nên làn sóng Mexico


64

Trong càng ít byte càng tốt, hãy viết chương trình hoặc hàm xuất ra các phần sau:

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

Một dòng mới được cho phép. Bạn có thể tìm thấy một tài liệu tham khảo Python chưa được chỉnh sửa ở đây .


1
Có an toàn để giả định đầu vào là không bao giờ viết hoa?
Winny

40
@Winny Không có đầu vào. Đầu ra là cố định. Trong thực tế, đó là ý tưởng chung của các câu hỏi phức tạp kolmogorov .
Chris Jester-Young

Điều này đã có trong danh sách HNQ một cách nhất quán kể từ khi bạn đăng nó. Công việc tốt đẹp. :)
Alex A.

1
Bạn có thể tìm thấy một triển khai Python không tham chiếu ở đây. -> liên kết bị hỏng
Franck Dernoncourt

Quan điểm của Franck Dernoncourt vẫn đứng vững. Liên kết bị hỏng.
Jonathan Frech

Câu trả lời:


64

Bình thường, 12 byte

V+Gt_GXGNrN1

Trình diễn, thuyết trình.

Trong Pyth, Glà bảng chữ cái chữ thường. +Gt_Gabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba, nhân vật cần được xếp trên mỗi hàng.

Vthiết lập một vòng lặp for trên chuỗi này, với Ntư cách là biến vòng lặp.

Trong cơ thể, XGNrN1là một chức năng dịch chuỗi. Xdịch G, bảng chữ cái, thay thế Nbằng rN1, phiên bản chữ hoa của N. r ... 1là hàm chữ hoa. Điều này cho đầu ra mong muốn.


31
Tôi có phải là người duy nhất thấy buồn cười khi bảng chữ cái viết thường được thể hiện bằng một chữ cái viết hoa không?
Alex A.

31

C, 73

Đôi khi cách tiếp cận đơn giản nhất là tốt nhất: in từng ký tự một. điều này đánh bại rất nhiều ngôn ngữ mà nó thực sự không nên.

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

giải trình

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

Đẹp và đơn giản, tôi nghĩ vậy.


Điều đó thực sự thông minh. Vòng lặp không kiểm soát!
Alex Van Liew

20

Brainfuck (8 bit), 231 byte

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

Ok, vậy nó sẽ không bao giờ là ngắn nhất, nhưng đó là phần tham gia ... đúng không?!

Hãy thử ở đây (đảm bảo đánh dấu vào 'Bộ nhớ động')


5
Nếu mục tiêu là mã dài nhất có thể mà vẫn hoàn toàn không thể giải mã được đối với lập trình viên trung bình của con người
Caleb

7
@Caleb Tôi nghĩ rằng mã BF là một số mã dễ hiểu nhất trong sự tồn tại. Đó là chương trình / chức năng thật khó hiểu. Mọi người nên biết rằng >dịch chuyển một ô sang phải, chẳng hạn.
mbomb007

4
Luôn luôn yêu thích các câu trả lời BF;)
RedPanda

Bạn đã không viết mã này trực tiếp bây giờ phải không?
BAR

6
Tôi xấu hổ khi nói rằng tôi đã làm!
Jarmex

13

Nhị phân MS-DOS, 61

Mã này không phải được biên dịch, nó sẽ chạy trong MS-DOS nếu bạn viết nó vào một tệp có tên là wave.com. Mã trong hex:

ba3d0189d7b91a00b061aa404975fbb00aaab00daab024aa31f6e8130046
83fe1a75f7be1800e807004e75fae80100c389d3802820b409cd21800020
c3

Hoặc, nếu bạn thích thứ gì đó dễ đọc hơn, đây là cách sản xuất nó bằng debug.exe (dòng trống sau mã là quan trọng):

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 ký tự

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

Chạy mẫu:

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. Tôi đã thử một vài ý tưởng ngu ngốc để tối ưu hóa việc tái sử dụng của e, nhưng tất nhiên là không đúng cách. Cảm ơn bạn, @Ventero.
manatwork

10

Matlab, 60 58 54 byte

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

Cảm ơn Dennis Jaheruddin vì đã tiết kiệm cho tôi 4 byte.


Ở đây bạn cũng có thể sử dụng thủ thuật điển hình để thay thế char(x)bằng cách [x '']lưu một byte.
Dennis Jaheruddin

Cũng end-1là một cách khá dài dòng để viết 25!
Dennis Jaheruddin

@DennisJaheruddin Rất tiếc. Cảm ơn cả hai! Trên thực tế, [x '']mánh khóe không bình thường chút nào đối với tôi. Nhưng bây giờ tôi nhớ đã nhìn thấy nó trong một trong những anwers của bạn :-)
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)),\+!.

Lạm dụng quay lui để lặp ...


8

Haskell 100 89 88 byte

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

Hàm trợ giúp lambda \(h,c:t)có một cặp danh sách các giá trị ascii và nối cả hai, nhưng với giá trị đầu tiên của danh sách thứ hai được viết hoa. Hàm chính phân tách bảng chữ cái chữ thường (được đưa ra trong ascii, 97..122) tại mọi vị trí 0,..,24,25,24,..,0và gọi lambda trong mỗi bước. Trước khi in, mỗi giá trị được chuyển thành ký tự tương ứng.


Đây là cách tiếp cận của tôi: codegolf.stackexchange.com/a/53895/3852
Lynn

8

Scala 110 109 ký tự

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 trong biểu tượng Scala is được sử dụng? Ý tôi là không => nhưng ⇒ ???
shabunc

2
Cả hai đều hợp lệ :)
gilad hoch

có thể cạo 1 byte nếu tôi thay đổi foreach printlnđến mkString("\n"), và đầu ra một chuỗi như giá trị trả về thay vì in nó lên màn ảnh
Gilad hoch

7

SQL (postgreSQL), 107 101

Tạo là chuỗi từ -25 đến 25 và sử dụng giá trị tuyệt đối để thay thế các ký tự bằng phiên bản chữ hoa của chúng. Cảm ơn manatwork cho mẹo về toán tử @.

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

Bạn biết rằng PostgreSQL có một @nhà điều hành?
manatwork

@manatwork không phải tôi không biết điều đó, nhưng bây giờ tôi cảm ơn
MickyT

7

Haskell, 81 byte

Đếm byte theo cách @nimi đã làm; flà một hành động IO in ra đầu ra mong muốn.

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

Rất thanh lịch. Không biết rằng các vệ sĩ có thể được sử dụng nội tuyến.
dùng2845840


6

MATLAB - 58 byte

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

Tương tự như giải pháp của Luis Mendo , nhưng sử dụng khả năng phát sóng củabsxfun .

Lợi dụng rằng trong ASCII, sự khác biệt giữa ký tự viết hoa và chữ thường là cách nhau chính xác 32 giá trị, trước tiên chúng tôi tạo các chữ cái viết thường từ mã ASCII 97 đến 122, sau đó là mã ASCII từ chữ thường đến chữ thường tạo một ma trận 51 hàng chứa 26 mã ASCII từ 97 đến 122. Do đó, mỗi hàng của ma trận này chứa một chuỗi các giá trị từ 97 đến 122. Tiếp theo, chúng ta tạo một ma trận khác trong đó mỗi hàng thứ i của ma trận này chứa một 32 trong cột thứ i . 26 hàng đầu tiên của ma trận này có mẫu này, về cơ bản là ma trận danh tính nhân với 32. Hàmeyetạo một ma trận danh tính cho bạn. 25 hàng cuối cùng của ma trận này là ma trận danh tính tỷ lệ xoay 90 độ.

Bằng cách lấy ma trận danh tính có trọng số tùy chỉnh này và trừ nó với ma trận đầu tiên, sau đó chuyển đổi mã ASCII kết quả thành các ký tự, chuỗi "Mũ Mexico" mong muốn được tạo ra.

Chạy ví dụ

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

Bạn cũng có thể chạy ví dụ này bằng môi trường Octave trực tuyến của IDEone. Octave về cơ bản là MATLAB nhưng miễn phí: http://ideone.com/PknMe0


1
rot90-- suy nghĩ thấu đáo!
Luis Mendo

char (những người (26,1) * [97: 122] -eye (26) * 32)
dùng3528438

@ user3528438 làm thế nào để bạn xử lý nửa thứ hai? Mã chỉ tính nửa đầu của sóng. Bạn cần tính toán phần còn lại.
rayryeng - Tái lập Monica

@ user3528438 - Cũng lưu ý rằng những gì bạn viết về cơ bản là nửa đầu câu trả lời của Luis Mendo. Tôi quyết định viết một cái gì đó hơi khác một chút để đạt được điều tương tự :)
rayryeng - Tái lập Monica

@rayryeng yeah, điều đó làm tôi ngạc nhiên rằng nửa sau khó xử lý hơn và cũng là cách tránh trung tâm trùng lặp.
dùng3528438


5

Perl, 51 byte

Mã 50 byte + 1 tham số dòng lệnh

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

Có thể được sử dụng như sau:

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

Hoặc trực tuyến tại đây (lưu ý tôi phải thêm ,"\n"vào điều này vì tôi không thể thêm -l arg).


Phương pháp dài hơn nhiều Trước khi phiên bản rút gọn ở trên, tôi đã thử một phương pháp khác mà kết quả là khá chunky. Tôi đã để nó bên dưới dù sao để tham khảo.

Mã 86 byte + 1 byte dòng lệnh 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/

Đầu tiên Perl tôi đã từng chơi golf đúng cách vì vậy tôi tưởng tượng có rất nhiều điều có thể được thực hiện với nó - vui lòng đề xuất cải tiến!

Có thể được sử dụng như sau:

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/'

Hoặc trực tuyến tại đây (lưu ý tôi phải thêm. "\ N" vào đây vì tôi không thể thêm -l arg).

Giải trình

Cách tiếp cận chung là sử dụng sự thay thế regex để làm tất cả các công việc khó khăn. Chúng tôi bắt đầu với:

0abcdefghijklmnopqrstuvwxyz1

Điều này khớp (([A-Z])|0)(\D)và được thay thế bằng \U\3(\ U thay đổi thành chữ hoa) để cung cấp:

Abcdefghijklmnopqrstuvwxyz1

Từ thời điểm này trở đi, chúng tôi tiếp tục khớp với regex tương tự và thay thế bằng \L\2\U\3:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

Bây giờ sự thay thế thứ hai của regex khớp, (.)((?2))(1)(giống như (.)([A-Z])(1)). Chúng tôi thay thế bằng \U\4\6\L\5để cung cấp:

abcdefghijklmnopqrstuvwxY1z

Điều này tiếp tục khớp và thay thế cho đến khi chúng tôi đạt được:

A1bcdefghijklmnopqrstuvwxyz

và không có trận đấu regex nào nữa.

Tại mỗi điểm trong vòng lặp, chúng tôi sẽ loại bỏ '1' và in.


5

PHP 87 71 69 byte

Không phải là ngắn nhất, nhưng nó hoạt động như dự định.
Cảm ơn @manatwork về một số mẹo để giảm kích thước của nó đi rất nhiều.
Và nhờ @Blackhole , kích thước đã giảm 2 byte.

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

Không chính xác đẹp, nhưng hoạt động.


1
Keo dán mặc định cho một chuỗi rỗng. Tài liệu PHP - về join()tham số đầu tiên.
manatwork

1
Chỉ mục chuỗi đó không thực sự tối ưu: $i<25?$i:25-($i-25)25-abs($i-25)
manatwork

1
Cho rằng bạn đã bỏ qua các cảnh báo (đối với các hằng số a và z không xác định), bạn có thể bỏ qua một cảnh báo khác cho $ i chưa được khởi tạo. Trong khi chạm vào $ i, di chuyển số gia của nó vào chuỗi con. for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(Chỉ cần bọc dòng mà tôi đã sử dụng Mã
↵↵

@manatwork Cảm ơn rất nhiều! Tôi hoàn toàn quên rằng \nđã ở đó. Việc khởi tạo $ibị bỏ lại như một tai nạn. Và cảm ơn bạn rất nhiều cho 25-abs($i-25). Tôi sẽ không đến đó một mình.
Ismael Miguel

2
forVòng lặp của bạn có thể được tối ưu hóa: for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2 byte).
Hố đen

5

PowerShell 3.0, 82 byte

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

5

Kiến trúc TIS Node Kiểu T21 - 216 215 byte

Xem nó trong hành động ở đây! Có một DOWNvideo mà sau đó tôi đã chơi ANY, nhưng nó giống hệt nhau về mặt chức năng.

Ngôn ngữ này không có khái niệm về chuỗi hoặc ký tự, vì vậy tôi nên chỉ ra rằng tôi đang sử dụng các giá trị ASCII, tức là đầu ra bắt đầu 97, 66, 67... 88, 89, 90, 10, 65, 98...

Đây là mã theo định dạng lưu dữ liệu của TIS-100, cho mục đích ghi điểm:

@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

Giải trình


Đây có phải là câu hỏi đầu tiên trong TIS-100 hay không?
noɥʇʎԀʎzɐɹƆ

1
Tôi đã triển khai trình giả lập TIS cho TIO, vì vậy bây giờ bạn có thể dùng thử trực tuyến!
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`
`

Điều này thực sự dài bởi vì nó có ý nghĩa hơn để mã hóa bảng chữ cái hơn là sử dụng thời gian dài vô lý String.fromCharCodeđể tạo ra các ký tự. Kiểm tra nó bên dưới với đoạn mã Stack, sử dụng ES5 được hỗ trợ tốt hơn và bên dưới.

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}/

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

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="")

Được cải thiện bởi @MickyT


2
Gần giống với một cái tôi nghĩ ra nhưng đặt sang một bên. Tôi đã sử dụng M=replicate(26,c(letters,"\n"))chứ không phải là một ma trận. Nó sẽ giúp bạn tiết kiệm một vài byte
MickyT

Lưu 1 byte bằng cách sử dụng write: tio.run/##K/r/ Kẻ
JayCe

4

Linux hội, 289

Thật không may, không cạnh tranh với các ngôn ngữ cấp cao và có thể xa tối ưu, nhưng khá đơn giản. Chạy nó bằng cách sử dụng nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a(nhị phân kết quả chỉ là 568 byte lớn):

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

Có vẻ lãng phí không gian để biên dịch điều này với ELF (rất nhiều số không đầy hơi ở đó). Nó có thể được giảm nhiều nếu được thực hiện như một chương trình COM của DOS. Tôi đoán nó có thể chạy trong dosbox trong Linux :)
Ruslan

Tôi biết và tôi đã làm điều đó. Nhìn vào bài đăng khác của tôi codegolf.stackexchange.com/a/53984/42642 :)
user2845840

Vâng, nhìn thấy nó, nâng cao nó. Không nhận thấy đó là bạn quá mặc dù.
Ruslan

4

lắp ráp x86 cho DOS, 41 byte được biên dịch

Nhị phân:

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

Mã nguồn, lưu dưới dạng "wave.asm", biên dịch với "nasm -f bin -o wave.com wave.asm" và chạy với "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)));}

Mở rộng

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)));
}

Đã lưu 1 byte nhờ @ Gunther34567 bằng cách sử dụng một ternary thay vìif

Đã lưu 4 byte sau đó lồng nhau vào bên trong vòng lặp và di chuyển bảng chữ cái ra bên ngoài vòng lặp

Đã lưu 3 byte kết hợp khai báo số nguyên nhờ @eatonphil


1
bạn có thể tiết kiệm 1 byte bằng cách thay đổi if(i==25)d=-1;thànhd=i==25?-1:d;
lấy từ

1
Bạn có thể lưu 3 byte bằng cách thay đổi var d=1thành int d=1,i.
eatonphil

3

Bash: 76 66 ký tự

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

Chạy mẫu:

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

Một người dùng ẩn danh cho rằng dòng đầu tiên hoàn toàn không cần thiết, điều này sẽ làm giảm số byte xuống còn 45.
Martin Ender

Hấp dẫn. Sau đó, bảng chữ cái sẽ xuất hiện từ đâu?
manatwork

Tôi không thể nói với bạn. Việc chỉnh sửa chỉ đơn giản là loại bỏ printfcuộc gọi. Tôi đã từ chối chỉnh sửa , vì vậy bạn có thể tự kiểm tra nó.
Martin Ender

Vâng tôi thấy. (Trang web đã thông báo cho tôi về chỉnh sửa và số phận của nó.) Vì không có dòng thứ 1 đặt bảng chữ cái trong biến a, dòng thứ 2 chỉ có thể in các chuỗi trống từ biến a, tôi không thấy giải pháp nào khác ngoài việc từ chối nó. :(
manatwork

3

Trầm tích: 135 119 116 111 ký tự

(109 mã ký tự + 1 tùy chọn dòng lệnh + 1 ký tự nhập.)

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//

Chạy mẫu:

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

Trường học cũ là vô địch trừ khi chúng ta có nhà điều hành phạm vi / chức năng / trình tạo / bất cứ điều gì trong 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

Math.abs không may mắn quá dài

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

Mặc dù tôi đã bị hạ bệ mà không có lời giải thích, tôi vẫn tiếp tục cuộc đấu tranh của mình

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

Chúng ta có thể tắt một vài byte bằng cách sắp xếp lại các hướng dẫn vòng lặp:

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

Hãy giải thích downvote. Đầu ra có sai không?
shabunc

2
Có lẽ bởi vì về mặt kỹ thuật bạn có nhiều câu trả lời trong một bài viết? Chết tiệt, nếu tôi biết, cạo râu tốt, mặc dù!
Sandy Gifford

Ngoài ra, tôi nghĩ rằng bạn có thể cạo sạch dấu chấm phẩy cuối cùng đó
Sandy Gifford

Không, tôi đã không chính xác
Sandy Gifford

3

Perl - 95 64 byte

Tận dụng lợi thế của thực tế \ulàm cho nhân vật tiếp theo được in một chữ hoa trong Perl.

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

Cảm ơn manatwork đã lưu 31 byte và sửa nó (mã trước của tôi không hoạt động.)


Điều đó \udường như làm việc trong một mẫu riêng biệt, nhưng không phải trong mã của bạn. :( Tất cả các ký tự ở dạng chữ thường. Bạn có thể chỉ cho chúng tôi cách mã của bạn được thực thi không? (Tôi đặt nó trong một tệp rồi gọiperl chuyển tên tệp, không có công tắc.) Nhân tiện, tôi sử dụng perl5.20.2.
manatwork

Nhân tiện, nó dường như hoạt động khi \u được theo sau bởi chữ cái để biến đổi trong cùng một chuỗi theo nghĩa đen:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
manatwork

@manatwork Lạ thật, nó hoạt động khi tôi làm việc đó. (Tôi sử dụng 5.18.) Mã của bạn hoạt động và nó giảm kích thước đáng kể, vì vậy tôi sẽ sử dụng nó. Cảm ơn!
ASCIIThenANSI

2

q (37 ký tự)

Một vết cắt đầu tiên

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

@[.Q.a;;upper]@'x,1_reverse x:til 26cho 36 byte . Hoặc @[.Q.a;;.q.upper]@'x,1_|x:!26cho 29 byte trong K4.
streetster
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.