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 se 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}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)
L'esatta distribuzione delle funzioni monotoniche fnon 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 ntuple di numeri interi compresi tra 0e s-1in un certo ordine, ciascuno seguito dal corrispondente output di f. Il formato di output esatto è flessibile (entro limiti ragionevoli).
Esempi
Gli input s = 3e n = 2potrebbero 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 fvalore. Anche la condizione di monotonicità è soddisfatta. Le tuple sono date qui in ordine lessicografico, ma questo non è necessario.
Come altro esempio, s = 2e n = 4potrebbe 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 = 2e 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) .