멕시코 웨이브 만들기


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

후행 줄 바꿈이 허용됩니다. 참조 ungolfed Python 구현은 here에서 찾을 수 있습니다 .


1
입력이 대문자가 아니라고 가정해도 안전합니까?
Winny

40
@Winny 입력이 없습니다. 출력이 고정됩니다. 사실, 그것은 kolmogorov- 복잡성 질문 의 일반적인 아이디어입니다 .
Chris Jester-Young 5

이것은 당신이 그것을 게시 한 이후 지속적으로 HNQ 목록에 있습니다. 잘 했어. :)
Alex A.

1
참조 ungolfed Python 구현은 여기에서 찾을 수 있습니다. -> 링크가 깨졌습니다
Franck Dernoncourt

프랭크 데논 코트의 요점은 여전히 ​​유효합니다. 링크가 끊어졌습니다.
Jonathan Frech

답변:


64

Pyth, 12 바이트

V+Gt_GXGNrN1

데모.

Pyth G에서 소문자 알파벳입니다. +Gt_Gabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba각 행에서 대문자가 필요한 문자입니다.

VN루프 변수 로이 문자열에 for 루프를 설정합니다 .

본문 XGNrN1에는 문자열 번역 기능이 있습니다. X번역 G교체, 알파벳, NrN1의 대문자 버전 N. r ... 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

파이썬 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 이진, 61

이 코드는 컴파일 할 필요가 없으며 wave.com이라는 파일에 작성하면 MS-DOS에서 실행됩니다. 16 진 코드 :

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

도 나는 e의 재사용을 최적화하기 위해 두 가지 바보 같은 아이디어를 시도했지만 물론 올바른 방법은 아닙니다. 감사합니다, @Ventero.
manatwork

10

MATLAB, 60 58 54 바이트

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

4 바이트를 절약 해 준 Dennis Jaheruddin 에게 감사 합니다.


여기에 당신은 또한 대체하는 전형적인 트릭을 사용 char(x)하여 [x '']바이트를 저장합니다.
데니스 Jaheruddin

또한 end-125를 쓰는 다소 장황한 방법입니다!
데니스 Jaheruddin

@DennisJaheruddin 죄송합니다. 둘 다 감사합니다! 실제로 [x '']트릭은 전혀 평범하지 않습니다. 그러나 지금 나는 당신의 대답 중 하나에서 그것을 본 것을 기억합니다 :-)
Luis Mendo

8

SWI- 프롤로그, 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

하스켈 100 89 88 바이트

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

람다 도우미 함수 \(h,c:t)는 한 쌍의 아스키 값 목록을 가져와 두 값을 연결하지만 두 번째 목록의 첫 번째 값은 대문자로 표시됩니다. main 함수 97..122는 모든 위치 에서 소문자 알파벳 (ascii로 제공됨)을 분할하고 0,..,24,25,24,..,0모든 단계에서 람다를 호출합니다. 인쇄하기 전에 각 값이 해당 문자로 바뀝니다.


내 접근 방식은 다음과 같습니다. codegolf.stackexchange.com/a/53895/3852
Lynn

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 ⇒ 기호가 사용됩니까? 나는 =>가 아니라 ⇒ ???
shabunc

2
둘 다 유효합니다 :)
gilad hoch

내가 변경하는 경우 1 바이트를 면도 수 foreach printlnmkString("\n")화면에 인쇄하는 대신 반환 값으로 문자열을 출력
길 라드의 호크

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

@manatwork nope 나는 몰랐지만 지금은 감사합니다
MickyT

7

하스켈, 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]]

매우 우아합니다. 경비원을 인라인으로 사용할 수 있다는 것을 몰랐습니다.
user2845840


6

MATLAB-58 바이트

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

Luis Mendo의 솔루션 과 유사 하지만의 방송 기능을 사용합니다 bsxfun.

