ทำให้คลื่นลูกเม็กซิกัน


64

ในสองสามไบต์ให้มากที่สุดให้เขียนโปรแกรมหรือฟังก์ชั่นที่ให้ผลลัพธ์ต่อไปนี้:

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

บรรทัดใหม่ต่อท้ายได้รับอนุญาต คุณสามารถค้นหาการใช้งาน Python ที่ไม่ได้อ้างอิงได้ที่นี่


1
จะปลอดภัยหรือไม่ถ้าสมมติว่าอินพุตไม่เป็นตัวพิมพ์ใหญ่ใช่หรือไม่
Winny

40
@ Winny ไม่มีอินพุต เอาท์พุทได้รับการแก้ไข ในความเป็นจริงนั่นเป็นความคิดทั่วไปของคำถามที่ซับซ้อน kolmogorov
Chris Jester-Young

สิ่งนี้อยู่ในรายการ HNQ อย่างสม่ำเสมอตั้งแต่คุณโพสต์ ทำได้ดีมาก :)
Alex A.

1
คุณสามารถค้นหาการใช้งาน Python ที่ไม่ได้อ้างอิงได้ที่นี่ -> ลิงก์เสีย
Franck Dernoncourt

ประเด็นของ Franck Dernoncourt ยังคงยืนอยู่ ลิงก์เสีย
Jonathan Frech

คำตอบ:


64

Pyth, 12 ไบต์

V+Gt_GXGNrN1

สาธิต.

ใน Pyth Gเป็นอักษรตัวพิมพ์เล็ก +Gt_Gคือabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcbaอักขระที่ต้องเป็นตัวพิมพ์ใหญ่ในแต่ละแถว

Vเซ็ต a สำหรับลูปบนสตริงนี้โดยใช้Nเป็นตัวแปร loop

ในร่างกายXGNrN1เป็นฟังก์ชั่นการแปลสตริง XแปลGอักษรแทนที่Nด้วยรุ่นพิมพ์ใหญ่ของrN1 เป็นฟังก์ชั่นตัวพิมพ์ใหญ่ สิ่งนี้จะให้ผลลัพธ์ที่ต้องการNr ... 1


31
ฉันเป็นคนเดียวที่พบว่าเป็นเรื่องตลกหรือไม่ที่ตัวอักษรตัวเล็กเป็นตัวอักษรตัวพิมพ์ใหญ่?
Alex A.

31

C, 73

บางครั้งวิธีที่ง่ายที่สุดดีที่สุด: พิมพ์ตัวอักษรทุกตัวทีละตัว ภาษานี้เต้นได้หลายภาษาจริง ๆ ไม่ควร

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

คำอธิบาย

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 ไบต์

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

ดีและเรียบง่ายฉันคิดว่า


มันฉลาดจริงๆ วนคลี่ออก!
Alex Van Liew

20

Brainfuck (8 บิต), 231 ไบต์

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

ตกลงดังนั้นมันจะไม่สั้นที่สุด แต่มีส่วนร่วมที่นับ ... ใช่ไหม!

ลองที่นี่ (ตรวจสอบให้แน่ใจว่าทำเครื่องหมาย 'หน่วยความจำแบบไดนามิก')


5
หากเป้าหมายคือรหัสที่ยาวที่สุดเท่าที่จะเป็นไปได้นั้นยังไม่สามารถถอดรหัสได้โดยโปรแกรมเมอร์ระดับธรรมดา…
Caleb

7
@Caleb ฉันคิดว่ารหัส BF เป็นรหัสที่ง่ายที่สุดที่จะเข้าใจว่ามีอยู่จริง มันเป็นโปรแกรม / ฟังก์ชั่นที่เข้าใจยาก ทุกคนควรรู้ว่า>การเลื่อนเซลล์หนึ่งไปทางขวาเช่น
mbomb007

4
ต้องรักคำตอบของ BF เสมอ)
RedPanda

คุณไม่ได้เขียนรหัสนี้โดยตรงตอนนี้คุณ?
BAR

6
ฉันรู้สึกละอายที่จะบอกว่าฉันทำ!
Jarmex

13

MS-DOS Binary, 61

รหัสนี้ไม่จำเป็นต้องรวบรวมมันจะทำงานใน MS-DOS ถ้าคุณเขียนมันลงในไฟล์ที่เรียกว่า wave.com รหัสในฐานสิบหก:

