大写密码


15

您的任务是解密由[32..126]范围内的可打印ASCII字符组成的非空字符串。

读取每个字符的字符串字符:

  • 每次遇到小写字母时,请将其与大写的下一个字母相关联,以“ A”开头
  • 每次遇到大写字母时,请将其替换为与之关联的小写字母
  • 其他字符不需要任何特殊处理,并且保持不变

对于输入字符串"endlAsEBAEE"

  • 联想eAnBdClD
  • 替换Ae
  • 关联sE
  • 替换EBAEEsness

最终输出为"endlessness"

澄清和规则

  • 确保输入字符串最多包含每个小写字母一次。所有其他实例将替换为相应的大写字母。
  • 输入字符串保证有效。(您不会遇到尚未与小写字母关联的大写字母。)
  • 一旦将大写字母与小写字母相关联,该字符串以后可能会使用也可能不会使用。例如,在以上示例中未使用CD
  • 这是,因此最短答案以字节为单位!

测试用例

输入:

abcd
honk! ABCD!
abrAcAdABCA
endlAsEBAEE
helCo wDrCd!
dermatoglyphics
progBamFinD AuzJles & cCdL DCKf
sphinx of black quKrtz, jOdge my vGw. K NODLM IPGZE HGF SOWBA GYVP QCV JKRX TGU.
petBr AiABD AEckBd a ABFG of AEFGlBH ABAABDs. hJw mIny AEFGLBH ABAABDM HEH ABCBD AEABD AEFG?

答案:

abcd
honk! honk!
abracadabra
endlessness
hello world!
dermatoglyphics
programming puzzles & code golf
sphinx of black quartz, judge my vow. a quick brown fox jumps over the lazy dog.
peter piper picked a peck of pickled peppers. how many pickled peppers did peter piper pick?

1
我认为,与此任务相反的是-编码一串小写+标点符号-也将带来一个有趣的挑战。
Chas Brown

Answers:


8

果冻8 7字节

fØaØA,y

在线尝试!

怎么运行的

fØaØA,y  Main link. Argument: s (string)

 Øa      Yield the lowercase alphabet.
f        Filter; keep only characters that appear in the lowercase alphabet.
          Call the result r.
   ØA    Yield the uppercase alphabet (u).
     ,   Pair; yield [u, r].
      y  Translate s, using the substitutions in [u, r].


3

JavaScript(ES6),62个字节

s=>s.replace(/[A-Z]/g,c=>s.match(/[a-z]/g)[parseInt(c,36)-10])

每个大写字母将转换为其基数36值减去10。

然后,我们匹配该索引处的小写字母。


2

Pyth,36个字节

JKr1GVQI&}NG!}NH=XHNhK=tK)p?}NJ@_HNN

在这里尝试

说明

JKr1GVQI&}NG!}NH=XHNhK=tK)p?}NJ@_HNN
JKr1G                                  Let J and K be the uppercase alphabet.
     VQ                                For each character in the input...
       I&}NG!}NH         )             ... if the character is lowercase and not
                                       yet in H, ...
                =XHNhK                 ... add the letter and the next uppercase
                                       letter to H...
                      =tK              ... and move to the next uppercase letter.
                          p?}NJ@_HNN   Print either the next character or the
                                       letter it represents.


2

R,79字节

function(x){s=utf8ToInt(x)
s[j]=s[s>96&s<123][s[j<-s>64&s<91]-64]
intToUtf8(s)}

在线尝试!


非常好 !通过scan(,"" 使它成为一个完整的程序而不是一个函数,您可能可以节省一些字节,此外,我正努力寻找任何改进的方法……
JayCe


2

Z80Golf,37字节

00000000: 2505 cd03 8030 0176 fe7b 300c fe61 3011  %....0.v.{0..a0.
00000010: fe5b 3004 fe41 3003 ff18 e7d6 414f 0a18  .[0..A0.....AO..
00000020: f777 2318 f3                             .w#..

在线尝试!

z80在这方面做得很好!这是反汇编:

  dec h         ; HL = cipher write pointer
  dec b         ; BC = cipher read pointer
                ; meaning of 'A'..'Z' is written to $ff00~$ff19
next:
  call $8003    ; getchar
  jr nc, ok     ; not EOF?
  halt
ok:
  cp '{'
  jr nc, other  ; a ≥ '{'
  cp 'a'
  jr nc, lower  ; 'a' ≤ a ≤ 'z'
  cp '['
  jr nc, other  ; '[' ≤ a ≤ '`'
  cp 'A'
  jr nc, upper  ; 'A' ≤ a ≤ 'Z'
other:
  rst $38
  jr next
upper:
  sub 'A'
  ld c, a
  ld a, (bc)
  jr other
lower:
  ld (hl), a
  inc hl
  jr other

我们点都HL和BC在$ff00与范围dec,并使用rst $38作为短替代品call $8000,但在其他方面没有太多的权谋事。


1

视网膜,25字节

~["T`L`"|""L$`[a-z]
$&-$&

在线尝试!说明:

[a-z]

匹配小写字母。

$`
$&-$&

用本身的简并范围替换每个字母。(这防止了以后的音译将其视为字符类;不能使用反斜杠,因为某些小写字母在反斜杠后具有特殊含义。)

["T`L`"|""L

列出简并范围,但不带行分隔符,并带有一个前缀T`L`

~

在原始输入上评估生成的音译程序。






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.