Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 폭탄을 제거하기 위해 코드를 해독하는 프로그램

<시간/>

제거하려는 폭탄이 있고 시간이 다되었다고 가정해 봅시다! 길이가 n이고 키가 k인 원형 배열 코드가 있습니다. 이제 코드를 해독하려면 모든 숫자를 바꿔야 합니다. 모든 숫자가 동시에 대체됩니다. 몇 가지 규칙이 있습니다 -

  • k> 0이면 i번째 숫자를 다음 k 숫자의 합으로 바꿉니다.

  • k <0이면 i번째 숫자를 이전 k개의 숫자의 합으로 바꿉니다.

  • k =0이면 i번째 숫자를 0으로 바꿉니다.

여기에서 코드는 원형이므로 code[n-1]의 다음 요소는 code[0]이고 code[0]의 이전 요소는 code[n-1]입니다. 마지막으로 해독된 코드를 반환해야 합니다.

따라서 입력이 code =[8,2,3,5], k =3과 같으면 출력은 [10, 16, 15, 13]이 됩니다. 왜냐하면 각 키에 대해 다음 세 요소 합계로 대체하기 때문입니다. , 따라서 code[0]은 10, code[1]은 16, code[2]는 15, code[3]은 13이 됩니다.

이 문제를 해결하려면 다음 단계를 따르십시오. &mius;

  • 디코드 :=새 목록

  • 범위 0에서 코드 크기 - 1에 있는 i의 경우 수행

    • k> 0이면

      • 합계 :=0

      • j :=i+1

      • m :=k

      • m이 0이 아닌 동안 수행

        • 합계 :=합계 + 코드[j 모드 코드 길이]

        • m :=m - 1

        • j :=j + 1

      • 디코딩 끝에 합계 삽입

    • 그렇지 않으면 k가 0과 같을 때

      • 디코딩 끝에 0 삽입

    • 그렇지 않으면

      • 합계 :=0

      • j :=i-1

      • m :=k

      • m이 0이 아닌 동안 수행

        • 합계 :=합계 + 코드[j 모드 코드 길이]

        • m :=m + 1

        • j :=j - 1

      • 디코딩 끝에 합계 삽입

  • 반환 디코딩

예제(파이썬)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(code, k):디코드 =[] for i in range(len(code)):if k> 0:sum =0 j =i+1 m =k while(m):sum+=code [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(solve(code, k)) 

입력

[8,2,3,5], 3

출력

[10, 16, 15, 13]