Panoramica
In questa sfida, il tuo compito è generare casualmente una funzione matematica monotonica tra due insiemi.
Ingresso
I tuoi input sono due numeri interi positivi s
e n
.
Dopo aver ottenuto questi input, il tuo programma deve generare una funzione matematica casualef
dal set a . In altre parole, è una "regola" che accetta una -tupla di numeri interi tra e e restituisce un numero intero. Inoltre, dovrebbe essere monotonico nel senso seguente. Se e sono due tuple tali che valgono per ogni coordinata , allora .{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)
L'esatta distribuzione delle funzioni monotoniche f
non ha importanza, purché ciascuna di tali funzioni abbia una probabilità positiva di essere generata (assumendo un RNG perfetto).
Produzione
L'output deve essere un elenco degli input e degli output di f
. Deve contenere tutte le n
tuple di numeri interi compresi tra 0
e s-1
in un certo ordine, ciascuno seguito dal corrispondente output di f
. Il formato di output esatto è flessibile (entro limiti ragionevoli).
Esempi
Gli input s = 3
e n = 2
potrebbero produrre l'output
(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
Contiene tutte le coppie sull'insieme {0, 1, 2}
esattamente una volta e ognuna è seguita dal suo f
valore. Anche la condizione di monotonicità è soddisfatta. Le tuple sono date qui in ordine lessicografico, ma questo non è necessario.
Come altro esempio, s = 2
e n = 4
potrebbe produrre
(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
Di seguito sono riportate tutte le possibili uscite per s = 2
e n = 2
(fino al riordino delle tuple); il tuo programma dovrebbe generare casualmente uno di questi:
(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
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard . Il codice con spiegazione è preferito.
Non ci sono restrizioni sulla complessità temporale, ma darò un bonus del -15% se la tua soluzione è sempre garantita per terminare in un certo lasso di tempo (a seconda degli input e ipotizzando un RNG perfetto che funzioni a tempo costante) .