Gizli mesajı çözün!


11

Giriş

Bir gün, aniden bilgisayarınızda bir uyarı gördüğünüzde, CIA'daki ofisinizde rahatlamıştınız. Programlarınız yüzlerce kodlanmış mesajı ele geçirdi! Hızlı bir inceleme kodlama kuralını ortaya çıkarır, ancak hızlı kod çözme için bir programa ihtiyacınız vardır.

Meydan okuma

Virgülle ayrılmış bir dize listesi verilecektir. Her dize şunlardan birini içerir:

  • Kodlanmış mesajın bir kısmı
    • O olup olmadığı kodlu mesajın bir parçası olan değil şeklinde a=b. O unutmayın ise o ise mesajın parçası ab=c. Bu dizeyi kodlanmış mesaja ekleyin.
  • Kodlama şemasının bir parçası
    • Bu şeklinde olacak a=b. Bu, mesajdaki tüm a'ların b'ler ile değiştirilmesi gerektiği anlamına gelir. Bunun olabileceğini unutmayın a==, yani tüm a'lar = 'ile değiştirilmelidir.

Programınız daha sonra bulunan şemayı kullanarak kodu çözülen mesajı çıktılamalıdır.

Diğer bilgiler: Girişiniz yalnızca dizeleri ayırmak için virgül içerecektir. ! 1 # gibi başka karakterler içerebilir. Büyük harfler içermez. Kod çözme bilgisi bitleri birbirinin kodunu çözmez. Kod çözme bilgisinden yalnızca mesaj etkilenir. Her karakter için sadece bir yedek verilecektir, örneğin hayır"io,"i=u","i=g"

Örnekler

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

Çıktı:test 1

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

Çıktı:potatoes=life

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

Çıktı:another

Bu , bayt en kısa cevap kazanır!


oh evet, özür dilerim! editting
pydude

Geçişlilik ve dairesellik, örneğin "massega","e=a","a=e"ve benzerleri ne olacak?
Jonathan Allan

1
kod çözme bilgisi bitleri birbirinin kodunu çözmez. Kod çözme bilgisinden yalnızca mesaj etkilenir.
pydude

1
ayrıca, her karakter için sadece bir yedek verilecektir, örneğin no"io,"i=u","i=g"
pydude 21

1
Teşekkürler, bu bilgileri spesifikasyona eklemenizi öneririm.
Jonathan Allan

Yanıtlar:


1

Jöle , 19 bayt

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

Çevrimiçi deneyin!

Nasıl?

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

Çok ilginç, m2 "modulo 2 dilim" ne anlama geliyor?
Sihirli Ahtapot Urn

msolun sağdaki her elemanını alan ikili bir atomdur *. Burada, örneğin, ['x','=','y','<space>','a','=','b']m2verim olurdu ['x','y','a','b']. (* bir yansıma eklediğinde sağ sıfır olmadığı sürece.)
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})

Bu lambdaişlev bir dize listesi (giriş) alır ve bir dize (kodu çözülen mesaj) döndürür.

Örnekler:

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

İhtiyacınız var mı: -1 mi yoksa 2 mi çalışacak?
DSM

1
@DSM Bence gerekli çünkü kodlama şemasının bir parçası olmayan '=' == x[1:2]için doğru olacakx = 'a=bc'
vaultah

1
Ahh, güzel nokta!
DSM

2

Haskell, 85 bayt

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

kullanım

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

Açıklama

f bir arama tablosu oluşturur.

concat[c|c<-x,[]==f[c]] mesajı alır.

map(\v->maybe v id$lookup v$f x) arama yapar.


2

JavaScript (ES6), 87 bayt

(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 bayt

Girdi olarak virgülle ayrılmış bir liste alır. Sondaki yeni satıra dikkat edin

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

Çevrimiçi deneyin!

Açıklama:

İlk olarak, formun tüm ifadelerini .=.dizenin sonuna taşırız ve bunları çift virgül ( ,,) ile mesajdan ayırırız . Böylece bir sonraki adımda, önündeki her karakterin daha sonra ,,eşleşip =.eşleşmediğini kontrol ederek tüm kodlamaları bulabiliriz . Bu, M!&`(.).*,,.*\1=.|.+,tüm bu tür eşleşmeleri bulan ve bunları satır besleme ayrılmış bir dizeler listesine yerleştiren elde edilir . Daha sonra her dizeyi yalnızca bir kodlanmamış karakter veya karakterin kodlanmış sürümünü içerecek şekilde değiştiririz. Son olarak, tüm satır beslemelerini ve virgülleri boş dizeyle değiştiririz, böylece çıktımız güzel biçimlendirilir.


0

Toplu, 188 bayt

@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

Açıklama: Dizeler listesinde iki kez dolaşır ( forCSV biçiminde bir dizeyi rahatça beğenir). İlk kez, =ikinci karakter olarak a içermeyen dizeleri arar ve bunları sonuca birleştirir. İkinci kez, =ikinci karakter olarak bir içeren dizeleri arar ve yerine koymayı gerçekleştirir. (daha da kolay bir şekilde, ikame zaten Toplu biçimdedir.)



0

PHP, 89 87 bayt

iki versiyon:

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

komut satırı bağımsız değişkenlerinden girdi alır; ile çalıştırın -nr.

  • için parametreler oluşturan bağımsız değişkenler arasında döngü strtr
    (bağımsız değişken içeriyorsa çeviri =, başka ileti).
  • gerçekleştirmek strtr.

0

05AB1E , 31 bayt

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

Çevrimiçi deneyin!

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.