ASCII에서 대문자와 소문자의 차이는 서로 정확히 32 값 떨어져 있다는 점을 이용하여 먼저 ASCII 코드 97에서 122까지의 소문자를 소문자 a에서 소문자 z까지의 ASCII 코드로 생성합니다. 97에서 122까지의 26 개의 ASCII 코드를 포함하는 51 개의 행 행렬을 만듭니다. 따라서이 행렬의 각 행에는 97에서 122까지의 숫자 시퀀스가 ​​포함됩니다. 다음 으로이 행렬의 각 i 번째 행에 i 번째 열에 32 . 이 행렬의 처음 26 개 행에는이 패턴이 있습니다. 이는 본질적으로 항등 행렬에 32를 곱한 것입니다.eye당신을 위해 항등 행렬을 만듭니다. 이 행렬의 마지막 25 행은 90도 회전 된 스케일 된 항등 행렬입니다.

이 사용자 지정 가중치 단위 행렬을 가져 와서 첫 번째 행렬로 빼고 결과 ASCII 코드를 문자로 변환하면 원하는 "멕시코 모자"시퀀스가 생성됩니다.

예제 실행

>> 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의 온라인 Octave 환경을 사용하여이 예제를 실행할 수도 있습니다. 옥타브는 기본적으로 MATLAB이지만 무료입니다 : http://ideone.com/PknMe0


1
rot90-잘 생각해!
Luis Mendo

char (ones (26,1) * [97 : 122] -eye (26) * 32)
3528438

@ user3528438 하반기를 어떻게 처리합니까? 이 코드는 웨이브의 전반부를 계산합니다. 나머지는 계산해야합니다.
rayryeng

@ user3528438-또한 당신이 쓴 것은 기본적으로 Luis Mendo의 답변의 상반기입니다. 나는 같은 것을 달성하기 위해 약간 다른 것을 작성하기로 결정했다. :)
rayryeng

@ rayryeng 네, 후반부가 다루기가 더 어려우며 센터 복제를 피하는 방법을 알려줍니다.
user3528438


5

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

또는 온라인으로 여기에 있습니다 (-l arg를 추가 할 수 없으므로. "\ n"을 추가해야 함).

설명

일반적인 접근 방식은 정규식 대체를 사용하여 모든 노력을 다하는 것입니다. 우리는 시작합니다 :

0abcdefghijklmnopqrstuvwxyz1

이것은 일치 (([A-Z])|0)(\D)하고 \U\3(\ U가 대문자로 변경됨)으로 바뀌어 다음을 제공합니다.

Abcdefghijklmnopqrstuvwxyz1

이제부터는 동일한 정규 표현식을 계속 일치시키고 다음과 같이 바꿉니다 \L\2\U\3.

aBcdefghijklmnopqrstuvwxyz1
abCdefghijklmnopqrstuvwxyz1
...
abcdefghijklmnopqrstuvwxyZ1

이제 정규식의 두 번째 대체가 일치 (.)((?2))(1)합니다 (와 동일 (.)([A-Z])(1)). 우리는 다음과 같이 대체합니다 \U\4\6\L\5.

abcdefghijklmnopqrstuvwxY1z

이는 다음에 도달 할 때까지 계속 일치하고 교체됩니다.

A1bcdefghijklmnopqrstuvwxyz

더 이상 정규 표현식 일치가 없습니다.

루프의 각 지점에서 '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
"glue의 기본값은 빈 문자열입니다."– join()첫 번째 매개 변수 에 대한 PHP 설명서 .
manatwork

1
그 문자열 아래 첨자는 실제로 최적이 아닙니다. $i<25?$i:25-($i-25)25-abs($i-25)
manatwork

