Decodifica il messaggio nascosto!


11

introduzione

Un giorno, ti stavi solo rilassando nel tuo ufficio nella CIA, quando all'improvviso vedi un avviso sul tuo computer. I tuoi programmi hanno appena intercettato centinaia di messaggi in codice! Un rapido esame rivela la regola per la codifica, ma è necessario un programma per decodificare rapidamente.

Sfida

Ti verrà dato un elenco di stringhe, separate da virgole. Ogni stringa conterrà:

  • Parte del messaggio in codice
    • E 'parte del messaggio in codice se è non è in forma a=b. Nota che fa parte del messaggio, se lo è ab=c. Aggiungi questa stringa al messaggio codificato.
  • Parte dello schema di codifica
    • Questo sarà sotto forma di a=b. Ciò significa che tutte le a nel messaggio devono essere sostituite da b. Si noti che potrebbe essere a==, il che significa che tutto a deve essere sostituito con = 's.

Il programma deve quindi emettere il messaggio, decodificato utilizzando lo schema trovato.

Altre informazioni: il tuo input conterrà solo virgole per la separazione delle stringhe. Potrebbe contenere altri caratteri, come! 1 #, ecc. Non conterrà lettere maiuscole. I bit di informazioni di decodifica non si decodificano a vicenda. Solo il messaggio è interessato dalle informazioni di decodifica. Sarà data una sola sostituzione per ciascun personaggio, ad es. No"io,"i=u","i=g"

Esempi

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

Produzione:test 1

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

Produzione:potatoes=life

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

Produzione:another

Questo è , quindi vince la risposta più breve in byte!


oh sì, scusa! Editting
pydude

Che dire di transitività e circolarità, ad es. "massega","e=a","a=e"E simili?
Jonathan Allan,

1
bit di informazioni di decodifica non si decodificano a vicenda. Solo il messaggio è interessato dalle informazioni di decodifica.
pydude,

1
inoltre, verrà fornito un solo sostituto per ciascun personaggio, ad esempio no"io,"i=u","i=g"
pydude,

1
Grazie, suggerisco di aggiungere queste informazioni alle specifiche.
Jonathan Allan,

Risposte:


1

Gelatina , 19 byte

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

Provalo online!

Come?

ḊṖ⁼“=” - 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

Molto interessante, cosa significa "modulo 2 slice" m2?
Magic Octopus Urn

mè un atomo diadico che prende ogni elemento destro di sinistra *. Qui, per esempio, ['x','=','y','<space>','a','=','b']m2cederebbe ['x','y','a','b']. (* a meno che right non sia zero quando si aggiunge un riflesso.)
Jonathan Allan,

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})

Questa lambdafunzione riceve un elenco di stringhe (input) e restituisce una stringa (il messaggio decodificato).

Esempi:

>>> 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'

Hai bisogno di: -1 o: 2 funzionano?
DSM,

1
@DSM Penso che sia necessario perché '=' == x[1:2]sarà vero per x = 'a=bc', che non fa parte dello schema di codifica
vaultah

1
Ahh, buon punto!
DSM,

2

Haskell, 85 byte

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

uso

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

Descrizione

f crea una tabella di ricerca.

concat[c|c<-x,[]==f[c]] estrae il messaggio.

map(\v->maybe v id$lookup v$f x) perfeziona la ricerca.


2

JavaScript (ES6), 87 byte

(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

Retina, 84 82 77 74 byte

Accetta un elenco separato da virgole come input. Nota la nuova riga finale

^ | $
,,
+ `, (. =.) (,. *)
$ 2 $ 1
M & `* ,, * \ 1 =! (.) |.... +,
% `*, $ (.) |.. * (.)
$ 1 $ 2
\ N |,

Provalo online!

Spiegazione:

Innanzitutto, spostiamo tutte le espressioni del modulo .=.alla fine della stringa e le separiamo dal messaggio con una doppia virgola ( ,,). Questo è così che nel passaggio successivo, possiamo trovare tutte le codifiche controllando se ogni personaggio davanti a ,,ha una corrispondenza in =.seguito. Ciò si ottiene mediante il M!&`(.).*,,.*\1=.|.+,quale trova tutte queste corrispondenze e le inserisce in un elenco separato di stringhe di avanzamento riga. Modifichiamo quindi ogni stringa per contenere solo un carattere non codificato o la versione codificata del carattere. Alla fine sostituiamo tutti i feed di linea e le virgole con la stringa vuota in modo che il nostro output sia formattato correttamente.


0

Lotto, 188 byte

@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

Spiegazione: scorre due volte l'elenco delle stringhe ( forpreferisce una stringa in formato CSV). La prima volta, cerca le stringhe che non contengono un =secondo carattere e le concatena al risultato. La seconda volta, cerca le stringhe che contengono un =come secondo carattere ed esegue la sostituzione. (ancora più conveniente, la sostituzione è già in formato batch.)



0

PHP, 89 87 byte

due versioni:

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);

accetta input dagli argomenti della riga di comando; corri con -nr.

  • scorrere ciclicamente gli argomenti creando parametri per strtr
    (traduzione se l'argomento contiene =, messaggio altro).
  • esibirsi strtr.

0

05AB1E , 31 byte

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

Provalo online!

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