Temukan tumpukan jerami di jarum


18

Dalam putaran menemukan jarum di tumpukan jerami, Anda perlu menemukan tumpukan jerami bersebelahan terbesar yang mengandung tepat satu jarum . Perhatikan bahwa Anda tidak dapat menghubungkan sel pada diagonal, hanya kiri / kanan / atas / bawah.

Memasukkan

Array (atau sejumlah jalur input pengguna, pilihan Anda) dari 'N'(jarum) dan '#'(hay) karakter. Input hanya berisi dua karakter itu, dan harus mengandung setidaknya satu karakter. Sebagai contoh:

N#N#N
#NN##
###N#
N##N#

Keluaran

Ukuran tumpukan jerami valid terbesar yang mungkin. Sebagai contoh kita, kita akan menghasilkan 11 (ada 11 potong jerami, dan satu jarum).

   # 
#  ##
###N#
 ## #

Ini , jadi kode terpendek menang. Batasan celah standar berlaku.

Uji Kasus

Masukan di kiri, mungkin tumpukan jerami maksimal di kanan

Kasus 1: 4

N##    ##
NN#     #
#NN     N
#N#     #

Kasus 2: 7

###   ###
N#N    # 
NNN    N 
###   ###

Kasus 3: 10

N###N    ### 
#N#N#   #N#  
#N#N#   # #  
N###N    ###

Kasus 4: 10

N#N#N        
#N#N#   # # #
##N##   ##N##
#N#N#   # # #
N#N#N        

Kasus 5: 1

NN#NN        
NNNNN         
#NNN#   #N    
NN#NN        

Jawaban:


4

JavaScript (ES6), 152 byte

s=>[...s].map((n,i)=>n>'M'&&(a=[...s],a[i]=r=1,a.map(_=>a.map((c,j)=>c=='#'&&a[j+1]|a[j-1]|a[j+l]|a[j-l]?a[j]=++r:0)),o=r>o?r:o),o=0,l=~s.search`
`)|o-1

Penjelasan

Untuk setiap jarum dalam input, setel jarum ke bagian tumpukan jerami (diwakili dengan mengaturnya ke angka yang tidak nol) dan terus menerus memeriksa sel-sel jerami. Jika hay berisi bagian yang berdekatan dengan tumpukan jerami, setel juga bagian dari tumpukan jerami dan menambah ukuran tumpukan jerami. Menghasilkan hasil tertinggi.

var solution =

s=>
  [...s].map((n,i)=>n>'M'&&(          // for each needle in s at index i
      a=[...s],                       // a = array of each character in s
      a[i]=1,                         // set the starting needle to 1 (haystack)
      r=0,                            // r = haystack size starting from this needle
      a.map(_=>                       // loop to ensure the complete haystack is found
        a.map((c,j)=>                 // for each cell c at index j
          c=='#'&&                    // if the current cell is hay
          a[j+1]|a[j-1]|a[j+l]|a[j-l] // and any adjacent cells are part of the haystack
          ?a[j]=++r:0                 // add the current cell to the haystack, increment r
        )
      ),
      o=r>o?r:o                       // o = max of o and r
    ),
    o=0,                              // o = final output, initialise to 0
    l=~s.search`
`                                     // l = line length of s
  )
  |o                                  // return o
<textarea id="input" rows="6" cols="40">N#N#N
#N#N#
##N##
#N#N#
N#N#N</textarea><br />
<button onclick="result.textContent=solution(input.value)">Go</button>
<pre id="result"></pre>


4

Ruby, 207

->a{d=->b{0...b.size}
f=c=s=->y,x{(d[a]===y&&d[a[0]]===x&&!f[y][x]&&a[y][x]==c)?(c,f[y][x]=?#,1
1+s[y,x-1]+s[y,x+1]+s[y-1,x]+s[y+1,x]):0}
d[a].map{|y|d[y].map{|x|f,c=a.map{|b|b.map{p}},?N
s[y,x]}.max}.max-1}

Ini adalah fungsi anonim yang mengambil input sebagai array array. Pemakaian:

f=->a{......}

f["
N##
NN#
#NN
#N#
".strip.split.map(&:chars)] # => 4

Proc yang bernama ssecara rekursif menemukan ukuran tumpukan jerami dengan jarum pada koordinat tertentu dan dipanggil pada setiap jarum di tumpukan jerami.

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.