[Python-es] ¿Cómo generar una distribución aleatoria?

AGTUGO agtugo en gmail.com
Mie Jul 3 00:52:34 EDT 2019


Tal cual lo contest'o Javi es m'as importante el m'etodo con el que lo
resuelves, es imposible saberlo todo, aunque recomiendo Classic Computer
Science Problems in Python. Es buena referencia para problemas.

On Tue, Jul 2, 2019 at 7:09 PM lasizoillo <lasizoillo en gmail.com> wrote:

> Buenas,
>
> Lo primero sería acotar cual es realmente el problema. En una entrevista
> de trabajo alguien tiene que desentrañar si eres apto o no para un puesto y
> esa aptitud puede tener varias facetas:
> - Eres capaz de poner en duda los requisitos y plantear alternativas
> mejores para la empresa
> - Eres capaz de resolver problemas lógicos
> - Ante un problema que muy posiblemente no sabes por dónde cogerlo...
> ¿cómo vas a reaccionar? te enfadarás, tratarás de colar una solución
> erronea, asumirás que no sabes hacer eso pero plantearás estrategias para
> atacar el problema, ...
>
> Así que lo primero negociaría si realmente no se puede simplificar el
> enunciado porque lo que realmente se quiere evaluar el conocimiento técnico
> o recursos para atacar este problema. Si les vale ser capaz de poner en
> duda requisitos peregrinos eso que me ahorraría. Si quiere una solución
> técnica pasaría a atacar el problema, reconociendo que no sé la solución a
> priori, y pensaría en voz alta algunas cosas evidentes:
> - Una sola llamada a la función randint(1,5) no tiene información
> suficiente para hacer el equivalente a randint(1,7)
> - No puedo sumar 7 "tiradas" de randint(1,5) y dividir entre 5 porque la
> distribución no sería plana.
> - Al no ser una potencia de dos no puedo convertir a binario la función
> randint(1,5) y codificar los bits del número. Ejemplo 1 y 3 es un 0, 2 y 4
> es un 1 y 5 vuelvo a calcular. 2^3=8, por lo que tres bits de tiradas
> binarias me darían números del 0 al 7, no del 1 al 7.
>
> Ahora diría en alto lo que me parece una solución válida que me ha venido
> a la cabeza: lo mismo que con la función randint(1,5) desechaba cuando
> salía 5 para simular tiradas de cara o cruz, puedo eliminar cuando el
> resultado de calcular 3 bits me da un número que equivale a 0. Pensaría si
> cumple con las restricciones del enunciado (creo que si) y pasaría a una
> implementación rápida.
>
> def rand_0_1() -> int:
>      while True:
>           num = randint(1, 5)
>           if num==5:
>               continue
>           return num % 2
>
> def randint_1_7() -> int:
>      while True:
>           num = rand_0_1() * 4 + rand_0_1() * 2 + rand_0_1()
>           if num:
>              return num
>
> Le comentaría que lo suyo sería hacer una función de test para quedarme
> tranquilo con que el resultado es correcto y poder refactorizar en el
> futuro si se me ocurre una solución mejor. Escucharía si quiere dejarlo
> aquí o si quiere ver la función que haga el test (que no es trivial, pero
> tampoco demasiado complicada). Pero la función de test ya se escapa a tu
> propuesta ;-)
>
> Un saludo,
>
> Javi
>
>
> El mié., 3 jul. 2019 a las 1:50, Jose Caballero (<jcaballero.hep en gmail.com>)
> escribió:
>
>> Hola,
>>
>> a un colega le han preguntado durante una entrevista de trabajo lo
>> siguiente:
>> ¿cómo generar una distribución plana de enteros aleatorios, del 1 al 7,
>> usando únicamente random.randint(1,5)?
>> O sea, sin usar ninguna otra función que genere números aleatorios.
>>
>> Y he pensado en proponer el reto aquí, a ver lo que los miembros de la
>> lista sugieren.
>>
>> Un saludo,
>> Jose
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Arturo Muñoz Tolosa
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20190702/afc5759f/attachment.html>


Más información sobre la lista de distribución Python-es