隠されたメッセージをデコードします!


11

前書き

ある日、突然CIAのオフィスでリラックスしていましたが、突然コンピューターにアラートが表示されました。あなたのプログラムは何百ものコード化されたメッセージを傍受しました!簡単な検査でエンコードのルールが明らかになりますが、高速でデコードするにはプログラムが必要です。

チャレンジ

コンマで区切られた文字列のリストが表示されます。各文字列には次のいずれかが含まれます。

  • コード化されたメッセージの一部
    • それがフォームにないならコード化されたメッセージの一部ですa=b。それそうならメッセージの一部であることに注意してくださいab=c。この文字列をコード化されたメッセージに追加します。
  • エンコードスキームの一部
    • これはの形式になりa=bます。つまり、メッセージ内のすべてのaをbに置き換える必要があります。これはである可能性があることに注意してくださいa==。つまり、すべてのaを=に置き換える必要があります。

プログラムは、見つかったスキームを使用してデコードされたメッセージを出力する必要があります。

その他の情報:入力には、文字列を区切るためのカンマのみが含まれます。!1#など、他の文字を含めることができます。大文字は含まれません。デコード情報のビットは互いにデコードしません。メッセージのみがデコード情報の影響を受けます。各文字に対して1つの置換のみが与えられます。たとえば、no"io,"i=u","i=g"

入力:"ta","y=s","y","a=e","b=t","b"," ","j","j=1"

出力:test 1

入力:"z=p","zota","g=e","yugkb","y=t","u=o","k=s","li","fg","b=="

出力:potatoes=life

入力:"p","=","==n","ot","p=a","hiz","i=e","z=r"

出力:another

これはなので、バイト単位の最短回答が勝ちです!


ああ、ごめんなさい!編集
pydude

推移性と循環性は"massega","e=a","a=e"どうですか?
ジョナサンアラン

1
ビットのデコード情報は互いにデコードしません。メッセージのみがデコード情報の影響を受けます。
pydude

1
また、各文字に対して1つの置換のみが与えられます。例:no"io,"i=u","i=g"
pydude

1
おかげで、この情報を仕様に追加することをお勧めします。
ジョナサンアラン

回答:


1

ゼリー、19 バイト

ḊṖ⁼“=”
ÇÐfKm2yÇÐḟF$

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

どうやって?

ḊṖ⁼“=” - Link 1, isMappngElement?: string
Ḋ      - dequeue
 Ṗ     - pop
   “=” - char-list,['=']
  ⁼    - equal?

ÇÐfKm2yÇÐḟF$ - Main link: list of strings
 Ðf          - filter keep:
Ç            -     last link (1) as a monad
   K         - join with spaces
    m2       - modulo 2 slice (every other character)
           $ - last two links as a monad:
        Ðḟ   -     filter discard:
       Ç     -         last link (1) as a monad
          F  -     flatten
      y      - translate right according to the mapping of left

非常に興味深いことに、m2「モジュロ2スライス」とはどういう意味ですか?
魔法のタコ

mは、left *のすべての右要素をとる二項アトムです。ここでは、たとえば、次のように['x','=','y','<space>','a','=','b']m2なり['x','y','a','b']ます。(*リフレクションを追加するときにrightがゼロでない場合。)
ジョナサンアラン

5

Python 3、98

lambda l:''.join(x*('='!=x[1:-1])for x in l).translate({'='!=x[1:-1]or ord(x[0]):x[2:]for x in l})

このlambda関数は、文字列のリストを受け取り(入力)、文字列(デコードされたメッセージ)を返します。

例:

>>> f(['ta', 'y=s', 'y', 'a=e', 'b=t', 'b', ' ', 'j', 'j=1'])
'test 1'
>>> f(['z=p', 'zota', 'g=e', 'yugkb', 'y=t', 'u=o', 'k=s', 'li', 'fg', 'b=='])
'potatoes=life'
>>> f(['p', '=', '==n', 'ot', 'p=a', 'hiz', 'i=e', 'z=r'])
'another'

:-1が必要ですか、または:2が機能しますか?
DSM

