Modification importante: auparavant, il y avait une valeur incorrecte dans l'exemple 1. Elle a été corrigée.
Vous obtenez un tableau à deux dimensions dans lequel chaque cellule contient l'une des quatre valeurs.
Exemples:
1 2 2 2 2 1 @ . . X X V
1 3 1 4 1 4 e . @ I C V
2 3 1 3 4 2 H H @ X I V
1 4 4 2 1 3 V C C
2 2 2 3 2 3 X X X
Les quatre valeurs représentent des flèches directionnelles (haut, bas, gauche et droite), bien que vous ne sachiez pas quelle valeur représente quelle direction.
Les flèches directionnelles forment un chemin ininterrompu qui inclut toutes les cellules du tableau, bien que vous ne sachiez pas où se trouvent les points de début ou de fin.
Écrivez du code qui détermine dans quelle direction chacune des quatre valeurs représente et où se trouvent les points de début et de fin.
Une valeur de retour acceptable pour un tableau contenant les valeurs A, B, C et D serait quelque chose comme:
{ up: A, down: C, left: D, right: B, start: [2, 0], end: [4, 2] }
Parce que vous pouvez parcourir le chemin dans les deux sens (du début à la fin et de la fin au début), il y aura toujours plus d'une solution correcte et il peut y en avoir plus de deux. Supposons que les entrées que vous recevez (comme dans les exemples ci-dessus) aient toujours au moins une solution correcte. Dans les cas où il existe plusieurs solutions correctes, le retour d'une seule des solutions correctes est suffisant.
Le code le plus court gagne. Je choisirai le gagnant après 7 jours ou 24 heures sans nouvelle soumission, selon la première éventualité.
J'inclus des solutions aux exemples ci-dessus, mais je vous encourage à ne les vérifier qu'une fois que vous avez écrit votre code:
Une:
{haut: 3, bas: 1, gauche: 4, droite: 2, début: [0,0], fin: [2,5]}
Deux:
{haut: '@', bas: 'e', gauche: '.', droite: 'H', début: [1,1], fin: [0,0]}
Trois:
{haut: 'I', bas: 'V', gauche: 'C', droite: 'X', début: [0,2], fin: [4,2]}
Réponses:
C #
EDIT: correction d'une division et d'un formatage. Et ajouté la classe d'assistance.
Ceci est le code golfé, 807 caractères
Résultats pour les trois cas de test:
C'est le code brut sans "golf", près de 4 000 caractères:
Voici les résultats pour les trois exemples:
la source
Mathematica 278
Espaces ajoutés pour "clarté"
Session et sortie:
Quels sont le sommet de début, le sommet de fin et les règles de transition associées à chaque symbole.
Voici le code complémentaire pour montrer le graphe orienté:
la source
Mathématiques (151)
Il renvoie les règles de point de départ, de fin et de transition. Le premier index est une ligne, le second est une colonne
Notez que mon code fonctionne même avec
{-1,0,1}~Tuples~{4,2}
. Pour accélérer, vous pouvez utiliser à laPermutations@{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}
place.la source
APL (207)
Je ne pouvais pas le rendre plus court que Mathematica, car je ne pouvais pas raisonner en termes de TopologicalSort et autres. Les gens plus intelligents sont invités à le resserrer davantage.
Golfé:
Non golfé:
Exemples:
(Les indices commencent à 1)
la source