Visão geral
Nesse desafio, sua tarefa é gerar aleatoriamente uma função matemática monotônica entre dois conjuntos.
Entrada
Suas entradas são dois números inteiros positivos s
e n
.
Depois de obter essas entradas, seu programa deve gerar uma função matemática aleatóriaf
do conjunto para . Em outras palavras, é uma "regra" que recebe um número múltiplo de números inteiros entre e e retorna um número inteiro. Além disso, deve ser monotônico no seguinte sentido. Se e são dois -tuples, tal que vale para todas as coordenadas , então .{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)
A distribuição exata das funções monotônicas f
não importa, desde que cada uma dessas funções tenha uma probabilidade positiva de ser gerada (assumindo um RNG perfeito).
Resultado
Sua saída deve ser uma enumeração das entradas e saídas de f
. Deve conter todos os n
-tuplos de números inteiros entre 0
e s-1
em alguma ordem, cada um sendo seguido pela saída correspondente de f
. O formato exato da saída é flexível (dentro do motivo).
Exemplos
As entradas s = 3
e n = 2
podem produzir a saída
(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
Ele contém todos os pares sobre o conjunto {0, 1, 2}
exatamente uma vez e cada um é seguido pelo seu f
valor. A condição de monotonicidade também é satisfeita. As tuplas são fornecidas aqui em ordem lexicográfica, mas isso não é necessário.
Como outro exemplo, s = 2
e n = 4
pode produzir
(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
A seguir, são apresentadas todas as saídas possíveis para s = 2
e n = 2
(até a reordenação das tuplas); seu programa deve gerar aleatoriamente um deles:
(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
Regras e Pontuação
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas. Código com explicação é o preferido.
Não há restrições à complexidade do tempo, mas darei um bônus de -15% se a sua solução sempre garantir a conclusão em um determinado período de tempo (dependendo das entradas e assumindo um RNG perfeito que funcione em tempo constante) .