ba3d0189d7b91a00b061aa404975fbb00aaab00daab024aa31f6e8130046
83fe1a75f7be1800e807004e75fae80100c389d3802820b409cd21800020
c3

หรือหากคุณต้องการสิ่งที่อ่านง่ายกว่านี่คือวิธีการสร้างโดยใช้ debug.exe (บรรทัดว่างหลังจากโค้ดมีความสำคัญ):

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

ทับทิม: 71 68 65 63 ตัวอักษร

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

วิ่งตัวอย่าง:

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 ฉันลองใช้ความคิดที่เป็นใบ้สองสามข้อเพื่อปรับการใช้ซ้ำของ e ให้เหมาะสม แต่แน่นอนไม่ใช่วิธีที่ถูกต้อง ขอบคุณ @Ventero
จัดการ

10

Matlab, 60 58 54 ไบต์

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

ขอบคุณDennis Jaheruddin ที่ช่วยฉัน 4 ไบต์


ที่นี่คุณสามารถใช้เคล็ดลับทั่วไปเพื่อแทนที่char(x)ด้วย[x '']เพื่อบันทึกไบต์
Dennis Jaheruddin

ยังend-1เป็นวิธีที่ค่อนข้าง verbose ในการเขียน 25!
Dennis Jaheruddin

@DennisJaheruddin โอ๊ะโอ ขอบคุณสำหรับทั้งสอง! ที่จริงแล้ว[x '']เคล็ดลับนั้นไม่ปกติสำหรับฉันเลย แต่ตอนนี้ฉันจำได้ว่าเห็นมันในหนึ่งใน anwers ของคุณ :-)
Luis Mendo

8

SWI-Prolog ขนาด 136 ไบต์

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)),\+!.

กำลังใช้การย้อนรอยย้อนกลับเพื่อวนซ้ำ ...


8

Haskell 100 89 88 ไบต์

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

ฟังก์ชันตัวช่วยแลมบ์ดา\(h,c:t)ใช้คู่ของรายการค่า ascii และเชื่อมทั้งคู่เข้าด้วยกัน แต่ด้วยค่าแรกของรายการที่สองที่เป็นตัวพิมพ์ใหญ่ ฟังก์ชั่นหลักจะแยกตัวอักษรตัวเล็ก (ให้ใน ascii, 97..122) ทุกตำแหน่ง0,..,24,25,24,..,0และเรียกแลมบ์ดาในทุกขั้นตอน ก่อนพิมพ์แต่ละค่าจะเปลี่ยนเป็นอักขระที่เกี่ยวข้อง


นี่คือวิธีการของฉัน: codegolf.stackexchange.com/a/53895/3852
ลินน์

8

สกาล่า110 109 ตัวละคร

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 ใน Scala ⇒หรือไม่ ฉันหมายถึงไม่ => แต่⇒ ???
shabunc

2
ใช้ได้ทั้งคู่ :)
gilad hoch

สามารถโกน 1 ไบต์ถ้าผมเปลี่ยนforeach printlnไปmkString("\n")และเอาท์พุทสตริงเป็นค่าตอบแทนแทนการพิมพ์ไปที่หน้าจอ
Gilad hoch

7

SQL (postgreSQL), 107 101

สร้างเป็นชุดจาก -25 ถึง 25 และใช้ค่าสัมบูรณ์เพื่อแทนที่อักขระด้วยเวอร์ชันตัวพิมพ์ใหญ่ ขอบคุณ manatwork สำหรับคำแนะนำเกี่ยวกับตัวดำเนินการ @

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

คุณรู้ไหมว่า PostgreSQL มี@โอเปอเรเตอร์หรือไม่?
จัดการ

@manatwork Nope ผมไม่ทราบว่า แต่ตอนนี้ฉันทำขอบคุณ
MickyT

7

Haskell, 81 ไบต์

นับจำนวนไบต์ตามที่ @nimi ทำ fเป็นการกระทำของ IO ที่พิมพ์เอาต์พุตที่ต้องการ

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

สง่างามมาก. ไม่ทราบว่าสามารถใช้ยามได้แบบอินไลน์
2845840

6

Pyth - 18 17 ไบต์

