Input: un array I di k numeri interi positivi. I numeri interi non saranno maggiori di 100 e k ≤ 100 .
Output: il codice deve generare tutti i possibili array O di numeri interi non negativi di lunghezza k con la restrizione che 0 ≤ O i ≤ I i . Per passare da un array al successivo, è possibile aggiungere o sottrarre 1 a un valore nell'array. Il codice non deve generare lo stesso array due volte. Se il numero di matrici diverse da emettere è molto elevato, il codice dovrebbe continuare a essere emesso per sempre fino a quando non viene ucciso.
Esempi
Se I è un array di k , allora questo è esattamente il problema di iterare su tutti i codici Gray di larghezza bit k , tranne per il fatto che il primo e l'ultimo elemento non devono essere raggiungibili in un solo passaggio.
In
I = [2,1]
tal caso, un possibile ordinamento degli array di output è(0,0),(0,1),(1,1),(1,0),(2,0),(2,1)
- In
I = [2,1,3]
tal caso, un possibile ordinamento degli array di output è(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),...
.
Questa è una sfida di code-golf, vince l'invio con il codice sorgente con la lunghezza più breve. Non lasciare che le brevi risposte nelle lingue del golf ti scoraggino dal pubblicare una risposta in altre lingue. Prova a trovare la risposta più breve in qualsiasi lingua.
Questa è anche una sfida a complessità limitata. Ogni nuovo array deve essere emesso con il tempo O (k) trascorso dal precedente array in uscita (o dall'inizio del programma per il primo array in uscita). Ciò significa che il tempo di esecuzione per il nuovo array di output (sono ciascuno di lunghezza k ) non deve essere maggiore di O (k) . Cioè dovrebbe richiedere del tempo proporzionale a k e non, ad esempio k 2 o 2 k . Si noti che questo non è il tempo medio per output ma il tempo peggiore per ogni array emesso.
Si può presumere che tutta l'aritmetica su numeri interi a 64 bit può essere eseguita in tempo costante, così come la lettura e la loro emissione, nonché l'assegnazione, la ricerca e la modifica dei valori negli array.
Una conseguenza della complessità limitata è che le soluzioni che escono solo all'uscita dal programma non sono accettabili.
n
e k
sono limitate? supponendo che vadano all'infinito con un po 'di larghezza come andare
I_i+1
? Puoi raggiungere 0 daI_i
?)