資本暗号


15

あなたの仕事は、範囲[32..126]の印刷可能なASCII文字で構成される空でない文字列を解読することです。

文字ごとの文字列の読み取り:

  • 小文字の文字に出会うたびに、「A」で始まる大文字の次の文字に関連付けます
  • 大文字の文字に出会うたびに、関連付けられている小文字の文字に置き換えます
  • 他の文字は特別な処理を必要とせず、そのまま変更されません

入力文字列の場合"endlAsEBAEE"

  • アソシエイトeAnBdClD
  • 交換するAe
  • アソシエイトsE
  • 交換するEBAEEsness

最終的な出力は"endlessness"です。

明確化と規則

  • 入力文字列には、各小文字が1回しか含まれないことが保証されています。それ以降のすべてのインスタンスは、対応する大文字に置き換えられます。
  • 入力文字列は有効であることが保証されています。(まだ小文字に関連付けられていない大文字は表示されません。)
  • 大文字が小文字に関連付けられると、後で文字列で使用される場合とされない場合があります。例えば、CおよびD上記の例では使用されません。
  • これはなので、バイト単位の最短回答が勝ちです!

テストケース

入力:

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?

回答:

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
小文字と句読点の文字列をエンコードするこのタスクの逆もまた興味深い挑戦になると思います。
チャスブラウン

回答:


8

ゼリー8 7バイト

fØaØA,y

オンラインでお試しください!

使い方

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バイト

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

各大文字は、ベース36の値(10未満)に変換されます。

次に、そのインデックスにある小文字を照合します。


2

Pyth、36バイト

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

ここで試してみてください

説明

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バイト

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

オンラインでお試しください!


非常に素晴らしい !scan(,"" 機能の代わりに完全なプログラムにすることで数バイトを節約できる可能性がありますが、改善点を見つけるのに苦労しています
...-JayCe


2

Z80Golf、37バイト

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

オンラインでお試しください!

z80はこれでかなり良いです!分解は次のとおりです。

  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

HLとBCの両方をで$ff00範囲に指定しdecrst $38の短い代替として使用しcall $8000ますが、それ以外の場合はあまり巧妙ではありません。


1

網膜、25バイト

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

オンラインでお試しください!説明:

[a-z]

小文字に一致します。

$`
$&-$&

各文字をそれ自体の縮退した範囲に置き換えます。(これにより、後の音訳で文字クラスとして扱われないようになります。バックスラッシュは、バックスラッシュの後にいくつかの小文字が特別な意味を持つため、使用できません。)

["T`L`"|""L

縮退範囲をリストしますが、行セパレーターはなく、前にT`L`

~

元の入力で結果の音訳プログラムを評価します。






弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.