Un cifrado de capital


15

Su tarea es descifrar una cadena no vacía que consta de caracteres ASCII imprimibles en el rango [32..126] .

Lectura de la cadena de caracteres por carácter:

  • cada vez que encuentre una letra en minúscula, asóciela con la siguiente letra en mayúscula, comenzando con 'A'
  • cada vez que encuentre una letra en mayúscula, reemplácela con la letra en minúscula con la que está asociada
  • otros caracteres no requieren ningún procesamiento especial y simplemente no se modifican

Ejemplo

Para la cadena de entrada "endlAsEBAEE":

  • Asociado ea A, na B, da Cy laD
  • Reemplazar Acone
  • Asociado saE
  • Reemplazar EBAEEconsness

El resultado final es "endlessness".

Aclaraciones y reglas.

  • Se garantiza que la cadena de entrada contenga cada letra minúscula como máximo una vez. Todas las demás instancias serán reemplazadas con la letra mayúscula correspondiente.
  • Se garantiza que la cadena de entrada sea válida. (No encontrará una letra mayúscula que aún no esté asociada con una letra minúscula).
  • Una vez que se ha asociado una letra mayúscula a una letra minúscula, se puede usar o no más adelante en la cadena. Por ejemplo, Cy Dno se utilizan en el ejemplo anterior.
  • Este es el , por lo que gana la respuesta más corta en bytes.

Casos de prueba

Entradas:

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?

Respuestas:

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
Creo que lo contrario de esta tarea, codificar una cadena de minúscula + puntuación, también sería un desafío interesante.
— Chas Brown

Respuestas:


8

Jalea , 8 7 bytes

fØaØA,y

Pruébalo en línea!

Cómo funciona

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 bytes

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

Cada letra mayúscula se convierte a su valor base 36, menos 10.

Luego hacemos coincidir la letra minúscula que está en ese índice.


2

Pyth, 36 bytes

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

Pruébalo aquí

Explicación

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 bytes

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

Pruébalo en línea!


Muy agradable ! Probablemente pueda guardar algunos bytes si lo usa scan(,"" para convertirlo en un programa completo en lugar de una función, aparte de eso estoy luchando por encontrar alguna mejora ...
— JayCe


2

Z80Golf , 37 bytes

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

Pruébalo en línea!

¡z80 hace bastante bien en esto! Aquí hay un desmontaje:

  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

Señalamos tanto HL como BC en el $ff00rango con dec, y lo usamos rst $38como una alternativa corta a call $8000, pero de lo contrario no hay muchos trucos.


1

Retina , 25 bytes

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

Pruébalo en línea! Explicación:

[a-z]

Une letras minúsculas.

$`
$&-$&

Reemplace cada letra con un rango degenerado de sí mismo. (Esto evita que la transliteración posterior lo trate como una clase de caracteres; la barra invertida no se puede usar porque algunas letras minúsculas tienen un significado especial después de una barra invertida).

["T`L`"|""L

Liste los rangos degenerados, pero sin separadores de línea y con un precedente T`L`.

~

Evalúe el programa de transliteración resultante en la entrada original.






Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.