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.


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


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.