Entrée: un tableau I de k entiers positifs. Les entiers ne seront pas supérieurs à 100 et k ≤ 100 .
Sortie: Votre code doit sortir tous les tableaux possibles O d'entiers non négatifs de longueur k avec la restriction 0 ≤ O i ≤ I i . Pour passer d'un tableau au suivant, vous pouvez ajouter ou soustraire 1 à une valeur du tableau. Votre code ne doit pas sortir deux fois le même tableau. Si le nombre de tableaux différents à générer est très élevé, votre code doit simplement continuer à produire jusqu'à ce qu'il soit tué.
Exemples
Si I est un tableau de k unités, c'est exactement le problème d'itérer sur tous les codes Gray de largeur de bit k , sauf que le premier et le dernier élément n'ont pas besoin d'être accessibles en une seule étape.
Si
I = [2,1]
alors un ordre possible des tableaux de sortie est(0,0),(0,1),(1,1),(1,0),(2,0),(2,1)
- Si
I = [2,1,3]
alors un ordre possible des tableaux de sortie est(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),...
.
Il s'agit d'un défi de code-golf, la soumission avec le code source avec la plus courte durée l'emporte. Ne laissez pas les réponses courtes dans les langues de golf vous décourager de poster une réponse dans d'autres langues. Essayez de trouver la réponse la plus courte dans n'importe quelle langue.
Il s'agit également d'un défi de complexité limitée. Chaque nouveau tableau doit être sorti avec O (k) temps écoulé depuis le tableau sorti précédent (ou le début du programme pour le premier tableau sorti). Cela signifie que le temps d'exécution par nouveau tableau de sortie (ils sont chacun de longueur k ) ne doit pas être supérieur à O (k) . C'est-à-dire que cela devrait prendre une proportion de temps à k et non pas, par exemple k 2 ou 2 k . Notez que ce n'est pas le temps moyen par sortie, mais le pire des cas pour chaque tableau sorti.
Vous pouvez supposer que toute l'arithmétique sur des entiers 64 bits peut être effectuée en temps constant, tout comme la lecture et la sortie ainsi que l'affectation et la recherche et la modification des valeurs dans les tableaux.
Une conséquence de la complexité restreinte est que les solutions qui ne sortent qu'à la sortie du programme ne sont pas acceptables.
n
et k
sont limitées? en supposant qu'ils vont à l'infini avec une largeur de bit comment aller
I_i+1
? Pouvez-vous atteindre 0 à partir deI_i
?)