做墨西哥波


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
可以确定输入绝不是大写吗?
温妮

40
@Winny没有输入。输出是固定的。实际上,这就是kolmogorov复杂性问题的一般思想。
克里斯·杰斯特·杨

自您发布以来,它一直在HNQ列表中。辛苦了 :)
Alex A.

1
您可以在此处找到参考的非Python实现。->链接已损坏
Franck Dernoncourt,2008年

弗兰克·德农库尔(Franck Dernoncourt)的观点仍然成立。链接断开。
乔纳森·弗雷希

Answers:


64

Pyth,12个字节

V+Gt_GXGNrN1

示范。

在Pyth中,G是小写字母。+Gt_Gabcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba,需要在每行中将其大写。

V在该字符串上设置一个for循环,并N作为loop变量。

在体内,XGNrN1是一个字符串翻译功能。X翻译G,拼音,替换NrN1,的大写版本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(8bit),231字节

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

好吧,所以它永远不会是最短的,但是参与才是最重要的……对吗?

在这里尝试(确保勾选“动态内存”)


5
如果目标是成为最长的代码,而这对于普通的程序员来说仍然是完全无法理解的……
Caleb,2015年

7
@Caleb我认为BF代码是现存最容易理解的代码。这是程序/功能这是很难理解。每个人都应该知道,>例如,向右移动一个单元格。
mbomb007

4
总是喜欢BF答案;)
RedPanda 2015年

您现在不是直接编写此代码吗?
2015年

6
我很say愧地说我做到了!
Jarmex

13

MS-DOS二进制,61

无需编译此代码,如果将其写入称为wave.com的文件中,它将在MS-DOS中运行。十六进制代码:

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

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

h 我尝试了一些愚蠢的想法来优化e的重用,但是当然不是正确的方法。谢谢@Ventero。
manatwork

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 '']保存字节。
丹尼斯·贾赫鲁丁

end-1也是写25的相当冗长的方法!
丹尼斯·贾赫鲁丁

@DennisJaheruddin糟糕!谢谢你们!实际上,这个[x '']技巧对我来说根本不常见。但现在我记得您曾经在其中之一看到过它:-)
路易斯·门多

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]

lambda helper函数\(h,c:t)采用一对ascii值列表并将它们串联在一起,但第二个列表的第一个值大写。主函数97..122在每个位置拆分小写字母(以ascii给出),0,..,24,25,24,..,0并在每个步骤中调用lambda。在打印之前,每个值都会变成相应的字符。




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

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

十分优雅。不知道可以串联使用警卫。
user2845840 2015年


6

MATLAB-58个字节

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

类似于路易斯·门多的解决方案,但使用的广播功能bsxfun

利用ASCII中的大写字母和小写字符之间的差值恰好彼此相距32个值,我们首先从ASCII码97到122生成小写字母,它们分别是从小写a到小写z的ASCII码,然后创建一个包含从97到122的26个ASCII码的51行矩阵。因此,此矩阵的每一行都包含一个从97到122的数值序列。接下来,我们创建另一个矩阵,其中 i 该矩阵的行包含一个32在第i 列。此矩阵的前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环境运行此示例。Octave本质上是MATLAB,但免费:http//ideone.com/PknMe0


1
rot90 - 好想法!
路易斯·门多

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

@ user3528438您如何处理下半场?该代码仅计算波的前半部分。您需要计算其余部分。
rayryeng

@ user3528438-还请注意,您写的基本上是路易斯·门多的答案的前半部分。我决定写一些不同的东西来达到相同的目的:)
rayryeng

@rayryeng是的,让我感到惊讶的是,下半场更难处理,以及如何避免中心重复。
user3528438

5

J,31 23字节

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

@Mauris节省了8个字节。

在这里在线尝试。


我可以得到23 :(这里的u:|:(97+i.26)-32*=|i:25monad =真的很有用!)
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字节命令行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,所以我想可以做很多事情-请提出改进​​建议!

可以如下使用:

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

说明

通用方法是使用正则表达式替代来完成所有艰苦的工作。我们首先开始:

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)。我不会一个人到那里。
Ismael Miguel 2015年

2
您的for循环可以优化:for(;$L=range(a,z),$L[25-abs($i++-25)]^=' ',$i<52;)echo join($L).'↵';(-2字节)。
Blackhole


5

TIS节点类型T21架构- 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
我已经为TIO实现了TIS模拟器,因此您现在可以在线尝试!
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生成字符更有意义。在下面使用Stack片段对其进行测试,该片段使用了受支持程度更高的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 2015年

使用write以下命令
##K

4

Linux汇编,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程序完成,则可以大大减少它。我猜它然后可以在Linux的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;d=i==25?-1:d;
抢鱼

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
马丁安德

有趣。那么字母表将从何处出现?
manatwork

我不能告诉你 编辑只是删除​​了printf呼叫。我拒绝了该修改,因此您可以自己对其进行测试。
Martin Ender

是的,我看到了。(该站点已通知我有关编辑及其命运的信息。)由于没有第一行将字母放置在变量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

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

请解释一下投票。输出错误?
shabunc

2
也许是因为您在技术上在一个帖子中有多个答案?如果我知道的话,该死,好刮胡子!
桑迪·吉福德

另外,我认为您可以删除最后一个分号
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 2636个字节。或@[.Q.a;;.q.upper]@'x,1_|x:!2629个字节的K4。
streetster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.