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.
I_i+1
? Pouvez-vous atteindre 0 à partir deI_i
?)n
etk
sont limitées? en supposant qu'ils vont à l'infini avec une largeur de bit comment allerRéponses:
Python 3 , 116 octets
Essayez-le en ligne!
Merci Mnemonic pour -1 octet.
Fonction générateur. (merci Dennis de me l'avoir rappelé, j'ai oublié que la fonctionnalité existe) Si la sortie doit être imprimée sur stdout, utilisez-la
print(t,flush=1)
pour 9 octets supplémentaires, ou si Python est appelé avec-u
,print(t)
suffit pour +1 octet.Arrête avec une erreur (
IndexError
). Si vous voulez appeler cette fonction et continuer le programme, vous devez l'attraper.la source
k
étapes, car à chaque étape,i
augmente par1
et après lesk
étapesi==k
etd[i]
provoque une erreur.not 0<=
parnot-1<
.yield t
place deprint(t,flush=1)
?Stax , 22 octets
Exécuter et déboguer
En voici un grand pour montrer le comportement asymptotique Appuyez sur Exécuter.
Déballé, non golfé et commenté, il ressemble à ceci.
Exécutez celui-ci
la source
O(k)
bits, donc lesk
temps de division peuvent prendre duO(k²)
temps ...JavaScript (Node.js) , 114 octets
Essayez-le en ligne! Non golfé:
la source
Kotlin ,
181178 octetsMerci à: Anush a souligné que j'avais mal compris le défi d'économiser 2 octets. ovs a souligné une économie de 1 octet.
Essayez-le en ligne!
la source
while(true)
peut êtrewhile(1<2)