รอบแรกอาจจะสั้นกว่านี้มาก ใช้Xเพื่อทดแทนและr1ใช้ประโยชน์

V+KU26t_KXGNr@GN1

ลองมันออนไลน์ได้ที่นี่


6

MATLAB - 58 ไบต์

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

คล้ายกับโซลูชันของ Luis Mendobsxfunแต่ใช้ความสามารถในการกระจายเสียงของ

การใช้ประโยชน์จากใน ASCII ความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็กคือ 32 ค่าห่างจากกันเราจะสร้างตัวอักษรตัวพิมพ์เล็กจาก ASCII รหัส 97 ถึง 122 ซึ่งเป็นรหัส ASCII จากตัวพิมพ์เล็ก a ถึงตัวพิมพ์เล็ก z ตามด้วยความเคารพ สร้างเมทริกซ์ 51 แถวที่มีรหัส ASCII 26 จาก 97 122 ดังนั้นแถวของเมทริกซ์นี้ในแต่ละมีลำดับตัวเลขของค่าจาก 97 122 ถัดไปเราจะสร้างเมทริกซ์อีกซึ่งแต่ละฉันTHแถวของเมทริกซ์นี้มี 32 ในฉันTHคอลัมน์ 26 แถวแรกของเมทริกซ์นี้มีรูปแบบนี้ซึ่งเป็นเมทริกซ์เอกลักษณ์คูณด้วย 32 ฟังก์ชันeyeสร้างเมทริกซ์เอกลักษณ์สำหรับคุณ 25 แถวสุดท้ายของเมทริกซ์นี้คือเมทริกซ์เอกลักษณ์ที่ปรับสัดส่วนหมุน 90 องศา

ด้วยการใช้เมทริกซ์เอกลักษณ์ถ่วงน้ำหนักที่กำหนดเองนี้และลบสิ่งนี้ด้วยเมทริกซ์แรกจากนั้นแปลงรหัส ASCII ผลลัพธ์เป็นอักขระลำดับที่ต้องการ "Mexican Hat"

ตัวอย่าง Run

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

คุณยังสามารถรันตัวอย่างนี้โดยใช้สภาพแวดล้อมอ็อกเทฟออนไลน์ของ IDEone ระดับแปดเสียงเป็นหลัก MATLAB แต่ไม่เสียค่าใช้จ่าย: http://ideone.com/PknMe0


1
rot90- คิดดี!
Luis Mendo

ถ่าน (ตัว (26,1) * [97: 122] -eye (26) * 32)
user3528438

@ user3528438 คุณจัดการครึ่งหลังอย่างไร รหัสคำนวณเพียงครึ่งแรกของคลื่น คุณต้องคำนวณที่เหลือ
rayryeng

@ user3528438 - โปรดทราบว่าสิ่งที่คุณเขียนนั้นเป็นเพียงครึ่งแรกของคำตอบของ Luis Mendo ฉันตัดสินใจที่จะเขียนสิ่งที่แตกต่างกันเล็กน้อยเพื่อให้บรรลุในสิ่งเดียวกัน :)
rayryeng

@rayryeng ใช่มันทำให้ฉันประหลาดใจว่าช่วงครึ่งหลังนั้นยากที่จะจัดการและวิธีการหลีกเลี่ยงการซ้ำซ้อนกลาง
user3528438

5

J, 31 23 ไบต์

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

บันทึก 8 ไบต์ด้วย @Mauris

ลองออนไลน์ได้ที่นี่


ฉันจะได้ 23: u:|:(97+i.26)-32*=|i:25(monad =มีประโยชน์จริง ๆ ที่นี่!)
Lynn

@Mauris ขอบคุณฉันไม่ได้คิดที่จะใช้ monad =ที่นี่ มันเป็นเรื่องดีมาก!
randomra

5

Perl, 51 ไบต์

50 ไบต์รหัส + 1 ไบต์พารามิเตอร์บรรทัดคำสั่ง

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

สามารถใช้ดังนี้:

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

หรือออนไลน์ที่นี่ (โปรดทราบฉันต้องเพิ่ม,"\n"ในสิ่งนี้เนื่องจากฉันไม่สามารถเพิ่ม -l arg)


