Comment puis-je générer efficacement la liste la plus courte d'arguments pour la fonction Range () qui générera une liste donnée d'entiers?
-
05-11-2019 - |
Question
J'ai rencontré un problème intéressant au travail lorsque j'essaie de générer les entrées pour une API compte tenu de la sortie attendue. J'ai essayé de formaliser et d'anonymiser le problème ci-dessous. J'ai essayé de concevoir un algorithme rapide qui fonctionne ici mais je suis un peu coincé. Merci d'avance pour l'aide! Je ne suis pas un écrivain expérimenté, alors n'hésitez pas à le modifier pour le rendre plus clair. Je ferai de mon mieux pour répondre à toutes les questions de clarification.
Arrière plan
Dans Python 2.7, le range
La fonction prend 3 arguments (démarrer, arrêter et étape) et renvoie une liste des entiers.
Le formulaire complet renvoie une liste des entiers simples [Démarrer, démarrer + étape, démarrer + 2 * étape, ...]. Si l'étape est positive, le dernier élément est le plus grand démarrage + I * étape inférieure à l'arrêt; Si l'étape est négative, le dernier élément est le plus petit démarrage + i * étape supérieure à l'arrêt.
Exemples
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)
[0, 3, 6, 9]
Problème
Compte tenu d'une liste d'entiers positifs, je génère une liste de 3 toples qui, lorsqu'ils sont introduits dans le range()
Fonction qui générera le même ensemble d'entiers que moi. La liste des réponses doit être la longueur minimale possible. S'il existe plus d'une solution de longueur minimale, renvoyez l'une des solutions.
Exemples
Input: [1, 2, 3]
Output: [(1, 4, 1)]
Input: [1, 2, 3, 5, 7, 9]
Output: [(1, 4, 1), (5, 10, 2)] or [(1, 10, 2), (2, 3, 1)]
Input: [1, 2, 4, 5, 6, 11, 12, 13]
Output: [(1, 3, 1), (4, 7, 1), (11, 14, 1)]
Pas de solution correcte