クロック(音訳)暗号


12

前書き:

私は子供の頃にコンパイルしたドキュメントにさまざまな暗号を大量に保存しています。チャレンジに最も適していると思われるものをいくつか選んで(簡単すぎず、難しくありません)、チャレンジに変換しました。それらのほとんどはまだサンドボックス内にあり、それらすべてを投稿するのか、それともほんの少数を投稿するのかはまだわかりません。3番目の最も簡単な方法は次のとおりです(以前に投稿したComputer CipherおよびTrifid Cipherの後)。


Clock Cipherでは、次の画像を使用してテキストを暗号化します。

ここに画像の説明を入力してください
したがって、次のような文は次のようthis is a clock cipherになります。

t  h i s     i s     a     c l  o  c k     c i p  h e r    (without additional spaces of course, but added as clarification)
19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17

チャレンジ:

stringを指定するとsentence_to_encipher、上記のように暗号化します。

チャレンジルール:

  • あなたが仮定することができます sentence_to_encipherは文字とスペースのみが含まれるます。
  • 完全な小文字または完全な大文字のいずれかを使用できます(回答で使用したものを明記してください)。
  • b介して1桁の暗号化文字に先行ゼロを追加することはできませんが、スペースにはj2つのゼロ00が必須です。
  • :区切り文字として使用する必要があり、先頭または末尾に追加する:ことはできません。
  • 一貫性がある限り、大文字との代わりに小文字amとを使用できpmます。AMPM

一般的なルール:

  • これはであるため、バイト単位の最短回答が優先されます。
    コードゴルフ言語では、非コードゴルフ言語で回答を投稿することを妨げないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。
  • 標準のルールデフォルトのI / Oルールを使用して回答に適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。
  • デフォルトの抜け穴は禁止されています。
  • 可能であれば、コードのテストへのリンク(TIOなど)を追加してください。
  • また、回答の説明を追加することを強くお勧めします。

テストケース:

Input:  "this is a clock cipher"
Output: "19:7:8:18:00:8:18:00:AM:00:2:11:14:2:10:00:2:8:15:7:4:17"

Input:  "test"
Output: "19:4:18:19"

Input:  "what time is it"
Output: "22:7:AM:19:00:19:8:12:4:00:8:18:00:8:19"

Input:  "acegikmoqsuwy bdfhjlnprtvxz"
Output: "AM:2:4:6:8:10:12:14:16:18:20:22:24:00:1:3:5:7:9:11:13:15:17:19:21:23:PM"

Input:  "easy peazy"
Output: "4:AM:18:24:00:15:4:AM:PM:24"


それは出力が許可され[7, ":", 8, ":", "00", ":", 1, ":", 14, ":", 1]ためhi bob、または1つは、結果に加入しなければなりませんか?ちなみに、きちんとした暗号!
Xcoder氏19年

@ Mr.Xcoder申し訳ありませんが、暗号のテーマのために、単一の文字列(またはのような文字のリストとして全体)に結合する必要があります['7', ':', '8', ':', '0', '0', ':', '1', ':', '1', '4', ':', '1']
ケビンCruijssen

回答:



5

05AB1E22 21バイト

„AM24L„PM00)˜Að«s‡':ý

オンラインでお試しください! またはとしてテストスイート

いくつかの代替21バイトソリューション:

':ýAð«24L„AMš„PMª00ª‡
00„AM24L„PM)˜AIk>è':ý

いい答えです。複数のアプローチで23バイトを取得できました(そのうちの1つは現在削除された答えです)。これは、バイトを節約するためにスタックを整理するきちんとした方法です!
Xcoder氏19年

1
回答を組み合わせた代替22バイト:オンラインで試す
Xcoder氏19年

@ Mr.Xcoder:私の最初のアイデアは実際はそのように見えましたが、ª変更されたことを覚えていなかったため2バイト悪化しました:)
エミグナ

@ Mr.Xcoderのアプローチの一部を使用して20バイトを見つけましたが、それを明らかにする前に自分でそれを理解させてあげましょう。:)
ケビンクルーイッセン

1
@KevinCruijssen:もう少し見てからお知らせします;)
エミグナ

4

Perl 6、47バイト

*.ords>>.&{<<00 AM{1..24}PM>>[$_%32]}.join(":")

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

