배경
요즘 프로그래머는 버퍼를 똑바로 유지할 수 없습니다! 일반적인 오류 원인은 버퍼에 비해 너무 큰 배열 인덱스를 사용하려는 것입니다. 당신의 임무는 큰 인덱스가 버퍼가 처리 할 수있는 크기로 축소되는 버퍼를 구현하는 것입니다. 모든 사람에게 가장 적합한 것을 정확하게 결정하기 때문에이 버퍼를 정확한 사양으로 구현합니다.
개요
요소가 추가되면 크기가 커지는 삽입 전용 버퍼가 있습니다. 버퍼는 인덱스가 0이고 모듈로 의 현재 크기 도 인덱스됩니다 . 이 도전에 대한 특별한 규칙은 다음과 같습니다.
- 인덱스에 항목을 삽입하려면 내가 계산하는 것을 의미 J를 ,
j = i % buffer.length()그리고 이후에 새로운 항목을 삽입 j 번째 목록에서 항목을 선택합니다.
유일한 특수한 경우는 산술 모듈로 0이 작동하지 않으므로 버퍼가 비어있는 경우입니다. 따라서 버퍼가 현재 비어있는 경우 새 항목은 인덱스 0이 됩니다.
버퍼에 하나의 항목 만있는 경우 항상 0 번째 항목 뒤에 삽입합니다 . 이것은 일반적인 경우의 한 예일뿐입니다.
버퍼가 6 항목이 포함 된 경우 : [4, 9, 14, 8, 5, 2]당신이 새로운 항목을 삽입하라고하는 10인덱스 15 , 당신은 그것을 발견 15 % 6 == 3한 다음 새를 삽입 10애프터 8인덱스 3 의 결과 버퍼를 제공합니다 [4, 9, 14, 8, 10, 5, 2]
문제
순서가 지정된 양의 정수 목록과 그것들을 삽입 할 양의 정수 색인을 취하는 함수 또는 프로그램을 작성하십시오.
빈 버퍼로 시작하여 지정된 정수를 해당 인덱스의 버퍼에 추가하십시오.
지정된 모든 삽입이 완료된 후 버퍼에있는 정렬 된 정수 목록을 출력합니다.
이것은 코드 골프 도전이므로 가장 짧은 코드가 승리합니다.
입력 지침
입력 목록을 가져갈 수도 있지만 적합하다고 생각됩니다. 예 :
- 쌍 목록 :
[ [1,1], [2,4], [3,9], [4,16], [5,25]...] - 품목 목록 및 색인 목록 :
[1, 2, 3, 4, 5...], [1, 4, 9, 16, 25] - 단조롭게 하는:
[1, 1, 2, 4, 3, 9, 4, 16, 5, 25 ...] - 기타
입력에 항상 하나 이상의 항목과 해당 색인이 포함되어 있다고 가정 할 수 있습니다.
테스트 사례
위의 사각형 케이스 :
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64)] -> [1, 2, 8, 7, 6, 5, 4, 3]
나는 이것을 무작위로 생성했다.
[(11, 9), (13, 14)] -> [11, 13]
[(1, 18), (11, 7), (3, 35), (16, 22)] -> [1, 11, 16, 3]
[(3, 16), (16, 37), (0, 28), (18, 24)] -> [3, 18, 0, 16]
[(7, 26), (8, 20), (11, 39), (1, 23), (17, 27)] -> [7, 8, 11, 1, 17]
[(15, 35), (17, 7), (16, 15), (1, 13), (2, 6), (11, 34)] -> [15, 17, 1, 2, 16, 11]
[(2, 13), (1, 20), (16, 25), (8, 21), (5, 2), (16, 37), (3, 0)] -> [2, 3, 8, 1, 16, 5, 16]
[(6, 20), (15, 15), (12, 26), (10, 27), (17, 13), (7, 18), (4, 16)] -> [6, 10, 17, 12, 7, 4, 15]
[(18, 9), (5, 34), (15, 4), (12, 29), (2, 5), (7, 0), (7, 10), (16, 38)] -> [18, 7, 15, 2, 16, 5, 7, 12]
[(0, 12), (12, 0), (4, 16), (15, 12), (6, 28), (8, 10), (11, 24), (0, 25)] -> [0, 11, 8, 6, 15, 0, 4, 12]
[(6, 12), (14, 13), (10, 33), (11, 35), (1, 3), (0, 28), (15, 27), (8, 10), (1, 2)] -> [6, 14, 10, 1, 11, 8, 15, 0, 1]
[(2, 29), (19, 30), (18, 17), (13, 3), (0, 21), (19, 19), (11, 13), (12, 31), (3, 25)] -> [2, 13, 3, 11, 0, 12, 19, 18, 19]
Python3 참조 구현
def f(inputs):
# `inputs` is a list of pairs
buff = []
for item, index in inputs:
if len(buff) == 0:
buff.insert(0, item)
else:
insert_after = index % len(buff)
buff.insert(insert_after+1, item)
return buff