Découvrez mon nombre de voisins

11

L'entrée se compose de i lignes avec des informations sur les voisins. Chaque i ème ligne contient 4 valeurs, représentant le voisin de i vers les directions Nord , Est , Sud et Ouest , respectivement. Ainsi, chaque valeur représente un voisin dans la direction donnée de la i ème ligne, à partir de la ligne 1, et peut aller jusqu'à 65 535 lignes. La valeur 0 indique aucun voisin dans cette direction.

Par exemple, si la première ligne est "0 2 3 10", cela signifie que le i voisin a trois autres voisins: personne au nord, voisin 2 à l'est, voisin 3 au sud et voisin 10 à l'ouest.

Vous devez sortir le tableau des voisins, en commençant par la valeur la plus au nord-ouest. Chaque voisin ne sera affiché qu'une seule fois, à sa position par rapport aux autres. Voyons quelques exemples:

Contribution:

0 0 0 0

Aucun voisin (boîtier vide), sortie:

1

Contribution:

0 2 0 0 
0 0 0 1

1 a le voisin 2 à l'est. 2 a le voisin 1 à l'ouest

Production:

1 2

Contribution:

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

1 a le voisin 2 à l'est. 2 a le voisin 1 à l'ouest et 3 au sud. 3 a un voisin 2 au nord

Production:

1 2
  3

Contribution:

2 0 0 0
0 0 1 0

Production:

2
1

Contribution:

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

Production:

1 2
3 4

Règles:

  • Les cas de test sont séparés par une ligne vide . La sortie de différents cas de test doit également être séparée par une ligne vide.
  • Le graphique de sortie est toujours connecté. Vous n'allez pas avoir 1 voisin à 2 seulement, ainsi que 3 voisins à 4 seulement (isolés de 1-2 composants).
  • Toutes les entrées sont valides. Exemple d'entrées invalides:
    • Entrées contenant des lettres ou tout autre symbole que les espaces, les sauts de ligne et les chiffres (0-9).
    • la i ème ligne contenant la i ème valeur (car on ne peut pas être son propre voisin).
    • une valeur négative ou supérieure à 65 535.
    • Moins de quatre valeurs consécutives.
    • Plus de quatre valeurs consécutives.
    • Le même voisin pointant vers deux directions différentes (ex: 0 1 1 0).

Les failles standard s'appliquent et la réponse la plus courte en octets l'emporte.

Chaotique
la source
4
Les cas de test sont séparés par une ligne vide - Il s'agit d'une exigence inhabituelle. Normalement, il est indiqué que les entrées de défi gèrent un testcase à la fois (un par appel). Si les entrées de défi peuvent gérer plusieurs cas de test à la fois, c'est parfait, mais il n'y a guère de valeur à spécifier strictement comment plusieurs entrées de cas de test doivent être formatées.
Digital Trauma
1
@Chaotic, vous pouvez le supprimer complètement (si vous le souhaitez), l' historique des révisions s'occupe du journal des modifications
Rod
1
Je ne comprends pas comment la sortie est liée à la sortie. Pouvez-vous expliquer plus en détail ce que signifie "tableau de voisins" et par quelles règles ce tableau doit être créé?
Stewie Griffin
3
Aaaaah, je pense que je comprends. Les voisins sont énumérés 1,2,.... Je pensais qu'ils avaient un voisin 2 "unités" à l'est, et 1 "unité" au sud et ainsi de suite. Ça ne pouvait pas donner de sens.
Stewie Griffin le
2
@StewieGriffin yep J'ai dû le lire plusieurs fois avant qu'il ne soit clair
Digital Trauma

Réponses:

2

Python 2 , 152 octets

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

Essayez-le en ligne!

L'ordre d'entrée NESW
fest une fonction récursive pour peupler les maisons

Barre
la source
Désolé, cela ne fonctionne pas. J'ai même essayé avec votre format d'entrée (qui je suppose que ça va): [[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
@Chaotic me semble bien peut - être que le format de sortie n'est pas satisfaisant?
Rod
Ok, je me suis perdu avec tous ces zéros là-bas. Je pense qu'il serait préférable de les supprimer, mais je n'ai pas l'habitude de coder les règles standard du golf.
2018 chaotique
Restez-vous simplement l'espace inutilisé?
l4m2
2
  • toujours au golf :)

JavaScript (Node.js) , 135 octets

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

Essayez-le en ligne!

_______________________________________________________________

Deuxième approche

JavaScript (Node.js) , 130 octets

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

Essayez-le en ligne!

DanielIndie
la source