วิธีที่ยาวกว่ามาก ก่อนที่เวอร์ชั่นที่ย่อลงด้านบนฉันลองใช้วิธีอื่นซึ่งจบลงด้วยความอ้วน ฉันได้ทิ้งไว้ด้านล่างแล้วสำหรับการอ้างอิง

86 ไบต์รหัส + 1 บรรทัดคำสั่งไบต์หาเรื่อง

$_=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 ครั้งแรกฉันเคยเล่นกอล์ฟอย่างถูกต้องดังนั้นฉันจึงคิดว่ามันมีหลายสิ่งที่สามารถทำได้ด้วย - โปรดแนะนำการปรับปรุง!

สามารถใช้ดังนี้:

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

หรือออนไลน์ที่นี่ (โปรดทราบว่าฉันต้องเพิ่ม "\ n" ในส่วนนี้เนื่องจากฉันไม่สามารถเพิ่ม -l arg)

คำอธิบาย

วิธีการทั่วไปคือการใช้การทดแทน regex เพื่อทำงานหนักทั้งหมด เราเริ่มด้วย:

0abcdefghijklmnopqrstuvwxyz1

การจับคู่นี้(([A-Z])|0)(\D)และถูกแทนที่ด้วย\U\3(\ U เปลี่ยนเป็นตัวพิมพ์ใหญ่) เพื่อให้:

Abcdefghijklmnopqrstuvwxyz1

จากจุดนี้เป็นต้นไปเรายังคงจับคู่ regex เดียวกันและแทนที่ด้วย\L\2\U\3:

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

ตอนนี้การสลับที่สองของการแข่งขัน regex (.)((?2))(1)(ซึ่งก็เหมือนกับ(.)([A-Z])(1)) เราแทนที่ด้วย\U\4\6\L\5การให้:

abcdefghijklmnopqrstuvwxY1z

สิ่งนี้ยังคงจับคู่และแทนที่จนกว่าจะถึง:

A1bcdefghijklmnopqrstuvwxyz

และไม่มีการแข่งขัน regex อีกต่อไป

ในแต่ละจุดในลูปเราจะตัด '1' และพิมพ์ออกมา


5

PHP, 87 71 69 ไบต์

ไม่ใช่อันที่สั้นที่สุด แต่ทำงานได้ตามที่ตั้งใจไว้
ขอบคุณ@manatworkสำหรับเคล็ดลับในการลดขนาดลงให้มาก
และด้วย@Blackholeทำให้ขนาดลดลง 2 ไบต์

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

ไม่ค่อยสวยเท่าไหร่ แต่ใช้ได้


1
“ กาวเริ่มต้นเป็นสตริงว่าง” - เอกสารประกอบ PHP เกี่ยวกับjoin()พารามิเตอร์แรกของ
จัดการ

1
ตัวห้อยสตริงนั้นไม่เหมาะสมที่สุด: $i<25?$i:25-($i-25)25-abs($i-25)
จัดการ

1
เนื่องจากคุณไม่สนใจคำเตือน (สำหรับค่าคงที่และ a ที่ยังไม่ได้กำหนด) คุณสามารถเพิกเฉยต่อคำเตือนสำหรับ $ i ที่ไม่ได้กำหนดค่าเริ่มต้น ในขณะที่แตะที่ $ i ให้ย้ายส่วนเพิ่มไปยังตัวห้อยสตริง for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(ห่อบรรทัดที่ฉันใช้“ ↵” ในรหัส)
manatwork

@ การจัดการขอบคุณมาก! ฉันลืมไปเลยว่า\nอยู่ตรงนั้น การเริ่มต้นของ$iถูกปล่อยให้เป็นอุบัติเหตุ 25-abs($i-25)และขอขอบคุณมากสำหรับ ฉันจะไม่ไปที่นั่นด้วยตัวเอง
Ismael Miguel

2
forลูปของคุณสามารถปรับให้เหมาะสม: for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2 ไบต์)
Blackhole


5

TIS Node Type T21 Architecture - 216 215 ไบต์

ดูการทำงานจริงได้ที่นี่! มีDOWNวิดีโอในนั้นที่ฉันเล่นกอล์ฟในภายหลังANYแต่มันก็มีประโยชน์เหมือนกัน

