MATLAB, 30 bytes
@(a)datasample(repelem(n,n),1)
Isso pressupõe o MATLAB R2015a ou mais recente e com a caixa de ferramentas Estatísticas e aprendizado de máquina instalada.
Veja a explicação abaixo para saber como repelemé usado. A diferença entre este menor e o abaixo é que a caixa de ferramentas S&ML inclui a função datasampleque pode ser usada para obter um ou mais elementos de uma matriz aleatoriamente (com probabilidade uniforme), o que permite que uma função anônima seja usada, eliminando oinput/disp chamadas.
MATLAB, 49 bytes
n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))
Este código pressupõe que o MATLAB R2015a ou mais recente seja usado como quando a repelemfunção foi introduzida. repelemé uma função que aceita dois parâmetros, o primeiro é uma matriz de números a serem replicados e a segunda é uma matriz de quantas vezes o elemento correspondente deve ser replicado. Essencialmente, a função executa decodificação de duração, fornecendo o número e a duração.
Ao fornecer a mesma entrada para ambas as entradas repelem, terminamos com uma matriz que consiste em n vezes mais do elemento n, se isso faz sentido. Se você forneceu [1 2 3], receberia [1 2 2 3 3 3]. Se você forneceu [1 2 4 2], receberia [1 2 2 4 4 4 4 2 2]. Ao fazer isso, significa que, se selecionarmos um elemento com probabilidade uniforme ( randi(m)fornecer um número inteiro aleatório de 1 a m com probabilidade uniforme), cada elemento n terá uma probabilidade n vezes maior de ser selecionado. No primeiro exemplo de [1 2 3], 1teria uma chance de 1/6, 2teria uma chance de 2/6 e 3teria uma chance de 3/6.
Como uma observação lateral, como repelemainda não está disponível para o Octave, não posso fornecer um link TIO. Além disso, porque Octave não pode ser utilizado há uma penalidade de caráter grande quanto input()e disp()necessidade de ser usado como uma função anônima não é possível. Se o Octave suportasse repelem, o seguinte poderia ser usado:
@(n)a(randi(nnz(a=repelem(n,n))))
Isso teria economizado 16 bytes, mas não era para ser.