Temukan angka N digit terbesar dalam grid digit W dengan H

25

Tulis program atau fungsi yang menggunakan bilangan bulat positif N dan kisi digit desimal (0 hingga 9) dengan lebar W dan tinggi H (yang juga bilangan bulat positif). Anda dapat mengasumsikan bahwa N akan kurang dari atau sama dengan yang lebih besar dari W dan H.

Cetak atau kembalikan nomor digit N bersebelahan terbesar yang muncul secara horizontal atau vertikal dalam kisi, ditulis dalam urutan pembacaan normal atau terbalik.

  • Garis digit diagonal tidak dipertimbangkan.
  • Grid tidak membungkus, yaitu tidak memiliki kondisi batas periodik.

Misalnya, kisi 3 × 3

928
313
049

akan memiliki 9sebagai output untuk N = 1, 94sebagai output untuk N = 2, dan 940sebagai output untuk N = 3.

Kotak 4 × 3

7423
1531
6810

akan memiliki 8sebagai output untuk N = 1, 86untuk N = 2, 854untuk N = 3, dan 7423untuk N = 4.

Kotak 3 × 3

000
010
000

akan memiliki output 1untuk N = 1, dan 10untuk N = 2 dan N = 3 ( 010juga berlaku untuk N = 3).

Kotak 1 × 1

0

akan memiliki output 0untuk N = 1.

Anda dapat mengambil input dalam format wajar yang nyaman. misalnya kisi-kisi dapat berupa string digit yang dipisahkan oleh baris baru, atau array multidimensi, atau daftar daftar digit, dll. Angka nol diijinkan dalam output jika mereka merupakan bagian dari kisi.

Ini adalah , jadi kode terpendek dalam byte menang, tetapi saya juga akan memberikan poin brownies (yaitu kemungkinan upvotes) untuk jawaban yang dapat menunjukkan bahwa algoritma mereka efisien secara komputasi.

Hobi Calvin
sumber
1
Apakah kami diizinkan mencetak nol terkemuka?
PurkkaKoodari
@ Pietu1998 "Angka nol diijinkan di output jika mereka adalah bagian dari grid."
Hobi Calvin

Jawaban:

0

Pyth, 22 19 byte

3 byte berkat Jakube.

seSs.:RQ.n,L_MdCB.z

Cobalah online.

Jika kami diizinkan untuk mencetak nol terkemuka, kodenya adalah 18 byte:

eSs.:RQ.n,L_MdCB.z
PurkkaKoodari
sumber
Mengonversi string dengan memimpin nol ke integer dapat dilakukan s.
Jakube
9

CJam, 39 36 35 34 byte

qN/)i\[{zW%_}4*]ff{_,@e<ew:i}e_:e>

Cepat, sebelum @ Dennis bangun: P

Cobalah online .

Penjelasan

Algoritma dasarnya adalah untuk mengambil keempat rotasi grid dan membagi setiap baris menjadi potongan-potongan panjang N(atau panjang baris, mana saja yang lebih kecil). Kemudian konversikan potongan ke int dan ambil yang terbesar.

qN/             Split input by newlines, giving an array of lines
)i\             Drop N from the array and put at bottom
[        ]      Wrap in array...
 {    }4*         Perform 4 times...
  zW%_              Rotate grid anticlockwise and push a copy
                Note that this gives an array of 5 grids [CCW1 CCW2 CCW3 CCW4 CCW4]
ff{         }   For each grid row, mapping with N as an extra parameter...
   _,             Push length of row
     @e<          Take min with N
        ew        Split into chunks
          :i      Convert to ints
e_              Flatten that array
:e>             Take cumulative max
Sp3000
sumber
Karena penasaran, apakah fewmelakukan sesuatu yang istimewa, atau apakah itu tiga perintah terpisah?
ETHproduk
3
@ ETHproductions Ini sebenarnya operator ewditerapkan menggunakan f, atau "peta dengan parameter tambahan". Misalnya, ["abcd" "efgh"] 2 fewhasil dalam [["ab" "bc" "cd"] ["ef" "fg" "gh"]].
Sp3000
Gotcha :) Tapi itu kebetulan yang menarik.
ETHproduk
Satu-satunya masalah adalah, ketika @ Dennis bangun, semua orang tetap akan kalah. ;)
kirbyfan64sos
-2

Bahan tertawaan

Belum jawaban akhir tetapi mungkin akan bekerja seperti ini:

blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{3.+ti}m[>]
854
blsq ) "7423\n1531\n6810"ln)XXJ)\[jtp)\[_+J)<-_+{4.+ti}m[>]
7423

Bagaimana N dan grid diberikan dengan tepat?

mroman
sumber
Orang biasanya harus menunggu untuk mengirim jawaban sampai berhasil. Setiap pertanyaan untuk OP harus diberikan sebagai komentar pada posting.
Alex A.
Kode sebenarnya berfungsi.
mroman