Nhảy lên trong một mảng


25

Giới thiệu

Mảng cũng có thể được xem như một lĩnh vực cho một quả bóng nảy. Điều này tất nhiên nghe có vẻ rất mơ hồ, vì vậy đây là một ví dụ về đầu vào:

[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]

Thách thức là đầu ra các mảng bị trả lại . Chúng được làm từ các mẫu đường chéo nảy ở các cạnh của trường. Con đường này được hướng lên trên . Đường dẫn cho mảng bị trả lại đầu tiên (trong đó đường dẫn bị bật ra khỏi egde), là:

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

Từ trái sang phải, điều này sẽ dẫn đến [1, 8, 3, 6, 5, 4, 7, 2, 9]. Đây là mảng bị trả lại đầu tiên của chúng tôi . Đường dẫn cho mảng bị trả lại thứ hai:

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

Kết quả này trong [9, 2, 7, 4, 5, 6, 3, 8, 1]. Đường dẫn cho mảng bị trả lại thứ ba là:

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

Kết quả này trong [1, 8, 3, 6, 5, 4, 7, 2, 9]. Vì vậy, ba mảng bị trả lại là:

[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]

Bài tập

Cho ít nhất 1 mảng chỉ chứa các số nguyên không âm, với tất cả các mảng có cùng độ dài, xuất ra tất cả các mảng bị trả lại.

Các trường hợp thử nghiệm

Trường hợp thử nghiệm 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]

Đây là , vì vậy bài nộp có số byte ít nhất sẽ thắng!


2
Jelly chiến thắng điều này.
lirtosiast

Bạn có thể vui lòng thêm một testcase ba mảng trong đó mảng cuối cùng khác với testcase đầu tiên và bốn mảng không?
Sản phẩm điện tử

1
Tôi không thể tìm thấy mô tả vấn đề. Bất cứ ai có thể cho tôi biết nó ở đâu?
frageum

Vâng. Tôi không thể tìm thấy một mô tả của nhiệm vụ.
frageum

1
@LuisMendo đó là cách duy nhất để bật lên, ở dòng 0, nó không thể tăng thêm nữa
edc65

Câu trả lời:


7

Bình thường, 17 byte

>lQC.e.>bkC+_PtQQ

Giải trình:

                      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

Hãy thử nó ở đây .


7

JavaScript (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))

KIỂM TRA

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

Ruby (2.2.2p95), 124 byte

->*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}}}

Điều này có lẽ có thể tốt hơn rất nhiều. Tôi sẽ tìm hiểu làm thế nào sau này!


2

Japt, 55 49 41 39 byte

Wow, đó là cả hai thực sự khó khăn và cực kỳ vui vẻ.

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

Kiểm tra nó trực tuyến!

Đầu ra theo thứ tự ngược lại với các ví dụ. Điều này sẽ phá vỡ một chút trên đầu vào của hơn 100 mảng; hy vọng điều này không tạo ra quá nhiều sự khác biệt.

           // 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.

Phiên bản không cạnh tranh, 36 byte

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

Tôi đã thực hiện hai hàm số này trước khi thử thách:

  • ò- giống như o, nhưng trả về [X..Y]thay vì[X..Y)
  • ó- giống như o, nhưng trả về [X..X+Y)thay vì[X..Y)

Nhưng do đặt sai vị trí 0, chúng đã bị lỗi và luôn trả về các mảng trống. Điều này hiện đã được sửa chữa.

Kiểm tra nó trực tuyến!


2

Python 2, 107 106 108 105 104 byte

(Bỏ một số parens phụ) (Vị trí bắt đầu sai (ب_ب)) (đã có một danh sách có độ dài đó)

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)]

Nó là hợp pháp để có đầu vào như là một đối số cho một chức năng, phải không? Đây là lần đầu tiên tôi gửi câu trả lời mã golf của tôi.


Vâng, đó là hợp pháp :)
Adnan

1

APL, 33 ký tự

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

Giả sử ⎕IO ← 0. Ý tưởng là chuyển động nảy có thể thu được bằng cách dịch chuyển đơn giản lên trên của ma trận, nếu ma trận gốc được tăng theo chiều thứ nhất với ma trận đảo ngược với hàng đầu tiên và cuối cùng được cạo. Đồ họa:

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

từ

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

Trong APL reverseupward rotatelà cùng một biểu tượng : .


SỬ DỤNG STEFANO ĐẦU TIÊN. thay vì 0⌷.
Zacharý

Tôi sợ "đầu tiên" và "0⌷" cho hai kết quả rất khác nhau khi áp dụng cho một mảng lồng nhau. Hãy thử nó cho chính mình. Đầu tiên so với 0⌷
lstefano

1

Clojure, 125 byte

Wow, nhân vật tích lũy này khá nhanh.

(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))))))))))

Chỉ cố gắng lưu byte bằng cách letxác định các giá trị được sử dụng thường xuyên.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.