컴퓨터 과학자는 아마도 팝 및 푸시 의 기본 목록 작업에 익숙 할 것입니다 . 요소 목록을 수정하는 간단한 작업입니다. 그러나 작동 플롭에 대해 들어 본 적이 있습니까? ( 플립 플롭 에서와 같이 )? 꽤 간단합니다. 숫자 n이 주어지면 목록 의 처음 n 요소를 반대로 바꿉니다 . 예를 들면 다음과 같습니다.
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a.flop(4)
[4, 3, 2, 1, 5, 6, 7, 8, 9, 10]
플롭 작업의 멋진 점은 정렬 과 같은 멋진 작업을 목록에 사용할 수 있다는 것 입니다. 우리는 플롭과 비슷한 것을 할 것입니다 :
정수 목록이 주어지면 "이웃"입니다. 즉, 모든 중복 요소가 연속적으로 나타나도록 정렬합니다.
이것은 퍼로 할 수 있습니다! 예를 들어, 다음 목록을 작성하십시오.
>>> a = [3, 2, 1, 4, 3, 3, 2]
>>> a.flop(4)
[4, 1, 2, 3, 3, 3, 2]
>>> a.flop(3)
[2, 1, 4, 3, 3, 3, 2]
>>> a.flop(6)
[3, 3, 3, 4, 1, 2, 2]
이를 통해 오늘날의 과제를 정의 할 수 있습니다.
정수 목록이 주어지면 목록이 인접하게되는 모든 플롭 세트를 출력하십시오.
마지막 목록을 예로 사용하면 다음을 출력해야합니다.
4
3
6
리스트를 4, 3, 6으로 플로 핑하면 인접리스트가됩니다. 리스트에 인접한 가장 짧은 플롭리스트를 인쇄 할 필요 는 없습니다 . 인쇄 한 경우 :
4
4
4
3
1
1
6
2
2
대신 이것은 여전히 유효한 출력입니다. 그러나 목록의 길이보다 큰 숫자는 출력 하지 않을 수 있습니다 . list의 a = [1, 2, 3]경우 호출 이 의미가 없기 때문입니다 a.flop(4).
여기 몇 가지 예가 있어요.
#Input:
[2, 6, 0, 3, 1, 5, 5, 0, 5, 1]
#Output
[3, 7, 8, 6, 9]
#Input
[1, 2]
#Output
<any list of integers under 3, including an empty list>
#Input
[2, 6, 0, 2, 1, 4, 5, 1, 3, 2, 1, 5, 6, 4, 4, 1, 4, 6, 6, 0]
#Output
[3, 19, 17, 7, 2, 4, 11, 15, 2, 7, 13, 4, 14, 2]
#Input
[1, 1, 1, 1, 2, 2, 2, -1, 4]
#Output
[]
#Input
[4, 4, 8, 8, 15, 16, 16, 23, 23, 42, 42, 15]
#Output
[12, 7]
이러한 각 예에서 주어진 출력은 하나의 잠재적 인 유효한 출력 일뿐입니다. 앞에서 말했듯 이 주어진 목록에 인접한 모든 플롭 세트는 유효한 출력 입니다. 이 파이썬 스크립트 를 사용하여 주어진 플롭 목록이 목록과 올바르게 이웃하는지 확인할 수 있습니다 .
합리적인 형식으로 입력 및 출력 할 수 있습니다. 예를 들어, 함수 인수 / 반환 값, STDIN / STDOUT, 파일 읽기 / 쓰기 등이 모두 유효합니다. 평소와 같이, 이것은 code-golf 이므로 가능한 한 가장 짧은 프로그램을 만들고 재미있게 보내십시오! :)