ภาษานี้ไม่มีแนวคิดเกี่ยวกับสตริงหรืออักขระดังนั้นฉันควรชี้ให้เห็นว่าฉันใช้ค่า ASCII นั่นคือเอาต์พุตเริ่มต้น97, 66, 67... 88, 89, 90, 10, 65, 98...

นี่คือรหัสในรูปแบบของบันทึกข้อมูลของ TIS-100 เพื่อจุดประสงค์ในการให้คะแนน:

@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

คำอธิบาย


นี่เป็นคำถามแรกใน TIS-100 หรือเปล่า
noɥʇʎԀʎzɐɹƆ

1
ฉันได้ติดตั้งตัวจำลอง TIS สำหรับ TIO ดังนั้นตอนนี้คุณสามารถลองออนไลน์ได้!
Phlarx

4

JavaScript ES6, 121 ไบต์

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

นี่เป็นเรื่องที่ยาวมากเพราะมันสมเหตุสมผลกว่าการใช้ตัวอักษรที่ยากกว่าการใช้ความยาวอย่างไร้เหตุผลString.fromCharCodeในการสร้างตัวละคร ทดสอบด้านล่างด้วยส่วนย่อยของกองซึ่งใช้ ES5 ที่ดีกว่าและต่ำกว่า

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 ไบต์

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

ลองใช้ออนไลน์ในล่าม CJam

มันทำงานอย่างไร

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

ปรับปรุงโดย @MickyT


2
เกือบเหมือนกันกับที่ฉันมาด้วย แต่ใส่ไปด้านหนึ่ง ฉันใช้M=replicate(26,c(letters,"\n"))มากกว่าเมทริกซ์ มันจะช่วยให้คุณประหยัดไม่กี่ไบต์
MickyT

บันทึก 1 ไบต์โดยใช้write: tio.run/##K/r/…
JayCe

4

Linux Assembly, 289

น่าเสียดายที่ไม่สามารถแข่งขันกับภาษาระดับสูงและอาจอยู่ไกลจากที่ดีที่สุด แต่ค่อนข้างตรงไปตรงมา เรียกใช้โดยใช้nasm -f elf64 -o a.o wave.S; ld -s -o a a.o; ./a(ไบนารีที่ได้นั้นมีขนาดใหญ่เพียง 568 ไบต์):

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

ดูเหมือนว่าเสียพื้นที่ในการรวบรวมสิ่งนี้ไปยัง ELF (มีศูนย์ bloating มากมาย) สามารถลดลงได้มากหากทำตามโปรแกรม COM ของ DOS ผมคิดว่ามันก็จะทำงานใน DOSBox ใน Linux :)
Ruslan

ฉันรู้และฉันก็แค่นั้น ดูโพสต์อื่น ๆ ของฉันcodegolf.stackexchange.com/a/53984/42642 :)
2845840

ใช่เห็นมันเพิ่มขึ้นมัน ไม่ได้สังเกตว่าเป็นคุณเช่นกัน
Ruslan

4

แอสเซมบลี x86 สำหรับ DOS, 41 ไบต์ที่คอมไพล์แล้ว

เลขฐานสอง:

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

ซอร์สโค้ดบันทึกเป็น "wave.asm" รวบรวมด้วย "nasm -f bin -o wave.com wave.asm" และเรียกใช้ด้วย "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)));}

ขยาย

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

บันทึกแล้ว 1 ไบต์ด้วย@ Gunther34567โดยใช้ ternary แทนif

บันทึก 4 ไบต์จากนั้นทำรังที่ประกอบไปด้วยภายในวงและย้ายตัวอักษรไปด้านนอกของวง

บันทึก 3 ไบต์รวมการประกาศจำนวนเต็มด้วย@eatonphil


1
คุณสามารถประหยัดได้ 1 ไบต์โดยเปลี่ยนif(i==25)d=-1;เป็นd=i==25?-1:d;
grabthefish

1
คุณสามารถบันทึก 3 ไบต์โดยการเปลี่ยนไปvar d=1 int d=1,i
eatonphil

3

Bash: 76 66 ตัวละคร

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

วิ่งตัวอย่าง:

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

ผู้ใช้ที่ไม่ระบุชื่อแนะนำว่าไม่จำเป็นต้องใช้บรรทัดแรกเลยซึ่งจะลดจำนวนไบต์เป็น 45
Martin Ender

น่าสนใจ แล้วตัวอักษรจะปรากฏจากที่ใด
จัดการ

