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?

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


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.


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.


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!


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

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.


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.






En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.