Temukan Nomor Dengan Jumlah Tetangga Tertinggi

12

Tantangan

Diberi kisi angka (10 <= N <= 99) Mengembalikan angka dengan jumlah tertinggi dari empat angka yang berdekatan dengannya; itu adalah angka-angka di atas, di bawah, kanan, dan kiri dari angka itu, tetapi tidak dengan sendirinya.

  1. Jumlahnya sendiri tidak dihitung, hanya empat tetangganya.
  2. Angka di tepi harus diperlakukan seolah-olah angka yang hilang adalah 0.
  3. Saya akan merancang tes untuk menghindari ikatan.
  4. Angka tidak akan berulang.
  5. Ini adalah .

Contoh

Diberikan

56 98 32 96
12 64 45 31
94 18 83 71

Kembali

18

Tes Nyata

Diberikan

98 95 67 66 57 16 40 94 84 37
87 14 19 34 83 99 97 78 50 36
18 44 29 47 21 86 24 15 91 61
60 41 51 26 10 58 11 62 55 71
42 85 56 12 46 81 93 65 49 77
89 13 74 39 54 76 92 33 82 90
96 88 70 79 80 28 25 20 75 68
38 63 17 72 53 48 73 30 45 69
64 35 32 31 23 43 22 52 27 59

Kembali

13

Diberikan

82 43 79 81 94 36 17 64 58
24 52 13 87 70 18 28 61 69
16 99 75 21 50 44 89 90 51
49 80 63 31 54 65 41 55 38
67 91 76 78 23 86 83 14 73
46 68 62 77 34 48 20 74 10
33 35 26 97 59 66 25 37 32
12 92 84 27 85 56 22 40 45
96 15 98 53 39 30 88 71 29
60 42 11 57 95 19 93 72 47

Kembali

15
Payung
sumber
1
" Angka di tepi dapat diperlakukan seolah-olah angka yang hilang adalah 0. " - Itu berarti kita memiliki pilihan tentang bagaimana menangani angka di tepi kisi. Bisakah kita memilih untuk membungkus ke sisi lain dari grid?
Shaggy
@Shaggy No. Itu mungkin mengubah hasil yang diharapkan. Mari kita lakukan dengan cara yang sama. Teks diperbarui s / bisa / harus /
Payung
2
menunggu jawaban MATL yang tak terhindarkan
Fatalkan
Saya perhatikan sebagian besar solusi mengubah input dengan cara tertentu. Apakah itu konvensional di sini? Solusi saya (belum diposting) termasuk byte yang diperlukan untuk mengubah input dan saya bertanya-tanya mengapa banyak orang lain tidak.
Payung
1
@Umbrella Kami biasanya tidak peduli jika input diubah. Kami tertarik pada kode pendek, bukan kode bersih. Selama outputnya benar, kita cenderung cukup permisif.

Jawaban:

9

MATL , 20 15 13 12 byte

t1Y6Z+tuX>=)

Disimpan 5 byte berkat Emigna, 2 terima kasih kepada Giuseppe, dan terima kasih lainnya untuk Luis Mendo.
Cobalah online!

Penjelasan

t1Y6Z+tuX>=)
t                  Duplicate the (implicit) input.
 1Y6               Push the array [0 1 0; 1 0 1; 0 1 0].
    Z+             Convolve with the input.
       uX>         Get the maximum unique element...
      t   =        ... and compare elementwise.
           )       Index into the input.

sumber
6

APL (Dyalog Unicode) , 31 27 26 24 23 byte SBCS

-2 Terima kasih kepada dukun Sapi. -1 terima kasih kepada ngn.

Fungsi awalan diam-diam anonim. Mengambil matriks sebagai argumen. Diasumsikan ⎕IO( I ndex O rigin) 0, yang merupakan default pada banyak sistem.

{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,

Cobalah online!

, mengecilkan (meratakan) input

{... }⊃ pilih elemen dari itu sesuai dengan hasil dari fungsi berikut:

⊢⍵ menghasilkan argumen (terpisah 3 3dari )

 ... ⌺3 3 terapkan fungsi berikut untuk masing-masing lingkungan 3-oleh-3:

  ⊢∘, abaikan informasi tepi yang mendukung lingkungan yang berantakan (rata)

  (... ) terapkan fungsi diam-diam berikut untuk itu

   -/ jumlah bolak-balik (lit. right-associative minus reduction)

   +/- kurangi itu dari jumlah (ini memberi jumlah dari setiap elemen lainnya)

, Ravel (meratakan) bahwa (jumlah lingkungan)

 menghasilkan indeks yang akan mengurutkan itu

 pilih yang pertama (yaitu indeks jumlah tertinggi)

Adm
sumber
Itu cepat. Apakah Anda siap? ;)
Payung
3
@Umbrella Tidak, saya hanya menggunakan bahasa pemrograman yang cepat diprogram masuk
Adám
3
Bagaimana ini {⊃⍒,{+/1↓⍉4 2⍴⍵}⌺3 3⊢⍵}⊃,? Edit: atau bahkan{⊃⍒,{⊢/+⌿4 2⍴⍵}⌺3 3⊢⍵}⊃,
user41805
@Cowsquack Saya selalu lupa trik itu.
Adám
2
-1 byte:{⊃⍒,(+/--/)⊢∘,⌺3 3⊢⍵}⊃,
ngn
5

