Şövalye-ızgarayı doldur


15

Bir şövalye dolgusu, şövalye satranç parçasının bağlantısını kullanan bir sel dolgusudur. özellikle:

 1 1
1   1
  0
1   1
 1 1

(0 başlangıç ​​noktasıdır, 1'ler bağlı hücreleri gösterir)

Meydan okuma

2B boşluk ve duvar ızgarası ve bir başlangıç ​​konumu göz önüne alındığında, ızgara üzerinde bir şövalye dolgusu yapın. En kısa kod kazanır.

kurallar

  • İstediğiniz formatta (resim, dize, dizi, ne olursa olsun) girdi alabilir ve çıktı üretebilirsiniz. Başlangıç ​​konumunu giriş ızgarasının bir parçası olarak veya ayrı bir koordinat olarak alabilirsiniz. Bu açıklamanın amacı için aşağıdaki format kullanılacaktır:

    ########    # = wall
    ########    x = initial location
    ## x  ##
    ##    ##
    ########
    ##    ##
    ########
    ########
    
  • Çıktı, şövalye dolgu sonucu eklenmiş olarak giriş ızgarasının bir kopyasıdır

  • Dolgunuz boşluk veya duvarlarla aynı "renkte" olmamalı, ancak ilk konum işaretleyicisiyle aynı olabilir. Örneğin yukarıdaki görüntü verildiğinde geçerli bir çıktı şöyle olur:

    ########    # = wall
    ########    @ = fill (could also have been x)
    ## @ @##
    ## @ @##
    ########
    ##@ @ ##
    ########
    ########
    
  • Giriş ızgarasının her zaman her tarafta 2 hücreli bir duvar içereceğini varsayabilirsiniz.

  • Başlangıç ​​konumunun asla duvarın içinde olmayacağını varsayabilirsiniz.
  • Izgaranın asla 1000x1000'den daha büyük olmayacağını varsayabilirsiniz.
  • Yapı iyi
  • En kısa kod (bayt cinsinden) kazanır

Test Durumları

Tüm test durumlarında, #bir duvarı, boş alanı ve xdolgunun başlangıç ​​konumunu belirtir. @çıkış dolgusunu belirtir.

Input 1:

########
########
## x  ##
##    ##
########
##    ##
########
########

Output 1:

########
########
## @ @##
## @ @##
########
##@ @ ##
########
########

Input 2:

############
############
## ##    x##
## ##     ##
#####     ##
##        ##
############
############

Output 2:

############
############
## ##@@@@@##
##@##@@@@@##
#####@@@@@##
## @@@@@@@##
############
############

Input 3:

####################
####################
##  ##            ##
##  ##            ##
##  ##  ########  ##
##  ##  ########  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ##    ##  ##
##  ##  ########  ##
##  ##  ########  ##
##  ##        ##  ##
##  ##       x##  ##
##  ############  ##
##  ############  ##
##                ##
##                ##
####################
####################

Output 3:

####################
####################
##@@##@@@@@@@@@@@@##
##@@##@@@@@@@@@@@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@##    ##@@##
##@@##@@########@@##
##@@##@@########@@##
##@@##@@@@@@@@##@@##
##@@##@@@@@@@@##@@##
##@@############@@##
##@@############@@##
##@@@@@@@@@@@@@@@@##
##@@@@@@@@@@@@@@@@##
####################
####################

Input 4:

################
################
##           ###
##     x     ###
##  #######  ###
##  #######  ###
##  ##   ##  ###
##  ##   ##  ###
##  ##   ##  ###
##  ########  ##
##  ########  ##
##        ##  ##
##        ##  ##
################
################

Output 4:

################
################
##   @   @   ###
## @   @   @ ###
##  #######  ###
##@ ####### @###
##  ##   ##  ###
## @##   ##@ ###
##  ##   ##  ###
##@ ########@ ##
##  ########  ##
## @   @  ## @##
##   @   @##  ##
################
################

Input 5:

##############
##############
##         ###
##         ###
##         ###
##   ###   ###
##   #x#   ###
##   ###   ###
##         ###
##         ###
##         ###
##############
##############

Output 5:

##############
##############
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@###@@@###
##@@@#@#@@@###
##@@@###@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##@@@@@@@@@###
##############
##############

Yanıtlar:


4

Oktav, 73 bayt

function a=F(s,a)do;b=a;until(a=~s&imdilate(a,de2bi(")0#0)"-31)))==b;a+=s

Çevrimiçi Demo!

* Bazı değişiklikler rextester içinde çalıştırmak için uygulandı.

Duvar olarak 0 ve 2'lik bir 2d dizisini ve başlangıç ​​yeri olarak 0 ve 1'in bir dizisini alan ve 0 ve 1 ve 2 dizisi çıkaran bir işlev.


İyi görünüyor, ancak pkg load ...test çerçevesinin dışında çalıştırıldığında bu gerekmiyor mu? Eğer imdilate& de2bisonra açık ithalat olarak mevcuttur, iyi olduğunu.
Dave

@Dave Oktav'ın önceki sürümlerinde, tio'da kurulu sürüm de dahil olmak üzere, otomatik olarak yüklenebilmesi için bir paket yüklemek mümkün oldu, ancak şimdi bu özelliğin oktavdan kaldırıldığını fark ettim! bakın bu .
rahnema1

Yeterince adil. Daha önce -autokaldırılmış bir sürümü hedeflediğiniz sürece sorun değil ve bu cevabın yeni özellikler kullanmadığını tahmin ediyorum.
Dave

3

JavaScript (ES6), 116 bayt

f=(s,l=s.search`
`,t=s.replace(eval(`/(x| )([^]{${l-2}}(....)?|[^]{${l+l}}(..)?)(?!\\1)[x ]/`),'x$2x'))=>s==t?s:f(t)

v=(s,l=s.search`
`)=>!/^(#+)\n\1\n[^]*x[^]*\n\1\n\1$/.test(s)|s.split`
`.some(s=>s.length-l|!/^##.+##$/.test(s))&&`Invalid Input`
textarea{font-family:monospace}
<textarea rows=11 cols=33 oninput=o.value=v(this.value)||f(this.value)></textarea><textarea rows=11 cols=33 id=o reaodnly></textarea>

Başarısız Kaleleri Algılama'ya verdiğim cevaba dayanarak . xS kullanarak doldurur .


Bir test snippet'i / bağlantısı ekleyebilir misiniz?
officialaimm

2

Python 3 , 3943873813356352 347 319 313156139 bayt

  • G / Ç biçimlendirmesine ilişkin işlevi değil, yalnızca temel işlevi saydıktan sonra 154 bayt
  • 7 bayt kurtardı: @Jacoblaw ve @ Mr.Xcoder sayesinde: except:0
  • 28 bayt kurtardı !!!: @ovs sayesinde: try: exceptblok ve diğer golflerden kurtuldum
  • Güzel test modülü için @Dave sayesinde.
  • 6 bayt kaydedildi: g[(a,b)]tıpkıg[a,b]
  • @nore 15 bayt kurtardı !!! :
def x(g,a,b,m):
 if(a,b)in g and"!">g[a,b]or m:
  g[a,b]="@"
  for i in 1,2,-1,-2:
   for j in 3-abs(i),abs(i)-3:g=x(g,a+i,b+j,0)
 return g

Çevrimiçi deneyin!


1
except:passonun yerine yapabilir misin
jacoblaw

1
Bu ağır golf olabilir eminim
Bay

2
@jacoblaw daha da iyi:except:0
Bay


1
İşte TiO'nun test edilmesi biraz daha kolay bir sürümü: Çevrimiçi deneyin!
Dave

1

Mathematica, 117 bayt

Her zamanki hikaye: güçlü yerleşikler ama uzun isimler…

HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&

Wolfram sanal alanında deneyin!

İki giriş alır: birincisi, giriş ızgarasını 0s (duvarlar için) ve 1s (boşluklar için ) dizisi olarak , daha sonra başlangıç ​​konumu için ızgarayı satırlar boyunca yukarıdan aşağıya numaralandırarak bulunan örn.

1  2  3  4  5
6  7  8  9  10
11 12 13 14 ...

İşlevi şöyle çağırabilirsiniz HighlightGraph[...~Prepend~h]&[{{0,0,...,0}, {0,0,...,0}, ..., {0,0,...,0}}, 20] .

KnightTourGraphİşlev köşeleri geçerli atın hareket tekabül eden ızgara pozisyonları ve kenarlara tekabül eden bir grafik oluşturur, o zaman alır Subgraphduvarlar, köşeler ve bulmak ConnectedComponentsbaşlangıç tepe noktası. Çıktı, duvar dışı köşeler kırmızı ile vurgulanmış ve doldurulmuş köşeler sarı ile vurgulanmış bir grafiktir (saat yönünün tersine 90º döndürülmüş olarak gösterilir). Örneğin, ilk test durumu için çıktı aşağıdaki gibi görünür:

Test durumu 1 için çıktı: bazı alanları vurgulanmış bir grafik


Bu kesinlikle test edilmesi en zor gibi görünüyor! Üniversite günlerimizden beri Mathematica'ya dokunmamış olanlarımız için kum havuzuna nasıl çağrılacağına dair bir örnek ekleyebilir misiniz? f=... f[{0,...,0;0,...,0}, 19]Ve benzeri girişimlerim sefil bir şekilde başarısız oldu.
Dave

@Dave, işlevi HighlightGraph[g,ConnectedComponents[h=Subgraph[g=KnightTourGraph@@Dimensions@#,Flatten@#~Position~1],#2]~Prepend~h]&[{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,1,1,1,1,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}},20](ilk test durumu için) ile çağırabilirsiniz . Soruyu düzenledim - üzgünüm başlangıçta orada değildi!
Bir ağaç değil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.