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 sy 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}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)
La distribución exacta de las funciones monotónicas fno 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 ntuplas de enteros entre 0y s-1en 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 = 3y n = 2pueden 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 fvalor. 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 = 2y n = 4podrí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 = 2y 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) .