배열에서 수신 거부


25

소개

튀는 공의 필드로 배열을 볼 수도 있습니다. 물론 이것은 매우 모호하게 들리므로 다음은 입력의 예입니다.

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

바운스 된 배열 을 출력하는 것이 문제입니다 . 이들은 필드의 가장자리에서 튀는 대각선 패턴으로 만들어집니다. 이 길은 위쪽을 향하고 있습니다. 첫 번째 바운스 된 어레이의 경로 (경로가 egde에서 직접 바운스되는)는 다음과 같습니다.

[1, -, -, -, 5, -, -, -, 9]
[-, 8, -, 6, -, 4, -, 2, -]
[-, -, 3, -, -, -, 7, -, -]

왼쪽에서 오른쪽으로 결과는 [1, 8, 3, 6, 5, 4, 7, 2, 9]입니다. 이것이 첫 번째 바운스 된 배열입니다. 두 번째 바운스 배열의 경로 :

[-, 2, -, -, -, 6, -, -, -]
[9, -, 7, -, 5, -, 3, -, 1]
[-, -, -, 4, -, -, -, 8, -]

결과는 [9, 2, 7, 4, 5, 6, 3, 8, 1]입니다. 바운스 된 세 번째 어레이의 경로는 다음과 같습니다.

[-, -, 3, -, -, -, 7, -, -]
[-, 8, -, 6, -, 4, -, 2, -]
[1, -, -, -, 5, -, -, -, 9]

결과는 [1, 8, 3, 6, 5, 4, 7, 2, 9]입니다. 따라서 3 개의 바운스 된 배열 은 다음과 같습니다.

[1, 8, 3, 6, 5, 4, 7, 2, 9]
[9, 2, 7, 4, 5, 6, 3, 8, 1]
[1, 8, 3, 6, 5, 4, 7, 2, 9]

태스크

음수가 아닌 정수만 포함하는 배열이 1 개 이상이고 모든 배열의 길이가 같으면 바운스 된 배열이 모두 출력됩니다.

테스트 사례

테스트 사례 1 :

Input:                       Output:
[1, 2, 3, 4, 5]              [1, 7, 3, 9, 5]
[6, 7, 8, 9, 0]              [6, 2, 8, 4, 0]


Input:                       Output:
[1, 2, 3, 4, 5]              [1, 2, 3, 4, 5]


Input:                       Output:
[0, 0, 0, 0, 0, 0, 0, 0]     [0, 9, 0, 9, 0, 9, 0, 100]
[9, 9, 9, 9, 9, 9, 9, 100]   [9, 0, 9, 0, 9, 0, 9, 0]
[0, 0, 0, 0, 0, 0, 0, 0]     [0, 9, 0, 9, 0, 9, 0, 100]


Input:                       Output:
[0, 1, 2, 3, 4, 5]           [0, 7, 14, 9, 4, 11]
[6, 7, 8, 9, 10, 11]         [6, 1, 8, 15, 10, 5]
[12, 13, 14, 15, 16, 17]     [12, 7, 2, 9, 16, 11]


Input:                       Output:
[0, 0, 0, 0, 0, 0]           [0, 2, 2, 6, 2, 6]
[1, 2, 3, 4, 5, 6]           [1, 0, 3, 2, 5, 2]
[2, 2, 2, 2, 2, 2]           [2, 2, 0, 4, 2, 4]
[9, 8, 7, 6, 5, 4]           [9, 2, 3, 0, 5, 2]

이것은 이므로 바이트 수가 가장 적은 제출이 승리합니다!


2
젤리가 이깁니다.
lirtosiast

마지막 배열이 첫 번째 배열과 다른 3 배열 테스트 케이스와 4 배열 테스트 케이스를 추가 할 수 있습니까?
ETHproductions

1
문제 설명을 찾을 수 없습니다. 어디에 있는지 말해 줄 수 있습니까?
feersum

