루핑 배열 생성


15

소개

포인터 배열은 배열 인 L제로가 아닌 정수의 0 ≤ L[i]+i < len(L)모든 인덱스에 대한 보유 i(0 기반 인덱스를 가정). 우리는 인덱스가 있다고 i 지적 인덱스에 L[i]+i. 인덱스가 길이의 단일주기를 형성하는 경우 포인터 배열은 루프len(L) 입니다. 여기 몇 가지 예가 있어요.

  • [1,2,-1,3]3인덱스를 가리 키지 않기 때문에 포인터 배열 이 아닙니다.
  • [1,2,-1,-3]는 인덱스를 가리 키지 않기 때문에 포인터 배열이지만 루프는 아닙니다 -1.
  • [2,2,-2,-2] 인덱스는 두 사이클을 형성하기 때문에 포인터 배열이지만 루프는 아닙니다.
  • [2,2,-1,-3] 루프입니다.

입력

귀하의 입력은 임의의 합리적인 형식으로 0이 아닌 정수의 비어 있지 않은 목록입니다. 정렬되지 않았거나 중복 된 내용 일 수 있습니다.

산출

출력은 다중도를 계산하여 입력 목록의 모든 정수 (및 다른 정수도 포함)를 포함하는 루프 여야합니다. 그것들은 입력에서와 같은 순서로 발생할 필요가 없으며, 출력이 어떤 의미에서든 최소 일 필요는 없습니다.

입력 [2,-4,2]의 경우 허용 가능한 출력이됩니다 [2,2,-1,1,-4].

규칙과 득점

전체 프로그램 또는 함수를 작성할 수 있습니다. 가장 낮은 바이트 수가 이기고 표준 허점 은 허용되지 않습니다. 귀하의 답변에 몇 가지 예제 입력 및 출력을 포함시키는 것이 좋습니다.

테스트 사례

이것들은 형식으로 제공됩니다 input -> some possible output(s).

[1] -> [1,-1] or [1,1,1,-3]
[2] -> [2,-1,-1] or [1,2,-2,-1]
[-2] -> [1,1,-2] or [3,1,2,-2,-4]
[2,-2] -> [2,-1,1,-2] or [2,-1,2,-2,-1]
[2,2,2] -> [2,-1,2,-2,2,-2,-1] or [2,2,2,2,-3,-5]
[2,-4,2] -> [2,2,-1,1,-4] or [2,5,1,1,1,-4,2,-7,-1]
[3,-1,2,-2,-1,-5] -> [2,3,-1,2,-1,-5] or [3,3,-1,-1,2,2,-1,6,1,1,1,1,-12,-5]
[-2,-2,10,-2,-2,-2] -> [10,-1,1,-2,-2,1,-2,-2,1,-2,-2]
[-15,15,-15] -> [15,-1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,-15,-15]
[1,2,3,4,5] -> [1,2,3,-1,4,-1,5,-1,-1,-9,-1,-1]

답변:


11

젤리, 12 바이트

ż~Ṣ€FxA$;L$U

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

배경

정수 쌍 n, ~ n을 고려하십시오. 여기서 n ≥ 0~는 비트 NOT을 나타냅니다. 즉, ~ n =-(n + 1) 입니다.

n의 n 사본을 n + 1~ n 사본 왼쪽에 배치 하여 가장 오른쪽 ~ n 에서 포인터 배열을 탐색하기 시작하면 모든 2n + 1 요소를 탐색 하고 가장 왼쪽의 n 왼쪽에서 자신을 찾습니다. .

예를 들어, n = 4 인 경우 :

X  4  4  4  4  -5 -5 -5 -5 -5
                            ^
            ^
                         ^
         ^
                      ^
      ^
                   ^
   ^
                ^
^

특별한 경우 n = 0 이면 요소 n 자체가 0 번 반복되어 다음과 같이 남습니다.

X -1
   ^
^

각 정수를 들어 K 입력에서는 쌍을 형성 할 수있는 N ~ N 즉, 포함 (k)를 설정하여 , N = K 의 경우 K> 0N = ~ K 의 경우 K <0 . ~ 는 involution, 즉 ~~ k = k 이므로 작동합니다 .

남은 것은 생성 된 튜플을 체인화하고 결합 된 길이를 추가하는 것이므로 가장 왼쪽에있는 요소는 가장 오른쪽에있는 요소로 되돌아갑니다.

[1] -> [3, 1, -2, -2]
[2] -> [5, 2, 2, -3, -3, -3]
[-2] -> [3, 1, -2, -2]
[2, -2] -> [8, 1, -2, -2, 2, 2, -3, -3, -3]
[2, 2, 2] -> [15, 2, 2, -3, -3, -3, 2, 2, -3, -3, -3, 2, 2, -3, -3, -3]
[2, -4, 2] -> [17, 2, 2, -3, -3, -3, 3, 3, 3, -4, -4, -4, -4, 2, 2, -3, -3, -3]
[3, -1, 2, -2, -1, -5] -> [26, 4, 4, 4, 4, -5, -5, -5, -5, -5, -1, 1, -2, -2, 2, 2, -3, -3, -3, -1, 3, 3, 3, -4, -4, -4, -4]
[-2, -2, 10, -2, -2, -2] -> [36, 1, -2, -2, 1, -2, -2, 1, -2, -2, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, 1, -2, -2, 1, -2, -2]
[-15, 15, -15] -> [89, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15]
[1, 2, 3, 4, 5] -> [35, 5, 5, 5, 5, 5, -6, -6, -6, -6, -6, -6, 4, 4, 4, 4, -5, -5, -5, -5, -5, 3, 3, 3, -4, -4, -4, -4, 2, 2, -3, -3, -3, 1, -2, -2]

작동 원리

ż~Ṣ€FxA$;L$U  Main link. Argument: A (list of integers)

 ~            Yield the bitwise not of each k in A.
ż             Zipwith; pair each k in A with ~k.
  Ṣ€          Sort each pair, yielding [~n, n] with n ≥ 0.
    F         Flatten the list of pairs.
       $      Combine the previous two links into a monadic chain:
      A         Yield the absolute values of all integers in the list.
                |n| = n and |~n| = |-(n + 1)| = n + 1
     x          Repeat each integer m a total of |m| times.
          $   Combine the previous two links into a monadic chain:
         L      Yield the length of the generated list.
        ;       Append the length to the list.
           U  Upend; reverse the generated list.

n = 0스펙에 " 0이 아닌 정수 "가 표시 되므로 특수한 경우를 처리 할 필요가 없습니다 .
피터 테일러

하지만 0 의 입력에서 발생하지 않습니다, 나는 아직도 쌍의 필요 , 0 -1 경우 -1 않습니다.
Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.