태그 보관물: array-manipulation

array-manipulation

인접 중복 축소 쌍의 일부가 아닌 그대로 유지됩니다. 예: [0, 0,

도전

정수 목록이 주어지면 인접한 동일한 항목의 모든 쌍을 반복적으로 제거한 후 이러한 정수 목록을 반환하십시오.

홀수 길이의 같은 수의 런이 있으면 그 중 하나가 쌍의 일부가 아닌 그대로 유지됩니다.

예:

[0, 0, 0, 1, 2, 4, 4, 2, 1, 1, 0]

첫째, 당신은 제거해야합니다 0, 0, 4, 4그리고 1, 1얻을 :

[0, 1, 2, 2, 0]

이제 다음을 제거해야합니다 2, 2.

[0, 1, 0]

그리고 이것이 최종 결과입니다.

테스트 사례

[]-> []
[1]-> [1]
[1, 1]-> []
[1, 2]-> [1, 2]
[11, 11, 11]-> [11]
[1, 22, 1]-> [1, 22, 1]
[-31, 46, -31, 46]-> [-31, 46, -31, 46]
[1, 0, 0, 1]-> []
[5, 3, 10, 10, 5]-> [5, 3, 5]
[5, 3, 3, 3, 5]-> [5, 3, 5]
[0, -2, 4, 4, -2, 0]-> []
[0, 2, -14, -14, 2, 0, -1]-> [-1]
[0, 0, 0, 1, 2, 4, 4, 2, 1, 1, 0]-> [0, 1, 0]
[3, 5, 4, 4, 8, 26, 26, 8, 5]-> [3]
[-89, 89, -87, -8, 8, 88]-> [-89, 89, -87, -8, 8, 88]

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다!



답변

젤리 , 10 바이트

Œgœ^/€FµÐL

온라인으로 사용해보십시오!

작동 원리

Œgœ^/€FµÐL  Main link. Argument: A (array)

       µ    Combine all links to the left into a chain.
Œg              Group all adjacent equal items.
    /€          Reduce each group by...
  œ^                symmetric multiset difference.
                In each step, this maps ([], n) to [n] and ([n], n) to [], so the
                group is left with a single item if its length is odd, and no items
                at all if its length if even.
      F         Flatten the resulting array of singleton and empty arrays.
        ÐL  Apply the chain until the results are no longer unique. Return the last
            unique result.


답변

망막 ,17 15 바이트

+m`^(.+)¶\1$¶?

온라인으로 사용해보십시오!

Neil과 Martin 덕분에 2 바이트를 절약했습니다!

각 숫자 쌍을 아무것도없는 것으로 바꿉니다. 이 프로세스는 변경 사항이 없을 때까지 반복됩니다.


답변

매스 매 티카 29 바이트

이것은 동일한 인접 요소 쌍을 반복적으로 제거합니다. a_,a_ 남은 것이 없을 때까지 .

#//.{b___,a_,a_,c___}:>{b,c}&


답변

파이썬 2 , 57 바이트

r=[]
for x in input():r+=x,;r[-2:]*=r[-2:-1]!=[x]
print r

온라인으로 사용해보십시오!

다음 요소를 추가하여 출력 목록을 반복적으로 생성 한 다음 추가 요소가 이전 요소와 같으면 끝을 잘라냅니다. 두 번째부터 마지막까지의 요소를 확인하면 r[-2:-1]!=[x]목록의 길이가 1 일 수 있기 때문에 어색합니다.


답변

젤리 , 15 바이트

Œr;ṪḂ$$€x/€FµÐL

온라인으로 사용해보십시오!

설명

Œr;ṪḂ$$€x/€FµÐL  Main Link
Œr               Run-length encode
  ;              Concatenate (?)
       €         For each element
   ṪḂ$$          Is the last element odd?
          €      For each element    // Non-breaking alternative
        x/       Reduce by repeating // for run-length decode
           F     Flatten
            µ    (New monadic link)
             ÐL  Repeat until results are no longer unique

마일 덕분에 -1 바이트, 고정 🙂


답변

자바 스크립트 (ES6), 54 53 바이트

@ThePirateBay 덕분에 1 바이트 절약

f=a=>1/a.find(q=>q==a[++i],i=-2)?f(a,a.splice(i,2)):a

순진한 재귀 솔루션은 불가능할 수 있습니다.


답변

파이썬 2 , 73 바이트

언급할만한 평판이 충분하지 않기 때문에 바이트를 저장하기 위해 len (r) 대신 r! = []를 사용하도록 @officialaimm의 대답을 변경했습니다. @officialaimm 당신에게 매우 영리한 솔루션!

r=[]                            # create list that will hold final results. A new list is important because it needs to be removable.
for i in input():
 if r!=[]and r[-1]==i:r.pop()   # Ensure that we have at least 1 char added to the list (r!=[])... or that the last character of our final result isn't the current character being scanned. If that is, well, remove it from the final list because we do not want it anymore
 else:r+=[i]                    # Shorthand for r.append(i). This adds i to the final result
print r

온라인으로 사용해보십시오!

다시 말하지만 너무 늦었습니다. 왜 아직도 일어 났습니까?