Le Docteur, en essayant de s'échapper des forces Dalek, a décidé de les envoyer en rotation en voyageant dans diverses poches d'espace dans un mouvement en spirale.
Selon la nature de l'espace-temps disponible, le médecin doit entrer dans le TARDIS contrôle la hauteur et la largeur de la section de l'espace et son point d'entrée avec lequel commencer la spirale.
La section de l'espace peut être envisagée comme une grille h x l remplie d'entiers séquentiels de gauche à droite, de haut en bas, en commençant par 1.
La position de départ est fournie en rc pour la ligne et la colonne ... À partir de là, le logiciel TARDIS doit cracher la liste ordonnée des nombres entiers obtenue en spirale vers l'extérieur dans le sens antihoraire à partir de la ligne r de la colonne c , en commençant par le haut ...
Votre tâche, en tant que compagnon du médecin, est de programmer le TARDIS pour qu'il prenne quatre nombres, dans le format height width row column
et qu'il détermine quel secteur d'espace le TARDIS doit parcourir pour correspondre au mouvement en spirale décrit ci-dessous ...
Entrée 1
5 5 3 3
(Grille 5 x 5, à partir de la position 3,3)
Sortie 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Expliquer la sortie
Grille d'origine
Spirale générée
Entrée 2
2 4 1 2
(Grille 2 x 4 à partir de la position 1,2)
Sortie 2
2 1 5 6 7 3 8 4
Expliquer la sortie
Légèrement différent car la spirale doit maintenant tourner autour de la grille pour générer une sortie respective ...
Grille d'origine
Spirale générée
Règles:
Il s'agit de code-golf, donc la longueur de code la plus courte est approuvée.
Les exemples ci-dessus doivent être utilisés pour tester votre code. S'il ne fournit pas la sortie respective, il y a un problème ...
Les versions de code golfées et golfées doivent être fournies dans votre réponse ...
Bonne chance!
Réponses:
JavaScript (ES6) 124
163 177Modifier de manière totalement différente, pas besoin d'un tableau pour stocker les cellules visitées. En utilisant le fait que le côté de la spirale augmente de 1 après tous les 2 tours.
la source
Python 3, 191
Probablement pas un bon score, mais voilà:
Nous nous déplaçons le long de la spirale en augmentant la longueur du côté après chaque deuxième tour. Si notre position est à l'intérieur de la grille donnée, nous imprimons son numéro correspondant.
Les variables sont:
la source