ฉันไม่สามารถบอกคุณได้ การแก้ไขเพียงแค่ลบการprintfโทรออก ฉันปฏิเสธการแก้ไขดังนั้นคุณสามารถทดสอบได้ด้วยตัวเอง
Martin Ender

ใช่ฉันเคยเห็น. (เว็บไซต์แจ้งเตือนฉันเกี่ยวกับการแก้ไขและชะตากรรมของมัน) เมื่อไม่มีบรรทัดที่ 1 ซึ่งวางตัวอักษรในตัวแปร a บรรทัดที่ 2 สามารถพิมพ์สตริงที่ว่างจากตัวแปร a เท่านั้นฉันไม่เห็นความละเอียดอื่นนอกจากการปฏิเสธ :(
จัดการ

3

Sed: 135 119 116 111 ตัวอักษร

(รหัสตัวละคร 109 ตัวเลือกตัวเลือกบรรทัดคำสั่ง 1 ตัว + ตัวอักษร 1 ตัว)

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

วิ่งตัวอย่าง:

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

3

Javascript (ES6), 113 ไบต์

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

110 ไบต์

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

102 ไบต์

โรงเรียนเก่าไม่สามารถเอาชนะได้เว้นแต่เราจะมีผู้ปฏิบัติงาน / ฟังก์ชัน / เครื่องกำเนิด / ช่วงอะไรก็ตามใน 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 ไบต์

Math.abs โชคร้ายยาวเกินไป

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 ไบต์

แม้ว่าฉันจะเหยียดหยามโดยไม่มีคำอธิบาย แต่ฉันก็ยังคงดิ้นรนต่อไป

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

เราสามารถโกนทิ้งได้สองสามไบต์โดยจัดเรียงคำสั่งวนซ้ำ:

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

กรุณาอธิบาย downvotes เอาต์พุตผิดหรือเปล่า?
shabunc

2
อาจเป็นเพราะคุณมีคำตอบหลายคำตอบทางเทคนิคในการโพสต์เดียว? นรกถ้าฉันรู้ว่าโกนหนวดดี!
Sandy Gifford

นอกจากนี้ฉันคิดว่าคุณสามารถกำจัดเซมิโคลอนสุดท้ายได้
Sandy Gifford

ไม่ฉันไม่ถูกต้อง
Sandy Gifford

3

Perl - 95 64 ไบต์

ใช้ประโยชน์จากความจริง\uทำให้ตัวละครตัวต่อไปพิมพ์ตัวพิมพ์ใหญ่ใน Perl

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

ขอบคุณ manatwork สำหรับการบันทึก 31 ไบต์และแก้ไข (รหัสก่อนหน้าของฉันไม่ทำงาน)


ที่\uดูเหมือนว่าจะทำงานในตัวอย่างที่แยกกัน แต่ไม่ได้อยู่ในรหัสของคุณ :( ตัวละครทุกตัวมีตัวพิมพ์เล็กคุณสามารถแสดงให้เราเห็นว่าโค้ดของคุณควรจะถูกเรียกใช้งานอย่างไร (ฉันใส่ไว้ในไฟล์จากนั้นเรียกว่าperlส่งผ่านชื่อไฟล์โดยไม่มีสวิตช์) อย่างไรก็ตามฉันใช้perl5.20.2
manatwork

โดยวิธีการที่ดูเหมือนว่าจะทำงานเมื่อ\uถูกตามด้วยตัวอักษรที่จะเปลี่ยนในสายเดียวกันตัวอักษร:for$c(0..50){$n=1;print map{++$n==27-abs$c-25?"\u$_":$_}a..z,$/}
manatwork

@ manatwork แปลก ๆ มันใช้ได้เมื่อฉันทำมัน (ฉันใช้ 5.18) โค้ดของคุณใช้งานได้และมันลดขนาดลงอย่างมากดังนั้นฉันจะใช้มัน ขอบคุณ!
ASCIIThenANSI

2

q (37 ตัวอักษร)

ตัดครั้งแรก

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

@[.Q.a;;upper]@'x,1_reverse x:til 26สำหรับ36 ไบต์ หรือ@[.Q.a;;.q.upper]@'x,1_|x:!26สำหรับ29 ไบต์ใน K4
roadster
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.