예. 작업에 대한 설명을 찾을 수 없습니다.
feersum

1
더 올라갈 수없는 라인 0에, 그것은 바운스에있는 유일한 방법 @LuisMendo
edc65

답변:


7

Pyth, 17 바이트

>lQC.e.>bkC+_PtQQ

설명:

                      implicit: Q=input
>                     First
  l Q                   len(Q) elements of the
  C .e                  Transpose of enumerated map lambda b,k:
       .>                 Rotate the kth element rightwards by
          b
          k               k.
       C +              Transpose of: Q concatenated to
           _ P t Q        itself reversed without first and last elements.
           Q

여기에서 시도 하십시오 .


7

자바 스크립트 (ES6), 70

a=>a.map((r,k)=>r.map((e,j)=>(a[k-=d]||a[d=-d,k-=d+d]||r)[j],d=1,++k))

테스트

F = a=>a.map((r,k)=>r.map((e,j)=>(a[k-=d]||a[d=-d,k-=d+d]||r)[j],d=1,++k))

test = [{
  I: [
    [1, 2, 3, 4, 5],
    [6, 7, 8, 9, 0]
  ],
  O: [
    [1, 7, 3, 9, 5],
    [6, 2, 8, 4, 0]
  ]
}, {
  I: [
    [1, 2, 3, 4, 5]
  ],
  O: [
    [1, 2, 3, 4, 5]
  ]
}, {
  I: [
    [0, 0, 0, 0, 0, 0, 0, 0],
    [9, 9, 9, 9, 9, 9, 9, 100],
    [0, 0, 0, 0, 0, 0, 0, 0]
  ],
  O: [
    [0, 9, 0, 9, 0, 9, 0, 100],
    [9, 0, 9, 0, 9, 0, 9, 0],
    [0, 9, 0, 9, 0, 9, 0, 100]
  ]
}, {
  I: [
    [0, 1, 2, 3, 4, 5],
    [6, 7, 8, 9, 10, 11],
    [12, 13, 14, 15, 16, 17]
  ],
  O: [
    [0, 7, 14, 9, 4, 11],
    [6, 1, 8, 15, 10, 5],
    [12, 7, 2, 9, 16, 11]
  ]
}, {
  I: [
    [0, 0, 0, 0, 0, 0],
    [1, 2, 3, 4, 5, 6],
    [2, 2, 2, 2, 2, 2],
    [9, 8, 7, 6, 5, 4]
  ],
  O: [
    [0, 2, 2, 6, 2, 6],
    [1, 0, 3, 2, 5, 2],
    [2, 2, 0, 4, 2, 4],
    [9, 2, 3, 0, 5, 2]
  ]
}];

console.log = x => O.textContent += x + '\n';

test.forEach(t => {
  var r = F(t.I),
    ok = r.join `\n` == t.O.join `\n`
  console.log((ok ? 'OK' : 'KO') + '\nInput\n' + t.I.join `\n` + '\nOutput\n' + r.join `\n` + '\n')
})
<pre id=O></pre>




2

루비 (2.2.2p95), 124 바이트

->*a{b=a.length;b<2?a:b.times.map{|i|d=i>0?-1:1;c=i;a[0].length.times.map{|j|r=a[c][j];c+=d;d*=-1if c==0||c==a.length-1;r}}}

이것은 아마도 훨씬 나을 수 있습니다. 나중에 어떻게 알아낼까요!


2

Japt, 55 49 41 39 바이트

와우, 그것은 정말 까다 롭고 미친 듯이 재미있었습니다.

C=2*Nl -2Nw £YoY+Ul)£NgLmX%CC-X%C)gY} ·

온라인으로 테스트하십시오!

예제와 반대 순서로 출력합니다. 이것은 100 개가 넘는 배열의 입력에서 약간 깨집니다. 잘만되면 이것은 큰 차이를 만들지 않습니다.

           // Implicit: N = array of input arrays, U = first input array, J = -1, L = 100
           // Let's use the first example. 3 input arrays, each of length 9.
