Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình giải mã mã để gỡ bom bằng Python

Giả sử có một quả bom mà bạn định giải phóng, và thời gian của bạn sắp hết! Bạn có một mã mảng tròn có độ dài là n và có khóa k. Bây giờ để giải mã mã, bạn phải thay thế mọi số. Tất cả các số được thay thế đồng thời. Có một số quy tắc -

  • Nếu k> 0 thì thay số thứ i bằng tổng k số tiếp theo.

  • Nếu k <0 thì thay số thứ i bằng tổng của k số trước đó.

  • Nếu k =0 thì thay số thứ i bằng 0.

Ở đây mã là vòng tròn, vì vậy phần tử tiếp theo của mã [n-1] là mã [0], và phần tử trước của mã [0] là mã [n-1]. Cuối cùng, chúng tôi phải trả lại mã đã giải mã.

Vì vậy, nếu đầu vào giống như mã =​​[8,2,3,5], k =3, thì đầu ra sẽ là [10, 16, 15, 13], bởi vì, với mỗi khóa, chúng tôi thay thế bằng tổng ba phần tử tiếp theo , do đó mã [0] sẽ là 10, mã [1] sẽ là 16, mã [2] sẽ là 15 và mã [3] sẽ là 13.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau &mius;

  • decode:=một danh sách mới

  • đối với tôi trong phạm vi từ 0 đến kích thước của mã - 1, thực hiện

    • nếu k> 0, thì

      • tổng:=0

      • j:=i + 1

      • m:=k

      • trong khi m khác 0, thực hiện

        • sum:=sum + code [j mod độ dài của mã]

        • m:=m - 1

        • j:=j + 1

      • chèn tổng vào cuối giải mã

    • ngược lại khi k giống 0 thì

      • chèn 0 vào cuối giải mã

    • nếu không,

      • tổng:=0

      • j:=i-1

      • m:=k

      • trong khi m khác 0, thực hiện

        • sum:=sum + code [j mod độ dài của mã]

        • m:=m + 1

        • j:=j - 1

      • chèn tổng vào cuối giải mã

  • trả về giải mã

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 def giải quyết (mã, k):giải mã =​​[] cho tôi trong phạm vi (len (mã)):nếu k> 0:sum =0 j =i + 1 m =k trong khi (m):sum + =mã [j% len (code)] m- =1 j + =1 decode.append (sum) elif k ==0:decode.append (0) else:sum =0 j =i-1 m =k while (m) :sum + =code [j% len (code)] m + =1 j- =1 decode.append (sum) return decodecode =[8,2,3,5] k =3print (Giải (code, k))  

Đầu vào

 [8,2,3,5], 3 

Đầu ra

 [10, 16, 15, 13]