Ayer, hice la pregunta this y nunca obtuve una respuesta con la que estaba realmente feliz. Realmente me gustaría saber cómo generar una lista de N números aleatorios únicos usando un lenguaje funcional como Ruby sin tener que ser extremadamente imperativo en estilo.¿Cómo escribo esto en Ruby/Python? O bien, ¿puedes traducir mi LINQ a Ruby/Python?
Como yo no vi nada que me gustó, he escrito la solución que estaba buscando en LINQ:
static void Main(string[] args)
{
var temp = from q in GetRandomNumbers(100).Distinct().Take(5) select q;
}
private static IEnumerable GetRandomNumbers(int max)
{
Random r = new Random();
while (true)
{
yield return r.Next(max);
}
}
¿Se puede traducir mi LINQ a Ruby? ¿Pitón? ¿Algún otro lenguaje de programación funcional?
Nota: Intente no utilizar demasiados bucles y condicionales: de lo contrario, la solución es trivial. Además, prefiero ver una solución en la que no tiene que generar una matriz mucho más grande que N para que pueda luego simplemente eliminar los duplicados y recortar hacia abajo a N.
Sé que estoy siendo muy delicada, pero realmente me gustaría ver algunas soluciones elegantes para este problema. Gracias!
Editar:
por qué todos los downvotes?
Originalmente, mi muestra de código tenía Distinct() después de Take() que, como muchos señalaron, podría dejarme con una lista vacía. He cambiado el orden en que se llaman esos métodos para reflejar lo que quise decir en primer lugar.
Apología:
me han dicho que este post llegó a ser tan bien snob. No estaba tratando de dar a entender que LINQ es mejor que Ruby/Python; o que mi solución es mucho mejor que la de los demás. Mi intención es solo aprender a hacer esto (con ciertas restricciones) en Ruby. Lo siento si me encontré como un idiota.
Sólo para que esté claro en esto: a pesar de que Python tiene algunas construcciones funcionales, como las listas por comprensión, en realidad no es un lenguaje funcional, y esto no es una problema que resolvería fácilmente en un verdadero estilo funcional en Python. –
No obtengo los requisitos. ¿Es tomar N valores y ubicar los distintos valores en ese conjunto? ¿O es para localizar un conjunto de algún tamaño que tenga N valores distintos? –
Si toma (5) y luego distinto ... puede terminar con 1 número. –