Numaram komşularımı bul


11

Giriş, komşu bilgileri içeren i satırlarından oluşur . Her i inci satır komşusu temsil 4 değerleri içeren i için Kuzey , Doğu , Güney ve Batı sırasıyla yön. Böylece her değer , 1. satırdan başlayarak i. Sıranın belirli bir yönünde bir komşuyu temsil eder ve 65.535 satıra kadar çıkabilir. 0 değeri, bu yönde hiçbir komşu gösterir.

Örneğin, ilk sıra "0 2 3 10" ise, i komşusunun diğer üç komşusu olduğu anlamına gelir : kuzeyde hiç kimse , doğuda 2 komşu , güneyde 3 komşu ve batıda 10 komşu yoktur .

En kuzeybatıya kadar olan değerden başlayarak komşu dizisini çıkarmanız gerekir. Her komşu yalnızca bir kez, diğerlerine göre konumunda görüntülenir. Hadi bazı örneklere bakalım:

Giriş:

0 0 0 0

Komşu yok (boş kasa), çıktı:

1

Giriş:

0 2 0 0 
0 0 0 1

1 doğuda komşu 2 vardır. 2 batıda komşu 1 var

Çıktı:

1 2

Giriş:

0 2 0 0
0 0 3 1
2 0 0 0

1 doğuda komşu 2 vardır. 2'nin batısında komşu 1, güneyinde 3 vardır. 3 kuzeyde komşu 2 var

Çıktı:

1 2
  3

Giriş:

2 0 0 0
0 0 1 0

Çıktı:

2
1

Giriş:

0 2 3 0
0 0 4 1
1 4 0 0
2 0 0 3

Çıktı:

1 2
3 4

Kurallar:

  • Test senaryoları bir satır boşluk ile ayrılır . Farklı test senaryolarının çıktıları da bir boş satır ile ayrılmalıdır.
  • Çıktı grafiği her zaman bağlıdır. Sadece 2'ye 1 komşu, sadece 4'e 3 komşu (1-2 bileşenden izole edilmiş) olmayacaksınız.
  • Tüm kayıtlar geçerlidir. Geçersiz girişlere örnek:
    • Harf veya boşluk, satır sonu ve rakamdan farklı herhangi bir sembol içeren girişler (0-9).
    • i inci içeren satır i inci (biri kendi komşu olamaz çünkü) değerini.
    • negatif bir değer veya 65.535'den yüksek bir değer.
    • Arka arkaya dörtten az değer.
    • Arka arkaya dörtten fazla değer.
    • Aynı komşu iki farklı yöne işaret eder (ör: 0 1 1 0).

Standart boşluklar uygulanır ve bayt cinsinden en kısa cevap kazanır.


4
Test senaryoları boş bir satırla ayrılır - Bu alışılmadık bir gereksinimdir. Normalde, meydan okuma girişlerinin bir seferde bir test çantasını (çağırma başına bir tane) işleyeceği verilir. Sınama girişleri aynı anda birden fazla sınama işleyebilirse, o zaman harika, ancak birden çok sınama girişi nasıl biçimlendirilmesi gerektiğini kesin olarak belirtmek için çok az değer vardır.
Dijital Travma

1
@Chaotic tamamen kaldırabilirsiniz (isterseniz), revizyon geçmişi değişim günlüğü ile ilgilenir
Rod

1
Çıktının çıktıyla nasıl bir ilişkisi olduğunu anlamıyorum. "Komşu dizisinin" ne anlama geldiğini ve bu dizinin hangi kurallarla oluşturulması gerektiğini daha ayrıntılı olarak açıklayabilir misiniz?
Stewie Griffin

3
Aaaaah, sanırım anladım. Komşular numaralandırıldı 1,2,.... Ben doğuda bir komşu 2 "birim" ve güneye 1 "birim" vardı rağmen. Bir anlam ifade edemedi.
Stewie Griffin

2
@StewieGriffin evet Temiz olmadan önce birkaç kez okumak zorunda kaldım
Digital Trauma

Yanıtlar:


2

Python 2 , 152 bayt

l=input()
def f(x,y,n):
 if m[x][y]<n:m[x][y]=n;[f(i%3-1+x,i/3-1+y,h)for h,i in zip(l[n-1],[3,7,5,1])]
e=len(l)
m=eval(`[[0]*e*2]*e*2`)
f(e,e,1)
print m

Çevrimiçi deneyin!

Girdi sırası NESW
fevleri doldurmak için yinelemeli bir işlevdir


Üzgünüm, çalışmıyor. Giriş formatınızla bile denedim (ki sanırım iyi): [[0, 5, 2, 0], [1, 6, 3, 0], [2, 7, 4, 0], [3, 8 , 0, 0], [0, 9, 6, 1], [5, 10, 7, 2], [6, 11, 8, 3], [7, 12, 0, 4], [0, 13 , 10, 5], [9, 14, 11, 6], [10, 15, 12, 7], [11, 16, 0, 8], [0, 17, 14, 9], [13, 18 , 15, 10], [14, 19, 16, 11], [15, 20, 0, 12], [0, 21, 18, 13], [17, 22, 19, 14], [18, 23 , 20, 15], [19, 24, 0, 16], [0, 0, 22, 17], [21, 0, 23, 18], [22, 0, 24, 19], [23, 0 , 0, 20]]
Kaotik

@Chaotic bana iyi görünüyor belki çıktı biçimi tatmin edici değil?
Çubuk

Tamam, oradaki tüm sıfırlarla kayboldum. Bence onları kaldırmak daha iyi olurdu, ama golf standart kurallarını kodlamak için alışkın değilim.
Kaotik

Sadece kullanılmayan alan olarak mı kalacaksın?
l4m2

2
  • hala golf :)

JavaScript (Node.js) , 135 bayt

R=>R.map((t,y)=>r.map((T,Y)=>T.map((X,I)=>X==y+1?[-1,1,1,-1].map((x,i)=>t[i]?(r[a=Y+x*-~i%2]=r[a]||[])[I+x*i%2]=t[i]:0):0)),r=[[1]])&&r

Çevrimiçi deneyin!

_______________________________________________________________

İkinci yaklaşım

JavaScript (Node.js) , 130 bayt

f=(R,x=0,y=0,c=1,r=[[]])=>[-1,1,1,-1].map((d,i)=>(t=R[c-1][i])&&!(r[Y=y+d*-~i%2]=r[Y]||[])[X=x+d*i%2]?f(R,X,Y,t,r):0,r[y][x]=c)&&r

Çevrimiçi deneyin!

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.