私の番号の隣人を見つける


11

入力は、近傍情報を含むi行で構成されます。各I 番目の行は、の隣人表す、4つの値が含まれている西はそれぞれ、方向を。したがって、各値は、行1から開始して、i 番目の行の指定された方向の隣接を表し、最大65,535行になります。0値は、その方向への隣人を示していません。

たとえば、最初の行が「0 2 3 10」の場合、i隣人には3つの隣人がいることを意味します。北に1人、東に2人、南に3人、西に10人です。

北西に最も近い値から始めて、近隣の配列を出力する必要があります。各ネイバーは、他のネイバーに対する相対的な位置に1回だけ表示されます。いくつかの例を見てみましょう。

入力:

0 0 0 0

隣人なし(空の場合)、出力:

1

入力:

0 2 0 0 
0 0 0 1

1には東に隣接2があります。2には西に隣接1があります

出力:

1 2

入力:

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

1には東に隣接2があります。2には、西に隣接1、南に3があります。3は北に隣人2がいます

出力:

1 2
  3

入力:

2 0 0 0
0 0 1 0

出力:

2
1

入力:

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

出力:

1 2
3 4

ルール:

  • テストケースは1つの空の行で区切られます。異なるテストケースの出力も、1つの空行で区切る必要があります。
  • 出力グラフは常に接続されています。2のみに1ネイバーを、4にのみ3ネイバー(1-2コンポーネントから分離)を持たせるつもりはありません。
  • すべてのエントリが有効です。無効なエントリの例:
    • スペース、改行、および数字(0〜9)とは異なる文字または記号を含むエントリ。
    • I 番目含む行のI 番目の値を(一方はそれ自身の隣接することができないため)。
    • 負の値または65,535より大きい値。
    • 行の値が4つ未満。
    • 行に4つ以上の値。
    • 2つの異なる方向を指す同じ隣人(例:0 1 1 0)。

標準的な抜け穴が適用され、バイト単位の最短回答が優先されます。


4
テストケースは1つの空の行で区切られています -これは異常な要件です。通常、チャレンジエントリは一度に1つのテストケースを処理します(呼び出しごとに1つ)。チャレンジエントリが一度に複数のテストケースを処理できる場合は素晴らしいですが、複数のテストケースエントリをフォーマットする方法を厳密に指定する価値はほとんどありません。
デジタル外傷

1
@Chaotic(あなたがしたい場合は)あなたは、それを完全に削除することができ改訂履歴変更履歴の世話を
ロッド

1
出力が出力にどのように関係するのかわかりません。「隣人の配列」が何を意味するのか、そしてこの配列をどのルールで作成する必要があるのか​​を詳しく説明できますか?
ウィーグリフィン

3
ああ、私はそれを得ると思う。隣人は列挙されます1,2,...。私は隣人が東に2つの「ユニット」、南に1つの「ユニット」を持っていたが、など。それを理解できませんでした。
スチューウィーグリフィン

2
@StewieGriffinうん、それがはっきりするまでに何度か読み通さなければならなかった
Digital Trauma

回答:


2

Python 2、152バイト

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

オンラインでお試しください!

入力順序はNESW
f、家を埋めるための再帰関数です


申し訳ありませんが、機能していません。私もあなたの入力形式を試してみました(これは大丈夫だと思います):[[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]]
カオス

@Chaotic は私には問題ないようですが、出力形式が十分ではないでしょうか?
ロッド

さて、そこにあるすべてのゼロで迷子になりました。それらを削除する方が良いと思いますが、ゴルフの標準ルールのコーディングには慣れていません。
カオス

未使用のスペースをそのまま残していますか?
l4m2

2
  • まだゴルフ:)

JavaScript(Node.js)、135バイト

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

オンラインでお試しください!

_______________________________________________________________

第二のアプローチ

JavaScript(Node.js)、130バイト

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

オンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.