ถอดรหัสข้อความที่ซ่อนอยู่!


11

บทนำ

อยู่มาวันหนึ่งคุณแค่ผ่อนคลายในสำนักงานของคุณในซีไอเอเมื่อจู่ ๆ คุณเห็นการแจ้งเตือนบนคอมพิวเตอร์ของคุณ โปรแกรมของคุณได้ดักจับข้อความที่เข้ารหัสหลายร้อยข้อความ! การตรวจสอบอย่างรวดเร็วเปิดเผยกฎสำหรับการเข้ารหัส แต่คุณต้องการโปรแกรมเพื่อถอดรหัสอย่างรวดเร็ว

ท้าทาย

คุณจะได้รับรายการสตริงคั่นด้วยเครื่องหมายจุลภาค แต่ละสตริงจะมี:

  • ส่วนหนึ่งของข้อความที่เข้ารหัส
    • มันเป็นส่วนหนึ่งของข้อความที่เข้ารหัสถ้ามันเป็นไม่ได้a=bในรูปแบบ หมายเหตุว่ามันเป็นab=cส่วนหนึ่งของข้อความถ้ามันเป็น เพิ่มสตริงนี้ไปยังข้อความที่เข้ารหัส
  • ส่วนหนึ่งของรูปแบบการเข้ารหัส
    • a=bนี้จะเป็นในรูปแบบของ นั่นหมายความว่า a's ทั้งหมดในข้อความจะต้องถูกแทนที่ด้วย b's โปรดทราบว่าอาจเป็นได้a==ซึ่งหมายความว่าทุกอย่างของ `s จะต้องถูกแทนที่ด้วย = 's

โปรแกรมของคุณจะต้องส่งออกข้อความถอดรหัสโดยใช้รูปแบบที่พบ

ข้อมูลอื่น ๆ : ข้อมูลที่คุณป้อนจะมีเครื่องหมายจุลภาคสำหรับการแยกสตริงเท่านั้น มันอาจมีตัวละครอื่น ๆ เช่น! 1 # ฯลฯ มันจะไม่มีตัวอักษรตัวพิมพ์ใหญ่ บิตของข้อมูลการถอดรหัสไม่ได้ถอดรหัสซึ่งกันและกัน เฉพาะข้อความที่ได้รับผลกระทบจากข้อมูลการถอดรหัส จะมีการเปลี่ยนหนึ่งตัวสำหรับแต่ละอักขระเช่นไม่"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

นี่คือดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ!


โอ้ใช่ขอโทษ! editting
pydude

สิ่งที่เกี่ยวกับความไวและความกลมเช่น"massega","e=a","a=e"และชอบ?
Jonathan Allan

1
บิตของข้อมูลการถอดรหัสไม่ได้ถอดรหัสซึ่งกันและกัน เฉพาะข้อความที่ได้รับผลกระทบจากข้อมูลการถอดรหัส
pydude

1
นอกจากนี้จะมีการเปลี่ยนเพียงครั้งเดียวสำหรับตัวละครแต่ละตัวเช่น no"io,"i=u","i=g"
pydude

1
ขอบคุณฉันขอแนะนำให้เพิ่มข้อมูลนี้ในข้อมูลจำเพาะ
Jonathan Allan

คำตอบ:


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 "modulo 2 slice" m2 หมายถึงอะไร
Magic Octopus Urn

mเป็นอะตอม dyadic ที่ใช้องค์ประกอบที่ถูกต้องของซ้าย * นี่ยกตัวอย่างเช่นจะให้ผลผลิต['x','=','y','<space>','a','=','b']m2 ['x','y','a','b'](* เว้นแต่ว่าถูกต้องจะเป็นศูนย์เมื่อมันเพิ่มการสะท้อนกลับ)
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})

นี้ 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=.|.+,ที่พบการแข่งขันดังกล่าวทั้งหมดและวางลงในรายการที่คั่น linefeed จากนั้นเราจะปรับเปลี่ยนแต่ละสตริงให้มีอักขระที่ไม่ได้เข้ารหัสหนึ่งตัวเท่านั้นหรืออักขระที่เข้ารหัสรุ่น ในที่สุดเราก็เปลี่ยน linefeeds และเครื่องหมายจุลภาคทั้งหมดด้วยสตริงว่างเพื่อให้รูปแบบผลลัพธ์ของเราเป็นอย่างดี


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

คำอธิบาย: วนรอบรายการสตริงสองครั้ง ( forชอบสตริงในรูปแบบ CSV) ในครั้งแรกให้ค้นหาสตริงที่ไม่มี=อักขระตัวที่สองและเชื่อมโยงผลลัพธ์เหล่านั้นเข้าด้วยกัน ครั้งที่สองค้นหาสตริงที่ประกอบด้วย=อักขระที่สองและทำการทดแทน (สะดวกยิ่งขึ้นการแทนที่อยู่ในรูปแบบแบทช์แล้ว)



0

PHP, 89 87 ไบต์

สองรุ่น:

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.