C=2*Nl -2  // Set variable C to 2*N.length - 2. In the example, C is 4.
Nw      }  // Reverse N and map each index Y to:
YoY+Ul)    //  Create the range [Y...U.length+Y).
           //  The first time through (Y=0), we have   [0, 1, 2, 3, 4, 5, 6, 7, 8]
£       }  //  Map each item X and index Y to:
X%C        //   Take X mod C.                          [0, 1, 2, 3, 0, 1, 2, 3, 0]
C-X%C      //   Take C - (X mod C).                    [4, 3, 2, 1, 4, 3, 2, 1, 4]
Lm         //   Take the minimum of these and 100.     [0, 1, 2, 1, 0, 1, 2, 1, 0]
Ng         //   Get the array at the resulting index.
gY         //   Get the item at index Y in this array. [1, 8, 3, 6, 5, 4, 2, 7, 9]
·          // Join the result with newlines. I guess this isn't necessary, but it helps with readability.

비경쟁 버전, 36 바이트

C=J+Nl)òC±C ®óUl)£NgLmX%CC-X%C)gY} ·

도전하기 전에이 두 가지 숫자 기능을 구현했습니다.

  • ò-와 동일 o하지만 [X..Y]대신 반환[X..Y)
  • ó-와 동일 o하지만 [X..X+Y)대신 반환[X..Y)

그러나 잘못 배치 되었기 때문에 0버그가 있었고 항상 빈 배열을 반환했습니다. 이것은 이제 수정되었습니다.

온라인으로 테스트하십시오!


2

파이썬 2 107 106 108 105 104 바이트

(일부 여분의 parens를 떨어 뜨림) (잘못된 시작 위치 (ب_ب)) (이미 해당 길이의 목록이 있음)

def b(a):
 r,e=len(a)-1,enumerate
 print[[a[abs((i-o-r)%(r*2or 1)-r)][i]for i,_ in e(q)]for o,q in e(a)]

입력을 함수의 인수로 갖는 것이 합법적입니다. 코드 골프 답변을 제출 한 것은 이번이 처음입니다.


네 그것은 합법입니다 :)
Adnan

1

APL, 33 자

{(⍳≢⍵){0⌷(⍺-⍳≢⍉⍵)⊖⍵⍪1↓¯1↓⊖⍵}¨⊂↑⍵}

⎕IO ← 0이라고 가정합니다. 아이디어는 원래 행렬이 첫 번째 및 마지막 행이 면도 된 상태로 반전 된 첫 번째 차원을 따라 첫 번째 차원을 따라 확대되는 경우 행렬의 위쪽으로 간단한 이동으로 튀는 움직임을 얻을 수 있다는 것입니다. 그래픽으로 :

1 - - - - - 1 - - - -
- 2 - - - 2 - 2 - - -
- - 3 - 3 - - - 3 - 3
- - - 4 - - - - - 4 -

...에서

1 - - - - - 1 - - - -
- 2 - - - - - 2 - - -
- - 3 - - - - - 3 - -
- - - 4 - - - - - 4 -
- - - - 3 - - - - - 3
- - - - - 2 - - - - -

APL에서 reverseupward rotate같은 기호 입니다..


첫 번째 스테파노를 사용하십시오. 대신에 0⌷.
Zacharý

중첩 배열에 적용될 때 "first"와 "0⌷"은 매우 다른 결과를 나타냅니다. 직접 해보십시오. 먼저0⌷
lstefano

1

클로저, 125 바이트

와우, 이것은 축적 된 캐릭터를 매우 빠르게합니다.

(fn[v](let[H(count v)r range R(r H)](for[i R](map #((v %2)%)(r(count(v 0)))(drop i(cycle(concat R(reverse(r 1(dec H))))))))))

let자주 사용하는 값 을 정의 하여 바이트를 절약하려고 합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.