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 se 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}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)
A distribuição exata das funções monotônicas fnã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 0e s-1em 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 = 3e n = 2podem 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 fvalor. 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 = 2e n = 4pode 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 = 2e 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) .