いずれかの場合の文字列を取り、暗号化された文字列を返す匿名のWhateverラムダ。

説明:

*.ords>>.&{                         } # Map the ordinal values to
           <<              >>[$_%32]  # The index in the list
              00 AM{1..24}PM  # 00, AM, the numbers 1 to 24 and PM
                                     .join(":")   # And join with colons

3

Pyth、25バイト

j\:m@+++"AM"S24"PM""00"xG

ここでオンライン試すか、ここですべてのテストケースを一度に確認してください

j\:m@+++"AM"S24"PM""00"xGdQ   Implicit: Q=eval(input()), G=lowercase alphabet
                              Trailing dQ inferred
            S24               [1-24]
       +"AM"                  Prepend "AM"
      +        "PM"           Append "PM"
     +             "00"       Append "00" - this is the dictionary
   m                      Q   Map each element of Q, as d, using:
                       xGd      Get the index of d in G, -1 if not present (i.e. space)
    @                           Get the element from the dictionary at the above index
j\:                           Join the result on ":", implicit print



3

C#(Visual C#Interactive Compiler)、70バイト

s=>string.Join(":",s.Select(a=>a<33?"00":a<66?"AM":a>89?"PM":a%65+""))

入力を小文字の文字列として受け取ります。最初に、charがスペースであるかどうかをチェックし、スペースである場合、それをに変換し00ます。次に、charがAかどうかを確認し、それをに変換しAMます。Zを再度チェックし、それをPM場合にます。最後に、charがすべてのチェックに合格した場合、アルファベット順1に変換されます。

@danaのおかげで-2バイト

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

// Input taking a string
s => 
// Join the following IEnumerable<char> with a ":" character
string.Join(":", 
// Map all the characters in the string
s.Select(a => 
// Is the char less than 33, aka a space?
a < 33 ? 
// If so, it's a "00"
"00" 
// Else, is this an 'A'?
: a < 66 ?
// If so, convert it to "AM"
"AM" : 
// If it's not 'A' or a space, could it be a 'Z'?
a > 89 ?
// If it is, turn the character into "PM"
"PM" : 
// If it fails all of the checks above, get the characters position in the alphabet and subtract one from that.
a % 65 + ""))



2

05AB1E、20 バイト

':ýð00:A24L„AMš„PMª‡

大幅に触発@ Mr.Xcoderすることにより、既存の05AB1E答えのコメントでの22-byter @Emigna

入力を小文字のリストとしてS取得します(入力を文字列として取得する場合、先頭が21バイトになります)。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

':ý            '# Join the (implicit) input list of characters by ":"
                #  i.e. ["e","a","s","y"," ","p","e","a","z","y"] → "e:a:s:y: :p:e:a:z:y"
ð00:            # Replace all spaces " " with "00"
                #  i.e. "e:a:s:y: :p:e:a:z:y" → "e:a:s:y:00:p:e:a:z:y"
A               # Push the lowercase alphabet
 24L            # Push a list in the range [1,24]
    AMš        # Prepend "AM" at the start of this list
        PMª    # And append "PM" at the end of the list
               # Transliterate; mapping letters to the list-items at the same indices
                # (and output the result implicitly)
                #  i.e. "e:a:s:y:00:p:e:a:z:y" → "4:AM:18:24:00:15:4:AM:PM:24"

1
ああ、はい。スペースを個別に置き換えると、バイトが節約されます。私はそれを試してみるべきだった。ニース:)
エミグナ



1

、26バイト

UB:Fθ«→≡ι ×0²a¦AM¦z¦PMI⌕βι

オンラインでお試しください!リンクは、コードの詳細バージョンです。入力を小文字で入力します(簡単に大文字に変更できます)。説明:

UB:

背景文字をに設定し:ます。これにより、正しい動きによって作成された出力値間のギャップが埋められます。

Fθ«→

各キャラクターをループし、毎回ギャップを残します。(キャンバスはこの時点ではまだ空なので、最初の動きは効果がありません。)

≡ι ×0²a¦AM¦z¦PM

文字を切り替えて、それがスペースの場合、aまたはz適切なコードを出力します。私×0²00ここの代わりに、後者が追加のセパレーターで2バイトかかるので使用します。

I⌕βι

それ以外の場合は、小文字のアルファベットの文字の0インデックス位置を文字列として出力します。


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