Un chiffre capital

15

Votre tâche consiste à déchiffrer une chaîne non vide composée de caractères ASCII imprimables dans la plage [32..126] .

Lecture de la chaîne de caractères par caractère:

  • chaque fois que vous rencontrez une lettre en minuscule, associez-la à la lettre suivante en majuscule, en commençant par «A»
  • chaque fois que vous rencontrez une lettre en majuscule, remplacez-la par la lettre en minuscule à laquelle elle est associée
  • les autres caractères ne nécessitent aucun traitement spécial et restent inchangés

Exemple

Pour la chaîne d'entrée "endlAsEBAEE":

  • Associer eà A, nà B, dà Cet làD
  • Remplacez Apare
  • Associer sàE
  • Remplacez EBAEEparsness

La sortie finale est "endlessness".

Clarifications et règles

  • La chaîne d'entrée est garantie pour contenir chaque lettre minuscule au plus une fois. Toutes les autres instances seront remplacées par la lettre majuscule correspondante.
  • La chaîne d'entrée est garantie d'être valide. (Vous ne rencontrerez pas de majuscule qui n'est pas encore associée à une lettre minuscule.)
  • Une fois qu'une lettre majuscule a été associée à une lettre minuscule, elle peut ou non être utilisée plus tard dans la chaîne. Par exemple, Cet Dne sont pas utilisés dans l'exemple ci-dessus.
  • C'est le , donc la réponse la plus courte en octets l'emporte!

Cas de test

Contributions:

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?

Réponses:

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
la source
1
Je pense que l'inverse de cette tâche - encoder une chaîne de minuscules + ponctuation - constituerait également un défi intéressant.
Chas Brown

Réponses:

8

Gelée , 8 7 octets

fØaØA,y

Essayez-le en ligne!

Comment ça fonctionne

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
la source
4

05AB1E , 6 octets

Code:

AÃAus‡

Utilise l' encodage 05AB1E . Essayez-le en ligne!

Adnan
la source
Vos réponses me font généralement honte ʒ.l}Aus‡.
Magic Octopus Urn
3

JavaScript (ES6), 62 octets

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

Chaque lettre majuscule est convertie à sa valeur de base 36, moins 10.

Nous faisons ensuite correspondre la lettre minuscule qui se trouve à cet index.

Rick Hitchcock
la source
2

Pyth, 36 octets

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

Essayez-le ici

Explication

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.

la source
2

R , 79 octets

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

Essayez-le en ligne!

digEmAll
la source
Très agréable ! Vous pouvez probablement économiser quelques octets en utilisant scan(,"" pour en faire un programme complet au lieu d'une fonction, à part que j'ai du mal à trouver une amélioration ...
JayCe
2

Perl 5 avec -p, 27 octets

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

Essayez-le en ligne!

-2 octets grâce à @breadbox !

Dom Hastings
la source
1
Économisez quelques octets en remplaçant le s///grpar y///cdr.
boîte à pain le
@breadbox bien sûr, merci!
Dom Hastings
2

Z80Golf , 37 octets

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

Essayez-le en ligne!

z80 fait assez bien dans ce domaine! Voici un démontage:

  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

Nous indiquons à la fois HL et BC à la $ff00plage avec decet utilisons rst $38comme une courte alternative à call $8000, mais sinon il n'y a pas beaucoup de ruse.

Lynn
la source
1

Rétine , 25 octets

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

Essayez-le en ligne! Explication:

[a-z]

Faites correspondre les lettres minuscules.

$`
$&-$&

Remplacez chaque lettre par une plage dégénérée d'elle-même. (Cela empêche la translittération ultérieure de la traiter comme une classe de caractères; la barre oblique inverse ne peut pas être utilisée car certaines lettres minuscules ont une signification spéciale après une barre oblique inverse.)

["T`L`"|""L

Liste les plages dégénérées, mais sans séparateurs de ligne, et avec un précédent T`L`.

~

Évaluez le programme de translittération résultant sur l'entrée d'origine.

Neil
la source
1

Python 2 , 78 octets

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

Essayez-le en ligne!

Chas Brown
la source
1

C (gcc) , 105 octets

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;}

Essayez-le en ligne!

Jonathan Frech
la source