이 문제의 조건에 따라 어떻게 "복호화"할 수 있습니까?

mrNaNders0n

지금 파이썬으로 프로그래밍하는 법을 배우고 있는데 한 가지 문제를 해결할 수 없습니다. 주요 작업은 시간이 많이 걸리고 교육 과정에서 일종의 마감일에 가까워졌습니다. 제발 도와주세요!


문제의 조건 : N을 기준으로 소스 텍스트가 압축 될 행렬의 크기가 계산됩니다. 제곱근은 N에서 추출되고 하한은 행렬의 행 수로 취해집니다. 상한은 열 수로 간주됩니다. 제품이 N보다 작 으면 줄 수를 늘립니다.

예를 들어 "hello boy abstract pizza"라는 텍스트 줄이 있습니다.

이 문자열의 길이는 21이고 제곱근은 4.58입니다. 21 개의 요소는 4x5 행렬로 압축되지 않으므로 5x5 행렬을 사용합니다.

[
['h', 'e', 'l', 'l', 'o'], 
['b', 'o', 'y', 'a', 'b'], 
['s', 't', 'r', 'a', 'c'], 
['t', 'p', 'i', 'z', 'z'], 
['a']
]

마지막으로, 우리는 위에서 아래로 그리고 왼쪽에서 오른쪽으로 열에 문자를 표시하고 공백으로 열을 구분하여 암호화 된 결과를 생성합니다.

hbsta eotp lyri laaz obcz

텍스트 메시지를 암호화하는 코드와 디코딩을위한 디코더를 작성합니다.

이 함수는 원래 문자열 "s"를 가져와이를 암호화 (encode = true)하거나 해독 (encode = false)하지만 물론 원래 공백은 없습니다.


내가 이미 한 것은 "암호화"부분 (아래 코드)입니다. 하지만 "복호화"하는 방법을 알아낼 수 없습니다.

