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.