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.