1
@DSM私はそれが必要だ'=' == x[1:2]と思うのx = 'a=bc'は、コード体系の一部ではないために当てはまるからです
-vaultah

1
ああ、良い点!
DSM

2

Haskell、85バイト

f x=[(a,b)|[a,'=',b]<-x]
h x=map(\v->maybe v id$lookup v$f x)$concat[c|c<-x,[]==f[c]]

使用法

>h ["p","=","==n","ot","p=a","hiz","i=e","z=r"]
>"another"

説明

f ルックアップテーブルを作成します。

concat[c|c<-x,[]==f[c]] メッセージを抽出します。

map(\v->maybe v id$lookup v$f x) ルックアップを実行します。


2

JavaScript(ES6)、87バイト

(l,s='',d={})=>l.map(v=>/.=./.test(v)?d[v[0]]=v[2]:s+=v)&&[...s].map(c=>d[c]||c).join``

<input id=a oninput="try{b.innerText=((l,s='',d={})=>l.map(v=>/.=./.test(v)?d[v[0]]=v[2]:s+=v)&&[...s].map(c=>d[c]||c).join``)(eval(`[${a.value}]`))}catch(e){}"/>
<p id=b />


1

網膜、84 82 77 74バイト

入力としてコンマ区切りリストを受け取ります。末尾の改行に注意してください

^ | $
、、
+ `、(。=。)(、。*)
$ 2 $ 1
M!& `(。)。* ,,。* \ 1 =。|。+、
% `(。)。*、$ |。*(。)
$ 1 $ 2
\ n |、

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

説明:

最初に、フォームのすべての式を.=.文字列の最後に移動し、ダブルコンマ(,,)でメッセージからこれらを分離します。これにより、次のステップで、前方の各文字に,,一致するものがあるかどうかを確認することで、すべてのエンコーディングを見つけることができます=.。これは、このM!&`(.).*,,.*\1=.|.+,ような一致をすべて検出し、それらを改行で区切られた文字列のリストに配置することにより実現されます。次に、各文字列を変更して、エンコードされていない1文字またはエンコードされたバージョンの文字のみを含めるようにします。最後に、すべての改行とコンマを空の文字列に置き換えて、出力が適切にフォーマットされるようにします。


0

バッチ、188バイト

@echo off
set/pm=
set c=
for %%s in (%m%)do call:c %%s "%%c%%%%~s" not
for %%s in (%m%)do call:c %%s "%%c:%%~s%%"
echo %c%
exit/b
:c
set s=%~1
if %3 "%s:~1,1%"=="=" call set c=%~2

説明:文字列のリストを2回ループします(forCSV形式の文字列が便利です)。最初に=、2番目の文字としてを含まない文字列を探し、それらを結果に連結します。2回目=は、2番目の文字としてを含む文字列を探し、置換を実行します。(さらに便利なことに、置換は既にバッチ形式になっています。)



0

PHP、89 87バイト

2つのバージョン:

while(a&$s=$argv[++$i])3==strlen($s)&"="==$s[1]?$t[$s[0]]=$s[2]:$m.=$s;echo strtr($m,$t);
while(a&$s=$argv[++$i])preg_match("#^.=.$#",$s)?$t[$s[0]]=$s[2]:$m.=$s;echo strtr($m,$t);

コマンドライン引数から入力を受け取ります。で実行し-nrます。

  • strtr
    (引数が含まれている場合は翻訳=、メッセージはその他)のパラメーターを作成する引数をループします。
  • 実行しますstrtr

0

05AB1E、31バイト

vy'=åyg3Q&iyˆyS}})øJÁ¨`¹¯KJ.Ás‡

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

vy              }
  '=åyg3Q&                      # See if it's length 3 with an equals in the mid.
          iyˆyS                 # If so, add to global array, split into chars.
               } 
                 )øJÁ¨`         # Transpose, join, and remove the middle =.
                       ¹¯KJ     # Push original input without decryption key.
                           .Ás‡ # Shift stack to the right, swap and transliterate.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.