introduction
Dans ce défi, vous obtenez un graphique dirigé avec des boucles automatiques et votre tâche consiste à le convertir en un graphique non dirigé sans boucles automatiques.
Contribution
Votre entrée est un graphique dirigé avec un sommet défini {0, 1, ..., n-1}
pour un certain nombre naturel n ≥ 0
(ou {1, 2, ..., n}
si vous utilisez une indexation basée sur 1). Le graphique est donné comme une n
liste de longueurs L
où L[i]
est une liste des voisins extérieurs du sommet i
. Par exemple, la liste [[0,1],[0],[1,0,3],[]]
représente le graphique
.-.
| v
'-0<--2-->3
^ |
| |
v |
1<--'
Notez que les listes de voisins ne sont pas nécessairement ordonnées, mais elles sont garanties sans doublon.
Production
Votre sortie est un autre graphique au même format que l'entrée, obtenu à partir de celui-ci comme suit.
- Supprimez toutes les boucles automatiques.
- Pour chaque bord restant
u -> v
, ajoutez le bord inversév -> u
s'il n'est pas déjà présent.
Comme pour l'entrée, les listes de voisins du graphique de sortie peuvent ne pas être triées, mais elles ne peuvent pas contenir de doublons. Pour le graphique ci-dessus, une sortie correcte serait [[1,2],[0,2],[0,1,3],[2]]
, qui représente le graphique
0<->2<->3
^ ^
| |
v |
1<--'
Règles
Vous pouvez utiliser l'indexation basée sur 0 ou basée sur 1 dans les graphiques. Les fonctions et les programmes complets sont acceptables. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites.
Cas de test
Ces cas de test utilisent une indexation basée sur 0; incrémenter chaque nombre dans le cas basé sur 1. Ces listes de voisins sont triées par ordre croissant, mais ce n'est pas obligatoire.
[] -> []
[[0]] -> [[]]
[[],[0,1]] -> [[1],[0]]
[[0,1],[]] -> [[1],[0]]
[[0,1],[0],[1,0,3],[]] -> [[1,2],[0,2],[0,1,3],[2]]
[[3],[],[5],[3],[1,3],[4]] -> [[3],[4],[5],[0,4],[1,3,5],[2,4]]
[[0,1],[6],[],[3],[3],[1],[4,2]] -> [[1],[0,5,6],[6],[4],[3,6],[1],[1,2,4]]
[[6],[0,5,1],[5,4],[3,5],[4],[5,6],[0,3]] -> [[1,6],[0,5],[4,5],[5,6],[2],[1,2,3,6],[0,3,5]]
[[1,0],[5,1],[5],[1],[5,7],[7,1],[],[1]] -> [[1],[0,3,5,7],[5],[1],[5,7],[1,2,4,7],[],[1,4,5]]
[[2,8,0,9],[5,2,3,4],[0,2],[3,7,4],[8,1,2],[5,1,9,2],[6,9],[6,5,2,9,0],[9,1,2,0],[3,9]] -> [[2,7,8,9],[2,3,4,5,8],[0,1,4,5,7,8],[1,4,7,9],[1,2,3,8],[1,2,7,9],[7,9],[0,2,3,5,6,9],[0,1,2,4,9],[0,3,5,6,7,8]]
.e
vient de passer dek,Y
àk,b
, donc pour exécuter cela, utilisez.e-.|f}k@QTUQbkQ
CJam,
4340353433 octets2 octets enregistrés par Sp3000.
Cela a commencé comme une solution vraiment élégante, puis est devenu de plus en plus hideux alors que j'essayais de réparer certains trous que j'avais négligés. Je ne sais pas encore si l'idée originale est toujours récupérable, mais je ferai de mon mieux ...
Testez-le ici. Vous pouvez également exécuter l'intégralité du faisceau de test .
J'ajouterai une explication une fois que je suis sûr que le patient est mort.
la source
Python 2, 107 octets
J'essaie toujours de savoir si je peux jouer au golf plus, mais pour l'instant, c'est le mieux que je puisse faire.
J'utilise des ensembles pour éviter les doublons; aussi, contrairement à
list.remove(i)
,{S}-{i}
ne génère pas d'erreur s'ili
n'est pas présentS
.la source
Rubis, 78 octets
Enfin, certains utilisent les opérateurs de set de ruby (
[1,2]&[2]==[2]
et[3,4,5]-[4]==[3,5]
).ideone , y compris tous les cas de test, qu'il réussit.
la source
CJam, 26 octets
Pas très court ...
Explication
la source
JavaScript (ES6), 96
110Création d'ensembles d'adjacence à partir de la liste d'adjacence, ce qui permet d'éviter les doublons. Enfin, il reconstruit les listes à partir des ensembles.
la source
Java, 150
Code étendu et exécutable:
la source
Groovy - 87
Script complet pour exécuter les tests:
la source
Mathematica,
846664 octetsUtilisation de l'indexation basée sur 1.
la source
Python 3, 127 octets
Essayez en ligne
Pas ma meilleure tentative ...
la source