def TheRabbitFoot(s, encode):

    if encode:

        s = s.replace(' ', '')

        s_length = len(s)
        s_sqrt = round((s_length ** 0.5), 2)

        matrix_rows = int(s_sqrt // 1)
        matrix_cols = int(str(s_sqrt)[2:3])

        while matrix_rows * matrix_cols < s_length:
            matrix_rows += 1

        encrypt = []

        while len(s) > matrix_cols:
            encrypt.append(list(s[:matrix_cols]))
            s = s[matrix_cols:]
        else:
            encrypt.append(list(s))

        result = []

        for i in range(matrix_cols):
            for j in range(matrix_rows):
                if i < len(encrypt[j]):
                    result.append(encrypt[j][i])
            result.append(' ')

        result = ''.join(result).strip()

        print(result)

    else:

        ??????????

답변 해 주셔서 감사합니다! 다음은 설명입니다.

동일한 기능으로 암호화 된 문자열을 해독 할 수 있도록 함수의 "해독"부분을 코딩해야합니다. 위의 예에서는 암호화 된 문자열을 얻습니다.

hbsta eotp lyri laaz obcz

공백없이 다시 암호를 해독해야하므로 다음과 같은 문자열을 반환해야합니다.

helloboyabstractpizza

해당 문자열에서 2D 목록을 만들고 열을 반복하려고합니다.

else:

    decrypt = s.split()
    result = []

    for i in range(len(decrypt)):
        string = decrypt[i]
        string = list(string)
        decrypt[i] = string

    for i in range(len(decrypt[0]) - 1):
        for j in range(len(decrypt[i])):
            result.append(decrypt[j][i])

    print(''.join(result))

하지만 색인을 엉망으로 만들면 다음과 같이 표시됩니다.

helloboyastratpiz

그래서! 예외없이이 문제를 해결하는 방법을 알아 냈습니다! 다음은 전체 코드입니다.

def TheRabbitFoot(s, encode):

    def encrypt(string_to_encrypt):
        string_to_encrypt = string_to_encrypt.replace(' ', '')

        s_length = len(string_to_encrypt)
        s_sqrt = round((s_length ** 0.5), 2)

        matrix_rows = int(s_sqrt // 1)
        matrix_cols = int(str(s_sqrt)[2:3])

        while matrix_rows * matrix_cols < s_length:
            matrix_rows += 1

        encrypt_list = []

        while len(string_to_encrypt) > matrix_cols:
            encrypt_list.append(list(string_to_encrypt[:matrix_cols]))
            string_to_encrypt = string_to_encrypt[matrix_cols:]
        else:
            encrypt_list.append(list(string_to_encrypt))

        result_list = []

        for i in range(matrix_cols):
            for j in range(matrix_rows):
                if i < len(encrypt_list[j]):
                    result_list.append(encrypt_list[j][i])
            result_list.append(' ')

        result_list = ''.join(result_list).strip()

        return result_list

    def decrypt(encoded_string):

        encoded_string = encoded_string.split()
        result = []
        max_row_len = len(max(encoded_string, key=len))
        index = 0
        
        while index < max_row_len:
            for j in range(len(encoded_string)):
                if len(encoded_string[j]) - 1 < index:
                    break
                else:
                    result.append(encoded_string[j][index])
            index += 1
        result = ''.join(result)
        print(result)
        return result

    if encode:
        encrypt(s)
    else:
        decrypt(s)
D 허드슨
def decode(encoded_string):
    # Split the characters at whitespace.
    columns = encoded_string.split()

    characters = []
    index = 0

    # Loop over the columns consuming the characters until
    # we have no more and an IndexError occurs.
    while True:
        for column in columns:
            try:
                character = column[index]
            except IndexError:
                return ''.join(characters)
            characters.append(character)
        index += 1

예 :

decode('hbsta eotp lyri laaz obcz')
>>> 'helloboyabstractpizza'

설명

  1. 먼저 문자열을 columns. 예제의 경우 다음과 같은 목록입니다.['hbsta', 'eotp', 'lyri', 'laaz', 'obcz']
  2. characters디코딩 된 순서로 문자를 보관할 목록 정의합니다 .
  3. index현재보고있는 문자 오프셋을 보유 하는 변수를 정의합니다 .
  4. 목록 index에있는 각 문자열 위치에 있는 문자를 가져 와서 columns목록에 추가 하는 루프를 시작 characters합니다. 따라서 각 문자열에서 0 번째 위치에있는 문자를 가져온 다음 인덱스를 늘리고 각 문자열의 첫 번째 위치에서 문자를 가져옵니다.
  5. 루프를 한 번 종료하고 index주어진 column문자열에 존재하지 않는 문자를 가리 킵니다 .
  6. 이 중지 기준이 충족되면 모든 문자를 빈 문자열로 결합합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

RSA-클라이언트 (서버 컨텍스트에서)는 수신 데이터를 어떻게 암호화 / 복호화 할 수 있습니까?

분류에서Dev

이것은 어떤 종류의 Lua 난독 화 (암호화)이며, 가능하다면 어떻게 이것을 난독 화 (복호화) 할 수 있습니까?

분류에서Dev

타사 패키지없이 Delphi에서 간단한 XOR 암호화 / 복호화 메커니즘을 어떻게 적용 할 수 있습니까?

분류에서Dev

조건에 따라 테이블 뷰에서 스칼라 함수를 어떻게 호출 할 수 있습니까?

분류에서Dev

파이썬의 조건에 따라 여러 데이터 프레임 열의 데이터 유형을 어떻게 변경할 수 있습니까?

분류에서Dev

jquery에서 ajax 호출의 응답에 따라 특정 if 조건에서 PHP 페이지의 http respose 코드를 어떻게 변경할 수 있습니까?

분류에서Dev

콘텐츠에 따라 부모 요소의 높이를 어떻게 조정할 수 있습니까?

분류에서Dev

RSA 복호화 예외 : 복호화 할 데이터 길이가이 키의 크기에 적합하지 않습니다.

분류에서Dev

OpenSSL로 AES-256 CBC를 어떻게 암호화 / 복호화 할 수 있습니까?

분류에서Dev

params에 따라 html 데이터를 어떻게 분할 할 수 있습니까?

분류에서Dev

사용중인 반복기의 요소에 따라 여러 변수 사용을 어떻게 처리 할 수 있습니까? 이 루비 코드를 어떻게 건조시킬 수 있습니까?

분류에서Dev

MvvmCross에서 SQLite 암호화 / 복호화를 사용할 수 있습니까?

분류에서Dev

여러 OR 조건이있는 if 문에서 실패한 조건을 어떻게 식별 할 수 있습니까?

분류에서Dev

Netlogo에서 시간이 지남에 따라 거북이의 색을 어떻게 변경할 수 있습니까?

분류에서Dev

파이썬 : 이름에 따라 glob.list 내의 요소를 어떻게 정렬 할 수 있습니까?

분류에서Dev

r의 다른 값에 따라 데이터 프레임의 값을 어떻게 변경할 수 있습니까?

분류에서Dev

조건에 따라 쿼리에서 if else 조건을 사용할 때 PHP CODEIGNITER의 뷰에서 해당 값을 어떻게 얻을 수 있습니까?

분류에서Dev

값에 따라 ANTD 테이블의 셀 색상을 어떻게 변경할 수 있습니까?

분류에서Dev

React Navigation 5 headerRight의 텍스트를 상태에 따라 어떻게 업데이트 할 수 있습니까?

분류에서Dev

항목이 튜플 인 행의 마스크에 따라 열을 어떻게 필터링 할 수 있습니까?

분류에서Dev

AES 암호화 / 복호화에서 복호화 된 파일을 문자열로 가져올 수 없습니다.

분류에서Dev

std :: string의 복호화에 추가 패딩 바이트가 있습니까?

분류에서Dev

조건에 따라 DataFrame의 특정 포함되거나 제외 된 열의 모든 값을 어떻게 무시할 수 있습니까?

분류에서Dev

한 줄의 코드에서 조건에 따라 수정 된 사전을 반환하기 위해 맵을 어떻게 사용할 수 있습니까?

분류에서Dev

조건에 따라 Bash의 echo / printf에게 이스케이프 코드를 삼키도록 어떻게 알릴 수 있습니까?

분류에서Dev

Google 시트에서 어떻게 할 수 있습니까? 조건에 따라 곱하다

분류에서Dev

조건에 따라 foldLeft 함수의 변수를 업데이트 할 수 있습니까?

분류에서Dev

열 항목을 기반으로 특정 조건에 따라 Pandas 열 데이터를 어떻게 변경할 수 있습니까?

분류에서Dev

JavaScript If / else 문에서 조건에 따라 스크립트 태그를 어떻게 렌더링 할 수 있습니까?

Related 관련 기사

  1. 1

    RSA-클라이언트 (서버 컨텍스트에서)는 수신 데이터를 어떻게 암호화 / 복호화 할 수 있습니까?

  2. 2

    이것은 어떤 종류의 Lua 난독 화 (암호화)이며, 가능하다면 어떻게 이것을 난독 화 (복호화) 할 수 있습니까?

  3. 3

    타사 패키지없이 Delphi에서 간단한 XOR 암호화 / 복호화 메커니즘을 어떻게 적용 할 수 있습니까?

  4. 4

    조건에 따라 테이블 뷰에서 스칼라 함수를 어떻게 호출 할 수 있습니까?

  5. 5

    파이썬의 조건에 따라 여러 데이터 프레임 열의 데이터 유형을 어떻게 변경할 수 있습니까?

  6. 6

    jquery에서 ajax 호출의 응답에 따라 특정 if 조건에서 PHP 페이지의 http respose 코드를 어떻게 변경할 수 있습니까?

  7. 7

    콘텐츠에 따라 부모 요소의 높이를 어떻게 조정할 수 있습니까?

  8. 8

    RSA 복호화 예외 : 복호화 할 데이터 길이가이 키의 크기에 적합하지 않습니다.

  9. 9

    OpenSSL로 AES-256 CBC를 어떻게 암호화 / 복호화 할 수 있습니까?

  10. 10

    params에 따라 html 데이터를 어떻게 분할 할 수 있습니까?

  11. 11

    사용중인 반복기의 요소에 따라 여러 변수 사용을 어떻게 처리 할 수 있습니까? 이 루비 코드를 어떻게 건조시킬 수 있습니까?

  12. 12

    MvvmCross에서 SQLite 암호화 / 복호화를 사용할 수 있습니까?

  13. 13

    여러 OR 조건이있는 if 문에서 실패한 조건을 어떻게 식별 할 수 있습니까?

  14. 14

    Netlogo에서 시간이 지남에 따라 거북이의 색을 어떻게 변경할 수 있습니까?

  15. 15

    파이썬 : 이름에 따라 glob.list 내의 요소를 어떻게 정렬 할 수 있습니까?

  16. 16

    r의 다른 값에 따라 데이터 프레임의 값을 어떻게 변경할 수 있습니까?

  17. 17

    조건에 따라 쿼리에서 if else 조건을 사용할 때 PHP CODEIGNITER의 뷰에서 해당 값을 어떻게 얻을 수 있습니까?

  18. 18

    값에 따라 ANTD 테이블의 셀 색상을 어떻게 변경할 수 있습니까?

  19. 19

    React Navigation 5 headerRight의 텍스트를 상태에 따라 어떻게 업데이트 할 수 있습니까?

  20. 20

    항목이 튜플 인 행의 마스크에 따라 열을 어떻게 필터링 할 수 있습니까?

  21. 21

    AES 암호화 / 복호화에서 복호화 된 파일을 문자열로 가져올 수 없습니다.

  22. 22

    std :: string의 복호화에 추가 패딩 바이트가 있습니까?

  23. 23

    조건에 따라 DataFrame의 특정 포함되거나 제외 된 열의 모든 값을 어떻게 무시할 수 있습니까?

  24. 24

    한 줄의 코드에서 조건에 따라 수정 된 사전을 반환하기 위해 맵을 어떻게 사용할 수 있습니까?

  25. 25

    조건에 따라 Bash의 echo / printf에게 이스케이프 코드를 삼키도록 어떻게 알릴 수 있습니까?

  26. 26

    Google 시트에서 어떻게 할 수 있습니까? 조건에 따라 곱하다

  27. 27

    조건에 따라 foldLeft 함수의 변수를 업데이트 할 수 있습니까?

  28. 28

    열 항목을 기반으로 특정 조건에 따라 Pandas 열 데이터를 어떻게 변경할 수 있습니까?

  29. 29

    JavaScript If / else 문에서 조건에 따라 스크립트 태그를 어떻게 렌더링 할 수 있습니까?

뜨겁다태그

보관