Überblick
In dieser Herausforderung besteht Ihre Aufgabe darin, eine monotone mathematische Funktion zwischen zwei Mengen zufällig zu generieren .
Eingang
Ihre Eingaben sind zwei positive ganze Zahlen s
und n
.
Nachdem Sie diese Eingaben erhalten haben, soll Ihr Programm eine zufällige mathematische Funktion f
aus der Menge bis erzeugen . Mit anderen Worten, ist eine "Regel", die ein -Tupel von Ganzzahlen zwischen und aufnimmt und eine solche Ganzzahl zurückgibt. Darüber hinaus sollte im folgenden Sinne monoton sein . Wenn und zwei Tupel sind, die für jede Koordinate gelten , dann .{0,1,...,s-1}n
{0,1,...,s-1}
f
n
0
s-1
f
A
B
n
A[i] ≥ B[i]
i
f(A) ≥ f(B)
Die genaue Verteilung der monotonen Funktionen f
spielt keine Rolle, solange für jede dieser Funktionen eine positive Wahrscheinlichkeit der Erzeugung besteht (unter der Annahme eines perfekten RNG).
Ausgabe
Ihr Output soll eine Aufzählung der Inputs und Outputs von sein f
. Es muss alle n
-tupel von ganzen Zahlen zwischen 0
und s-1
in einer bestimmten Reihenfolge enthalten, gefolgt von der entsprechenden Ausgabe von f
. Das genaue Ausgabeformat ist flexibel (in Grenzen).
Beispiele
Die Eingaben s = 3
und n = 2
können die Ausgabe erzeugen
(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 0
(1, 1) 1
(1, 2) 2
(2, 0) 1
(2, 1) 1
(2, 2) 2
Es enthält alle Paare über die Menge {0, 1, 2}
genau einmal, und jedem folgt sein f
Wert. Die Monotonie-Bedingung ist ebenfalls erfüllt. Die Tupel werden hier in lexikografischer Reihenfolge angegeben, dies ist jedoch nicht erforderlich.
Als weiteres Beispiel s = 2
und n = 4
könnte produzieren
(0, 0, 0, 0) 0
(0, 0, 0, 1) 0
(0, 0, 1, 0) 0
(0, 0, 1, 1) 0
(0, 1, 0, 0) 1
(0, 1, 0, 1) 1
(0, 1, 1, 0) 1
(0, 1, 1, 1) 1
(1, 0, 0, 0) 0
(1, 0, 0, 1) 1
(1, 0, 1, 0) 0
(1, 0, 1, 1) 1
(1, 1, 0, 0) 1
(1, 1, 0, 1) 1
(1, 1, 1, 0) 1
(1, 1, 1, 1) 1
Das Folgende sind alle möglichen Ausgaben für s = 2
und n = 2
(bis zur Neuordnung der Tupel); Ihr Programm sollte zufällig eines davon ausgeben:
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 0
-------
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 0
(1,0) 1
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 1
(1,1) 1
-------
(0,0) 1
(0,1) 1
(1,0) 1
(1,1) 1
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Code mit Erklärung wird bevorzugt.
Es gibt keine Einschränkungen hinsichtlich der Zeitkomplexität, aber ich werde einen Bonus von -15% gewähren, wenn Ihre Lösung immer in einer bestimmten Zeit fertig ist (abhängig von den Eingaben und unter der Annahme eines perfekten RNG, das in konstanter Zeit ausgeführt wird). .