Jelly , 22 byte

;€0ZṙØ+SṖ
,ZÇ€Z+$/ŒMœị

Cobalah online!

Tidak memiliki built-in konvolusi seperti MATL dan Dyalog. Melupakan bahasa Anda memiliki built-in convolution (terima kasih @dylnan) sakit, tapi kita bisa melakukan semacam oke tanpa mereka, sebagian berkat ŒMdan œị. Pertama, fungsi helper untuk menghitung tetangga hanya dalam satu arah, yang secara kebetulan mentranspos input:

;€0Z         Append a zero to each row, then transpose.
    ṙØ+S     Rotate by +1 and −1 (Ø+ = [1,-1]) and sum these.
        Ṗ    Pop the last row.

Secara visual, perhitungannya adalah:

1 2 3   ;€0   1 2 3 0   Z   1 4 7   ṙØ+     2 5 8   0 0 0     S   2  5  8   Ṗ   2  5  8
4 5 6  ————→  4 5 6 0  ——→  2 5 8  ————→  [ 3 6 9 , 1 4 7 ]  ——→  4 10 16  ——→  4 10 16
7 8 9         7 8 9 0       3 6 9           0 0 0   2 5 8         2  5  8       2  5  8
                            0 0 0           1 4 7   3 6 9         4 10 16

Interpretasi: sel (x, y) dari hasil ini adalah jumlah tetangga horisontal sel (y, x). (Sebagai contoh, di sini kita melihat bahwa f (A) [2,3] = 16 = 7 + 9 = A [3,1] + A [3,3] .)

Kemudian, fungsi utama:

,ZÇ€            Pair the input with its transpose and apply helper to both.
    Z+$/        Fold by Z+, i.e., turn [X,Y] into transpose(X)+Y.
                Now we've summed the horizontal and vertical neighbors for each cell.
        ŒM      Find the 2D index of the maximal value.
          œị    2D-index (into the original input).
Lynn
sumber
1
Bagaimana dengan æc?
dylnan
oh, saya tidak tahu tentang itu :) Saya terlalu sibuk untuk bermain golf jadi jangan ragu untuk menulis jawaban menggunakan itu.
Lynn
5

Jelly , 18 byte

5BæcµḊṖ)
ZÇZ+ÇŒMœị

Cobalah online!

Fungsi helper menemukan tetangga dari setiap elemen di setiap baris. Fungsi utama melakukan ini pada baris dan kolom kemudian menemukan elemen yang memiliki jumlah lingkungan maksimum.

5BæcµḊṖ)
5B           bin(5): 1,0,1
  æc         Convolve with [[1,2,9],[other rows]] (for example): [[1,2,10,2,9],...]
    µ        New chain.
       )     Apply this to each element:
     Ḋ       Remove the first element.
      Ṗ      Remove the last element.
             Gives [[2,10,2],...]

ZÇZ+ÇŒMœị   
Z            Zip the matrix
 Ç           Apply helper function
  Z          Zip again. Yields the sum of the vertical neighbors of each element.
   +         Add:
    Ç        The sum of each element's horizontal neighbors.
     ŒM      Find the multidimensional index of the maximal element.
       œị    Index back into the original matrix.
dylnan
sumber
3

Bahasa Wolfram (Mathematica) , 58 byte