1
이미 정의되지 않은 상수 a와 z에 대해 경고를 무시하고 있다고 가정하면 초기화되지 않은 $ i에 대해서는 다른 경고를 무시할 수 있습니다. $ i를 터치 한 상태에서 증분을 문자열 아래 첨자로 옮깁니다. for(;$i<51;){$L=range(a,z);$L[25-abs($i++-25)]^=" ";echo join($L),"↵";}(코드에서“↵”를 사용한 줄만 감싸십시오.)
manatwork

@manatwork 감사합니다! 나는 \n거기에 있다는 것을 완전히 잊었다 . 의 초기화 $i는 사고로 남았습니다. 그리고 감사합니다 25-abs($i-25). 나는 혼자서 거기에 가지 않을 것이다.
이스마엘 미겔

2
귀하의 for루프를 최적화 할 수 있습니다 : for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2 바이트).
블랙홀

5

PowerShell 3.0, 82 바이트

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

5

TIS 노드 유형 T21 아키텍처 - 216 215 바이트

여기에서 행동하십시오! 거기에 있어요 DOWN나중에에 golfed 그 비디오에 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
TIO 용 TIS 에뮬레이터를 구현 했으므로 이제 온라인으로 사용해 볼 수 있습니다!
Phlarx

4

자바 스크립트 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

tio.run/##K/r/… 를 사용하여 1 바이트를 절약하십시오 write.
JayCe

4

리눅스 어셈블리, 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 (많은 블로 팅 제로)로 컴파일하기위한 공간 낭비가있는 것 같습니다. DOS의 COM 프로그램으로 수행하면 크게 줄일 수 있습니다. 나는 그것이 리눅스에서 dosbox에서 실행될 수 있다고 생각한다 :)
Ruslan

나도 알고 있었어 내 다른 게시물 codegolf.stackexchange.com/a/53984/42642 :)
user2845840

네, 봤어요. 그래도 당신이라는 것을 알지 못했습니다.
Ruslan

4

DOS 용 x86 어셈블리, 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)));
}

@ Gunther34567 덕분에 1 바이트를 대신 삼항을 사용하여 저장했습니다.if

4 바이트를 저장 한 다음 루프 내부에 해당 삼항을 중첩하고 알파벳을 루프 외부로 이동

@eatonphil 덕분에 정수 선언을 결합하여 3 바이트를 절약했습니다.


1
다음으로 변경 if(i==25)d=-1;하여 1 바이트를 절약 할 수 있습니다.d=i==25?-1:d;
grabthefish

1
로 변경 var d=1하여 3 바이트를 절약 할 수 있습니다 int d=1,i.
eatonphil

3

세게 때리다: 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

흥미 롭군 그러면 알파벳은 어디에서 나타 납니까?
manatwork

당신에게 말할 수 없었습니다. 편집은 단순히 printf전화 를 제거했습니다 . 편집을 거부 했으므로 직접 테스트 할 수 있습니다.
마틴 엔더

응, 나 봤어. (사이트는 저에게 편집과 그것의 운명에 대해 알려주었습니다.) 변수 a에 알파벳을 넣는 첫 번째 줄이 없으면 두 번째 줄은 변수 a에서 빈 문자열 만 인쇄 할 수 있으므로 거부하는 것 외에 다른 해결책은 없습니다. :(
manatwork

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

자바 스크립트 (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));

공감 비를 설명하십시오. 출력이 잘못 되었습니까?
shabunc

2
기술적으로 단일 게시물에 여러 답변이 있기 때문일 수 있습니다. 내가 알면 지옥, 좋은 면도!
Sandy Gifford

또한 마지막 세미콜론을 제거 할 수 있다고 생각합니다
Sandy Gifford

아니, 나는 틀렸다
Sandy Gifford

3

-95 64 바이트

\u다음 문자가 Perl에서 대문자로 인쇄 된다는 사실 을 이용합니다.

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

31 바이트를 저장하고 수정 한 manatwork 덕분에 (이전 코드는 작동하지 않았습니다.)


\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 Strange, 내가 할 때 효과가있었습니다. (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있다.
streetster
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.