Eingabe: Ein Array I von k positiven ganzen Zahlen. Die ganzen Zahlen sind nicht größer als 100 und k ≤ 100 .
Ausgabe: Ihr Code muss alle möglichen Arrays O nicht negativer Ganzzahlen der Länge k mit der Einschränkung ausgeben, dass 0 ≤ O i ≤ I i . Um von einem Array zum nächsten zu gelangen, können Sie 1 zu einem Wert im Array addieren oder subtrahieren. Ihr Code darf nicht dasselbe Array zweimal ausgeben. Wenn die Anzahl der auszugebenden Arrays sehr groß ist, sollte Ihr Code nur für immer weiter ausgegeben werden, bis er getötet wird.
Beispiele
Wenn ich ein Array von k Einsen bin , dann ist dies genau das Problem des Iterierens über alle Gray-Codes der Bitbreite k , mit der Ausnahme, dass das erste und das letzte Element nicht in einem Schritt erreichbar sein müssen.
Wenn
I = [2,1]
ja, ist eine mögliche Reihenfolge der Ausgabearrays(0,0),(0,1),(1,1),(1,0),(2,0),(2,1)
- Wenn
I = [2,1,3]
ja, ist eine mögliche Reihenfolge der Ausgabearrays(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),...
.
Dies ist eine Code-Golf-Herausforderung, die Einreichung mit dem Quellcode mit der kürzesten Länge gewinnt. Lassen Sie sich durch die kurzen Antworten in Golfsprachen nicht davon abhalten, eine Antwort in anderen Sprachen zu verfassen. Versuchen Sie, die kürzeste Antwort in einer beliebigen Sprache zu finden.
Dies ist auch eine Herausforderung mit eingeschränkter Komplexität. Jedes neue Array sollte mit einer O (k) -Zeit ausgegeben werden, die seit dem vorherigen ausgegebenen Array (oder dem Start des Programms für das erste ausgegebene Array ) verstrichen ist. Dies bedeutet, dass die Laufzeit pro neuem Ausgangsarray (sie haben jeweils die Länge k ) nicht größer als O (k) sein sollte . Das heißt, es sollte zeitproportional zu k sein und nicht beispielsweise k 2 oder 2 k . Beachten Sie, dass dies nicht die durchschnittliche Zeit pro Ausgang ist, sondern die Zeit im ungünstigsten Fall für jedes ausgegebene Array.
Sie können davon ausgehen, dass alle Arithmetikoperationen mit 64-Bit-Ganzzahlen in konstanter Zeit ausgeführt werden können, ebenso wie das Lesen und Ausgeben sowie das Zuweisen und Nachschlagen und Ändern von Werten in Arrays.
Eine Folge der eingeschränkten Komplexität ist, dass Lösungen, die nur beim Beenden des Programms ausgegeben werden, nicht akzeptabel sind.
n
und k
sind sie begrenzt? vorausgesetzt, sie gehen mit der Bitbreite ins Unendliche
I_i+1
? Kannst du 0 von erreichenI_i
?)