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

Python에서 주어진 위치 수로 문자를 이동한 후 최종 문자열을 얻는 프로그램

<시간/>

소문자 문자열 s와 길이가 s의 길이와 동일한 shift라고 하는 또 다른 정수 목록이 있다고 가정합니다. 여기에서 shifts[i]의 각 요소는 shifts[i] 위치만큼 s의 첫 번째 i + 1 문자를 이동한다는 것을 나타냅니다. 이동이 'z'를 가로지르면 'a'로 마무리됩니다. s에 shift를 적용한 후 결과 문자열을 찾아야 합니다.

따라서 입력이 s ="tomato" shifts =[2, 5, 2, 3, 7, 4]와 같으면 출력은 "qjcoes"이므로 첫 번째 문자를 2자리 이동한 후 't '에서 'v'로 변환하므로 문자열은 "vomato"입니다. 그 다음 처음 두 문자는 5자리입니다. 이제 문자열은 "atmato"가 되고 마지막으로 문자열은 "qjcoes"가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • start :="a"의 ASCII
  • res :=s의 각 i에 대한 (i - 시작)의 ASCII 목록
  • 시프트 범위 크기의 i에 대해 - 2에서 0, 1 감소, do
    • shifts[i] :=shifts[i] + shifts[i + 1]
  • 0 ~ s - 1 크기 범위의 i에 대해
    • c :=(res[i] + shifts[i]) 모드 26
    • res[i] :=ASCII 문자(c + 시작)
  • res 문자를 문자열로 결합하고 반환

예시

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

def solve(s, shifts):
   start = ord("a")
   res = [ord(i) - start for i in s]

   for i in range(len(shifts) - 2, -1, -1):
      shifts[i] += shifts[i + 1]

   for i in range(len(s)):
      c = (res[i] + shifts[i]) % 26
      res[i] = chr(c + start)

   return "".join(res)

s = "tomato"
shifts = [2, 5, 2, 3, 7, 4]
print(solve(s, shifts))

입력

[2, 1], 3, 2

출력

qjcoes