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!

Adnan
sumber
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 .

lirtosiast
sumber
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>

edc65
sumber
3

CJam, 31 30 byte

q~__W%1>W<+_z,_@*<zee::m>z\,<p

Input dan output sebagai daftar array gaya CJam.

Uji di sini.

Paling pasti golf ...

Martin Ender
sumber
3

Jelly, 29 25 24 byte

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

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

Cobalah online!

Dennis
sumber
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!

Connor Clark
sumber
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!

Produksi ETH
sumber
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.

Orez
sumber
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: .

lstefano
sumber
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.

NikoNyrh
sumber
0

Jelly *, 15 byte

JṚŒḄṖṙ’Ʋị⁸Jị"$€

Cobalah online!

* Versi terbaru

Erik the Outgolfer
sumber