Cipher Modal

15

Tugas Anda adalah menguraikan string yang tidak kosong yang terdiri dari karakter ASCII yang dapat dicetak dalam kisaran [32..126] .

Membaca karakter string per karakter:

  • setiap kali Anda menemukan huruf dalam huruf kecil, kaitkan dengan huruf berikutnya dalam huruf besar, dimulai dengan 'A'
  • setiap kali Anda menemukan huruf dalam huruf besar, ganti dengan huruf dalam huruf kecil yang terkait dengannya
  • karakter lain tidak memerlukan pemrosesan khusus dan dibiarkan tidak berubah

Contoh

Untuk string input "endlAsEBAEE":

  • Kaitkan eke A, nke B, dke Cdan lkeD
  • Ganti Adengane
  • Kaitkan skeE
  • Ganti EBAEEdengansness

Output akhir adalah "endlessness".

Klarifikasi dan aturan

  • String input dijamin mengandung setiap huruf kecil paling banyak satu kali. Semua contoh lebih lanjut akan diganti dengan huruf kapital yang sesuai.
  • String input dijamin valid. (Anda tidak akan menemukan huruf kapital yang belum dikaitkan dengan huruf kecil.)
  • Setelah huruf kapital dikaitkan dengan huruf kecil, huruf kapital dapat digunakan nanti atau tidak dalam string. Misalnya, Cdan Dtidak digunakan dalam contoh di atas.
  • Ini adalah , jadi jawaban tersingkat dalam byte menang!

Uji kasus

Input:

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?

Jawaban:

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?
Arnauld
sumber
1
Saya pikir kebalikan dari tugas ini - menyandikan string huruf kecil + tanda baca - juga akan membuat tantangan yang menarik.
Chas Brown

Jawaban:

8

Jelly , 8 7 byte

fØaØA,y

Cobalah online!

Bagaimana itu bekerja

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].
Dennis
sumber
4

05AB1E , 6 byte

Kode:

AÃAus‡

Menggunakan penyandian 05AB1E . Cobalah online!

Adnan
sumber
Jawaban Anda biasanya membuat saya malu ʒ.l}Aus‡.
Magic Gurita Guci
3

JavaScript (ES6), 62 byte

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

Setiap huruf besar dikonversi ke nilai dasar 36, kurang dari 10.

Kami kemudian mencocokkan pada huruf kecil yang ada di indeks itu.

Rick Hitchcock
sumber
2

Pyth, 36 byte

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

Coba di sini

Penjelasan

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.

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

Cobalah online!

menggali semua
sumber
Sangat bagus ! Anda mungkin dapat menyimpan beberapa byte dengan menggunakan scan(,"" untuk menjadikannya sebuah program penuh alih-alih suatu fungsi, selain dari itu saya berjuang untuk menemukan perbaikan ...
JayCe
2

Perl 5 dengan -p, 27 byte

eval"y/A-Z/".y/a-z//cdr."/"

Cobalah online!

-2 byte terima kasih kepada @breadbox !

Dom Hastings
sumber
1
Simpan beberapa byte dengan mengganti s///grdengan y///cdr.
kotak roti
@breadbox tentu saja, terima kasih!
Dom Hastings
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#..

Cobalah online!

Z80 cukup bagus dalam hal ini! Inilah pembongkarannya:

  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

Kami menunjukkan HL dan BC di $ff00 kisaran dengan dec, dan digunakan rst $38sebagai alternatif singkat call $8000, tetapi jika tidak, tidak ada banyak penipuan yang terjadi.

Lynn
sumber
1

Retina , 25 byte

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

Cobalah online!Penjelasan:

[a-z]

Cocokkan huruf kecil.

$`
$&-$&

Ganti setiap huruf dengan rentang kemundurannya sendiri. (Ini mencegah transliterasi dari memperlakukannya sebagai kelas karakter; backslash tidak dapat digunakan karena beberapa huruf kecil memiliki arti khusus setelah backslash.)

["T`L`"|""L

Daftar rentang degenerasi, tetapi tanpa pemisah garis, dan dengan pendahulunya T`L` .

~

Evaluasi program transliterasi yang dihasilkan pada input asli.

Neil
sumber
1

Python 2 , 78 byte

lambda s:''.join('@'<c<'['and filter(str.islower,s)[ord(c)-65]or c for c in s)

Cobalah online!

Chas Brown
sumber
1

Java (JDK 10) , 109 byte

s->{var r=s.replaceAll("[^a-z]","");for(char i=64;i++<64+r.length();)s=s.replace(i,r.charAt(i-65));return s;}

Cobalah online!

Olivier Grégoire
sumber
1

C (gcc) , 105 byte

C;f(char*Z){for(char*z=--Z,c,*s;c=*++z;putchar(c))for(C=64,s=Z;*z>64&91>*z&&C^*z;c=*s)C+=*++s>96&*s<123;}

Cobalah online!

Jonathan Frech
sumber