Una cifra maiuscola


15

Il tuo compito è decifrare una stringa non vuota composta da caratteri ASCII stampabili nell'intervallo [32..126] .

Lettura del carattere stringa per carattere:

  • ogni volta che incontri una lettera in minuscolo, associala alla lettera successiva in maiuscolo, iniziando con 'A'
  • ogni volta che si incontra una lettera in maiuscolo, sostituirla con la lettera in minuscolo a cui è associata
  • gli altri personaggi non richiedono alcuna elaborazione speciale e rimangono invariati

Esempio

Per la stringa di input "endlAsEBAEE":

  • Associato ea A, na B, da Ce laD
  • Sostituisci Acone
  • Associato saE
  • Sostituisci EBAEEconsness

L'output finale è "endlessness".

Chiarimenti e regole

  • La stringa di input è garantita per contenere ogni lettera minuscola al massimo una volta. Tutte le altre istanze saranno sostituite con la lettera maiuscola corrispondente.
  • La stringa di input è garantita per essere valida. (Non troverai una lettera maiuscola che non è ancora associata a una lettera minuscola.)
  • Una volta che una lettera maiuscola è stata associata a una lettera minuscola, può essere utilizzata o meno in un secondo momento nella stringa. Ad esempio, Ce Dnon sono utilizzati nell'esempio precedente.
  • Questo è , quindi vince la risposta più breve in byte!

Casi test

ingressi:

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?

risposte:

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
Penso che l'inverso di questo compito - codificare una stringa di minuscole + punteggiatura - rappresenterebbe anche una sfida interessante.
Chas Brown,

Risposte:


8

Gelatina , 8 7 byte

fØaØA,y

Provalo online!

Come funziona

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 byte

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

Ogni lettera maiuscola viene convertita nel valore 36 base, meno 10.

Quindi abbiniamo la lettera minuscola che si trova in quell'indice.


2

Pyth, 36 byte

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

Provalo qui

Spiegazione

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 byte

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

Provalo online!


Molto bella ! Probabilmente puoi salvare qualche byte usando scan(,"" per renderlo un programma completo anziché una funzione, a parte questo sto lottando per trovare alcun miglioramento ...
JayCe


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

Provalo online!

z80 fa abbastanza bene in questo! Ecco uno smontaggio:

  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

Indichiamo sia HL che BC alla $ff00distanza dec, e usiamo rst $38una breve alternativa a call $8000, ma per il resto non ci sono molti trucchi in corso.


1

Retina , 25 byte

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

Provalo online! Spiegazione:

[a-z]

Abbina lettere minuscole.

$`
$&-$&

Sostituisci ogni lettera con un intervallo degenerato di se stessa. (Ciò impedisce alla traslitterazione successiva di trattarla come una classe di caratteri; la barra rovesciata non può essere utilizzata perché alcune lettere minuscole hanno un significato speciale dopo una barra rovesciata.)

["T`L`"|""L

Elenca gli intervalli degeneri, ma senza separatori di riga e con un precedente T`L`.

~

Valuta il programma di traslitterazione risultante sull'input originale.






Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.