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?

cs.stackexchange https://cs.stackexchange.com/questions/97294

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.

Documentation

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top