Im@Last[Union@@ListConvolve[{a={0,1,0},{1,I,1},a},#,2,0]]&

(0101i1010)

Cobalah online!

alephalpha
sumber
2

Python 2 , 127 byte

def f(a):n=len(a[0]);b=sum(a,[])+[0]*n;print b[max(range(len(b)-n),key=lambda i:b[i-1]*(i%n>0)+b[i+1]*(i%n<n-1)+b[i-n]+b[i+n])]

Cobalah online!

Lynn
sumber
2

Stensil , 1 + 10 = 11 byte (tidak bersaing)

Opsi baris perintah:  1 menghitung 1 generasi

y⊃⍨⊃⍒,
+/N

Cobalah online!

y dari input asli diratakan
⊃⍨ pilih
 yang pertama
 dalam urutan
, rata

+/ jumlah
N lingkungan von neumanN tanpa diri

Adm
sumber
Tentu saja ada bahasa dengan satu karakter bawaan untuk para tetangga.
Payung
1
Agar adil, satu-satunya tujuan adalah untuk memecahkan masalah semacam ini .
Adám
Mengapa ini tidak bersaing?
Kevin Cruijssen
1
@KevinCruijssen Saya menambahkan y bahasa ketika saya melihat bahwa diperlukan akses yang lebih mudah ke input asli. Sebelum itu, Anda harus menulis (,⍎'input')alih-alih y.
Adám
1
@ Adám Ah ok, ya, maka itu memang tidak bersaing. Tidak memperhatikan tantangan telah diposting kemarin. Jika itu merupakan tantangan lama, non-bersaing karena bahasa (atau versi bahasa) lebih baru tidak membuatnya tidak bersaing lagi dalam meta saat ini .
Kevin Cruijssen
2

JavaScript (ES6), 94 byte

a=>a.map(p=m=(r,y)=>p=r.map((v,x)=>(s=~r[x-1]+~p[x]+~(a[y+1]||0)[x]+~r[x+1])>m?v:(m=s,o=v)))|o

Cobalah online!

Bagaimana?

Alih-alih mencari maksimum jumlah dari 4 tetangga, kita mencari minimum m dari jumlah s dari mereka satu-pelengkap. Ini memungkinkan kami memproses nilai yang tidak ditentukan seperti nol, karena:

~undefined === -1
~0 === -1

Peta dalam () ditulis sedemikian rupa sehingga tidak mengubah konten baris r . Oleh karena itu, kita dapat menyimpan hasilnya dalam p untuk menguji tetangga teratas di iterasi berikutnya.

Kita gunakan:

  • ~r[x-1] untuk sel kiri
  • ~r[x+1] untuk sel yang tepat
  • ~p[x] untuk sel atas
  • ~(a[y+1]||0)[x] untuk sel bawah
Arnauld
sumber
1

Java 8, 187 byte

m->{int r=0,l=m.length,i=l,L,j,S=0,s;for(;i-->0;)for(L=j=m[i].length;j-->0;)if((s=(i<1?0:m[i-1][j])+(i<l-1?m[i+1][j]:0)+(j<1?0:m[i][j-1])+(j<L-1?m[i][j+1]:0))>S){S=s;r=m[i][j];}return r;}

Cobalah online.

Penjelasan:

m->{                           // Method with integer-matrix parameter and integer return
  int r=0,                     //  Result-integer, starting at 0
      l=m.length,              //  Amount of rows
      i=l,                     //  Rows index integer
      L,                       //  Amount of columns
      j,                       //  Column index integer
      S=0,                     //  Largest sum of four cells
      s;                       //  Current sum of four cells
  for(;i-->0;)                 //  Loop over the rows
    for(L=j=m[i].length;j-->0;)//   Inner loop over the columns
      if((s=                   //    Set the current sum to: the sum of:
           (i<1?0:m[i-1][j])   //     Value of the cell to the left, or 0 if out of bounds
          +(i<l-1?m[i+1][j]:0) //     Value of the cell to the right, or 0 if out of bounds
          +(j<1?0:m[i][j-1])   //     Value of the cell down, or 0 if out of bounds
          +(j<L-1?m[i][j+1]:0))//     Value of the cell up, or 0 if out of bounds
         >S){                  //    If this current sum is larger than the largest sum:
        S=s;                   //     Replace the largest sum with this current sum
        r=m[i][j];}            //     And set the result to the current cell
  return r;}                   //  Return the result
Kevin Cruijssen
sumber
1

Javascript ES6, 170 byte

c=g=>{s=0;n=0;f=m=>m||[];for(i=0;i<g.length;i++)for(j=0;j<g[i].length;j++){s=~~f(g[i-1])[j]+~~f(g[i+1])[j]+~~f(g[i])[j-1]+~~f(g[i])[j+1];b=s>n?g[i][j]+!(n=s):b;}return b}
Jean-Philippe Leclerc
sumber
1
Selamat datang di PPCG! Kode Anda tampaknya menganggap bahwa input disimpan dalam variabel bernama g , yang tidak diizinkan . Anda harus menulis program lengkap yang membaca input atau fungsi (yang biasanya dan sejauh ini lebih disukai di JS).
Arnauld
1
@Arnauld Terima kasih! Saya memperbaiki kode
Jean-Philippe Leclerc
Anda dapat mempertimbangkan menambahkan tautan TIO untuk membuatnya lebih mudah untuk diuji. (Saya menghapus test case ke-2 agar tautannya sesuai dengan komentar.)
Arnauld