Visión general
En este desafío, su tarea es generar aleatoriamente una función matemática monotónica entre dos conjuntos.
Entrada
Sus entradas son dos enteros positivos s
y n
.
Después de obtener estas entradas, su programa generará una función matemática aleatoriaf
del conjunto a . En otras palabras, es una "regla" que toma una tupla de enteros entre y , y devuelve uno de esos enteros. Además, debe ser monótono en el siguiente sentido. Si y son dos tuplas tales que se mantienen para cada coordenada , entonces .{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)
La distribución exacta de las funciones monotónicas f
no importa, siempre que cada función tenga una probabilidad positiva de ser generada (suponiendo un RNG perfecto).
Salida
Su salida será una enumeración de las entradas y salidas de f
. Contendrá todas las n
tuplas de enteros entre 0
y s-1
en algún orden, cada uno seguido de la salida correspondiente de f
. El formato de salida exacto es flexible (dentro de lo razonable).
Ejemplos
Las entradas s = 3
y n = 2
pueden producir la salida
(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 todos los pares sobre el conjunto {0, 1, 2}
exactamente una vez, y cada uno es seguido por su f
valor. La condición de monotonicidad también se cumple. Las tuplas se dan aquí en orden lexicográfico, pero esto no es necesario.
Como otro ejemplo, s = 2
y n = 4
podría producir
(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
Las siguientes son todas las salidas posibles para s = 2
y n = 2
(hasta reordenar las tuplas); su programa debería generar aleatoriamente uno de ellos:
(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
Reglas y puntuación
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. Se prefiere el código con explicación.
No hay restricciones en la complejidad del tiempo, pero le daré una bonificación de -15% si su solución siempre se garantiza que termine en un cierto período de tiempo (dependiendo de las entradas y suponiendo un RNG perfecto que se ejecute en tiempo constante) .