Il y a un réseau de jusqu'à 26 nœuds (nommés A
à Z
ou a
à z
selon votre souhait). Chaque paire de nœuds peut être connectée ou déconnectée. Un nœud peut être connecté à au plus 4 autres nœuds. Votre tâche consiste à dessiner le réseau dans un diagramme 2D. L'entrée sera donnée de telle sorte que cette tâche soit possible (voir plus de contraintes dans la section sortie).
Format
Contribution
- Paires de lettres (
A
àZ
oua
àz
selon votre souhait). Ils ne sont triés dans aucun ordre. - Facultatif - nombre de paires
Sortie
- Un dessin ASCII qui montre les liens réels entre les nœuds. Les nœuds sont donnés par
a
àz
ouA
àZ
. À utiliser-
pour les liens horizontaux et|
pour les liens verticaux. Les liens peuvent être de n'importe quelle longueur (non nulle) mais ils doivent être des lignes horizontales / verticales droites qui ne se plient pas . Des espaces peuvent être ajoutés à condition qu'ils ne défigurent pas l'image.
Vous ne pouvez pas utiliser des éléments intégrés qui aident à la présentation du graphique. D'autres modules intégrés liés aux graphiques peuvent être autorisés (bien que des solutions sans modules intégrés soient plus appréciées). Le code le plus court gagne.
Exemples de données
Contribution
A B
B F
B L
F K
L K
K R
K S
R P
S J
S P
J A
T V
V N
Sortie
A - B - F T - V
| | | |
| L - K - R N
| | |
J ----- S - P
Contribution
H C
G H
A B
B F
B C
F G
C D
D A
Sortie
A - B ----- F
| | |
D - C - H - G
code-golf
ascii-art
graph-theory
ghosts_in_the_code
la source
la source
H A
et que le bord n'est pas dans la sortie donnée. Edit: problème identifié et corrigé.Réponses:
CJam, 142
Vous n'aviez pas demandé une solution optimale, déterministe ou rapide, alors voilà:
Essayez-le en ligne
Cela génère des coordonnées aléatoires pour chaque lettre et teste si la disposition est acceptable (lettres de bord alignées et pas d'intersections), jusqu'à ce qu'elle le soit. Cela devient incroyablement lent lorsque vous ajoutez plus de bords.
Les deux
D
lettres du code spécifient les coordonnées maximales x et y; J'ai choisiD
(= 13) car je pense que cela devrait être suffisant dans tous les cas, n'hésitez pas à me prouver le contraire. Mais vous pouvez les changer en d'autres valeurs pour accélérer le programme, par exemple le 2ème exemple devrait se terminer dans une minute ou deux si vous utilisez 3 et 4 à la place.la source
C, 813 octets
Prend l'entrée comme arguments de ligne de commande, par exemple:
Nulle part plus compétitif avec la réponse d'Aditsu en termes de taille, mais beaucoup plus efficace!
Cela forcera toutes les solutions possibles, mais reconnaîtra rapidement l'échec au fur et à mesure. Pour les deux cas de test, il se termine presque immédiatement, et il semble ne prendre que quelques secondes sur des entrées plus maladroites. Il n'a également aucune limitation aux noms de nœuds acceptés (bien que vous ne puissiez pas nommer un espace,
|
ou-
) et n'a pas de limite sur le nombre de nœuds (tant que tous les noms tiennent dans un octet, la limite pratique est donc de 252 nœuds, et cela ralentira longtemps avant d’atteindre ce nombre).Il y a beaucoup de possibilités pour accélérer cela; beaucoup de courts-circuits sortis ont été perdus pour le golf, et il y a des pièces qui pourraient être retirées des boucles chaudes. Certaines observations de symétrie peuvent également réduire considérablement le positionnement des 2 premiers nœuds, entre autres.
Panne:
la source