Memantul dalam array


25

pengantar

Array juga dapat dilihat sebagai bidang untuk bola memantul. Ini tentu saja terdengar sangat samar, jadi di sini adalah contoh input:

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

Tantangannya adalah untuk mengeluarkan array memantul . Ini terbuat dari pola diagonal yang memantul di tepi lapangan. Jalan ini menunjuk ke atas . Jalur untuk lompatan memantul pertama (di mana lintasan langsung memantul dari egde), adalah:

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

Dari kiri ke kanan, ini akan menghasilkan [1, 8, 3, 6, 5, 4, 7, 2, 9]. Ini adalah lambung terpental pertama kami . Jalur untuk lambung terpental kedua:

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

Ini menghasilkan [9, 2, 7, 4, 5, 6, 3, 8, 1]. Jalur untuk lompatan ketiga adalah:

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

Ini menghasilkan [1, 8, 3, 6, 5, 4, 7, 2, 9]. Jadi tiga bouncing array adalah:

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

Tugas

Diberikan setidaknya 1 array yang hanya berisi bilangan bulat non-negatif, dengan semua array memiliki panjang yang sama, mengeluarkan semua array yang memantul.

Uji kasus

Uji kasus 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]

Ini adalah , jadi pengiriman dengan jumlah byte paling sedikit menang!


2
Jelly memenangkan ini.
lirtosiast

Bisakah Anda menambahkan testcase tiga-array di mana array terakhir berbeda dari yang pertama, dan testcase empat-array?
ETHproduksi

1
Saya tidak dapat menemukan deskripsi masalah. Adakah yang bisa memberitahu saya di mana itu?
feersum

Iya nih. Saya tidak dapat menemukan deskripsi tugas.
feersum

1
@LuisMendo itu satu-satunya cara untuk bangkit, pada baris 0 tidak bisa naik lagi
edc65

Jawaban:


7

Pyth, 17 byte

>lQC.e.>bkC+_PtQQ

Penjelasan:

                      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

Coba di sini .


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

UJI

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>



3

Jelly, 29 25 24 byte

ṖḊm-³;Z
,ZL€R_€/‘ż€Çị/€€

Terima kasih untuk @ Sp3000 karena membantu saya bermain golf 5 byte!

Cobalah online!


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

Ini mungkin jauh lebih baik. Saya akan mencari tahu bagaimana nanti!


2

Japt, 55 49 41 39 byte

Wow, itu benar-benar rumit dan sangat menyenangkan.

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

Uji secara online!

Keluaran dalam urutan terbalik ke contoh. Ini akan sedikit memecah pada input lebih dari 100 array; semoga ini tidak membuat banyak perbedaan.

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

Versi yang tidak bersaing, 36 byte

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

Saya telah mengimplementasikan dua fungsi angka ini sebelum tantangan:

  • ò- sama seperti o, tetapi mengembalikan [X..Y]bukan[X..Y)
  • ó- sama seperti o, tetapi mengembalikan [X..X+Y)bukan[X..Y)

Tetapi karena salah tempat 0, mereka buggy dan selalu mengembalikan array kosong. Ini sekarang sudah diperbaiki.

Uji secara online!


2

Python 2, 107 106 108 105 104 byte

(Menjatuhkan beberapa parens tambahan) (Lokasi awal salah (ب_ب)) (sudah memiliki daftar panjang itu)

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

Adalah sah untuk memiliki input sebagai argumen untuk suatu fungsi, bukan? Ini adalah pertama kalinya saya mengirimkan jawaban kode golf saya.


Ya itu legal :)
Adnan

1

APL, 33 karakter

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

Asumsikan ⎕IO ← 0. Idenya adalah bahwa gerakan memantul dapat diperoleh dengan pergeseran sederhana ke atas dari matriks, jika matriks asli ditambah sepanjang dimensi pertama dengan matriks terbalik dengan baris pertama dan terakhir dicukur. Secara grafis:

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

dari

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

Dalam APL reversedan upward rotateadalah simbol yang sama: .


GUNAKAN STEFANO PERTAMA. bukannya 0⌷.
Zacharý

Saya takut "pertama" dan "0⌷" memberikan dua hasil yang sangat berbeda ketika diterapkan pada array bersarang. Cobalah sendiri. Pertama vs. 0⌷
lstefano

1

Clojure, 125 byte

Wow, akumulasi karakter ini cukup cepat.

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

Hanya mencoba menyimpan byte dengan let-menentukan nilai yang sering digunakan.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.