Mật mã vốn


15

Nhiệm vụ của bạn là giải mã một chuỗi không trống bao gồm các ký tự ASCII có thể in trong phạm vi [32..126] .

Đọc ký tự chuỗi trên mỗi ký tự:

  • mỗi khi bạn gặp một chữ cái viết thường, hãy liên kết nó với chữ cái tiếp theo viết hoa, bắt đầu bằng 'A'
  • mỗi khi bạn bắt gặp một chữ cái viết hoa, hãy thay thế nó bằng chữ cái viết thường
  • các ký tự khác không yêu cầu bất kỳ xử lý đặc biệt nào và chỉ được giữ nguyên

Thí dụ

Đối với chuỗi đầu vào "endlAsEBAEE":

  • Associate eđến A, nđến B, dđến ClđểD
  • Thay thế Abằnge
  • Liên kết svớiE
  • Thay thế EBAEEbằngsness

Đầu ra cuối cùng là "endlessness".

Làm rõ và quy tắc

  • Chuỗi đầu vào được đảm bảo chứa nhiều chữ cái viết thường nhiều nhất một lần. Tất cả các trường hợp tiếp theo sẽ được thay thế bằng chữ in hoa tương ứng.
  • Chuỗi đầu vào được đảm bảo là hợp lệ. (Bạn sẽ không gặp phải chữ in hoa chưa được liên kết với chữ thường.)
  • Khi một chữ in hoa đã được liên kết với một chữ cái viết thường, nó có thể hoặc không được sử dụng sau này trong chuỗi. Ví dụ, CDkhông được sử dụng trong ví dụ trên.
  • Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng!

Các trường hợp thử nghiệm

Đầu vào:

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?

Đáp án:

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
Tôi nghĩ rằng nghịch đảo của nhiệm vụ này - mã hóa một chuỗi chữ thường + dấu chấm câu - cũng sẽ tạo ra một thách thức thú vị.
Chas Brown

Câu trả lời:


8

Thạch , 8 7 byte

fØaØA,y

Hãy thử trực tuyến!

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

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 byte

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

Mỗi chữ in hoa được chuyển đổi thành giá trị cơ sở 36, ít hơn 10.

Sau đó chúng tôi khớp với chữ cái viết thường ở chỉ mục đó.


2

Bình thường, 36 byte

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

Hãy thử nó ở đây

Giải trình

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 byte

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

Hãy thử trực tuyến!


Rất đẹp ! Bạn có thể có thể lưu một vài byte bằng cách sử dụng scan(,"" để biến nó thành một chương trình đầy đủ thay vì một chức năng, ngoài ra tôi đang vật lộn để tìm bất kỳ cải tiến nào ...
JayCe


2

Z80Golf , 37 byte

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

Hãy thử trực tuyến!

z80 làm khá tốt điều này! Đây là một sự tháo gỡ:

  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

Chúng tôi chỉ cả HL và BC ở $ff00phạm vi với dec, và sử dụng rst $38như một giải pháp thay thế ngắn call $8000, nhưng nếu không thì sẽ không có nhiều mánh khóe xảy ra.


1

Võng mạc , 25 byte

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

Hãy thử trực tuyến! Giải trình:

[a-z]

Ghép chữ thường.

$`
$&-$&

Thay thế mỗi chữ cái với một phạm vi suy biến của chính nó. (Điều này ngăn việc phiên âm sau này coi nó như một lớp ký tự; không thể sử dụng dấu gạch chéo ngược vì một số chữ cái viết thường có ý nghĩa đặc biệt sau dấu gạch chéo ngược.)

["T`L`"|""L

Liệt kê các phạm vi suy biến, nhưng không có dấu phân cách dòng và có trước T`L`.

~

Đánh giá chương trình chuyển ngữ kết quả trên đầu vào ban đầu.






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.