Muy interesante la solución de Javi (Que demuestra tener una distribución plana), sin embargo me permito presentar la mía para su consideración:
""" Solucion para: generar una distribución plana de enteros aleatorios, del 1 al 7, usando únicamente random.randint(1,5) como funcion generadora de enteros aleatorios """ from random import randint def randint_1_7(seed=None): l = (1, 2, 3, 4, 5, 6, 7) if seed is None: seed = randint(1,5) + randint(1,5) else: seed += randint(1,5) seed = seed % 7 return (l[seed - 1], seed) if __name__ == "__main__": """ se demuestra que la distribucion es plana, pero la PRUEBA matematica se la dejo a otro... """ d = {} k, seed = randint_1_7() for n in range(100000): k, seed = randint_1_7(seed) if k in d: d[k] += 1 else: d[k] = 1 print(d) On Tue, Jul 2, 2019 at 10:10 PM lasizoillo <lasizoi...@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....@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@python.org >> https://mail.python.org/mailman/listinfo/python-es >> > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es