Sobre la serie
En primer lugar, puede tratar esto como cualquier otro desafío de golf de código y responderlo sin preocuparse por la serie. Sin embargo, hay una tabla de clasificación en todos los desafíos. Puede encontrar la tabla de clasificación junto con más información sobre la serie en la primera publicación .
Hoyo 8: baraja una lista infinita
Debe escribir una función o programa que tome una lista infinita como entrada y devuelva una versión aleatoria de esa lista.
Acerca de E / S infinitas
Hay varias formas en que puede tomar datos y producir resultados para este desafío:
- Puede tomar una lista de enteros positivos, o una representación de cadena de los mismos, o una cadena o lista de caracteres ASCII imprimibles (0x20 a 0x7E, inclusive). El formato de salida debe coincidir con el formato de entrada. Me referiré a los datos como "la lista" de ahora en adelante, independientemente de la opción que elija.
- Puede leer la lista desde una secuencia de entrada estándar infinita y escribir la salida continuamente en una secuencia de salida estándar infinita. La solución no debe depender de ningún valor o secuencia de valores en particular para garantizar que la secuencia de salida se escriba y se vacíe regularmente (por ejemplo, no puede escribir la salida siempre que haya una
5
en la lista de entrada). Por supuesto, si lee una representación de cadena de una lista, está bien esperar hasta encontrar el separador de lista. - En los idiomas que los admiten, puede escribir una función que tome y devuelva una lista o cadena infinita perezosa.
- En los idiomas que los admiten, puede implementar un generador infinito que tome otro generador como entrada.
- Alternativamente, puede escribir una función que no tome argumentos y devuelva un valor de salida cada vez que se llame. En este caso, puede suponer que se ha definido una función que no toma argumentos y devuelve el siguiente valor de entrada cada vez que se llama. Puedes elegir libremente el nombre de esa función.
Puede suponer que su programa se ejecuta para siempre y que hay memoria infinita disponible. (Es posible resolver esto con una cantidad finita de memoria, pero lo que esto significa es que se le permite perder memoria).
Sobre la aleatoriedad
Para cualquier valor v que se lea en una posición i de la entrada infinita, debe haber una probabilidad positiva de que termine en cualquiera de las posiciones i-9 a i + 9 de la salida infinita (a menos que esa posición sea negativa ) Estas probabilidades no tienen que ser las mismas para diferentes posiciones de salida o incluso para diferentes posiciones de entrada. Está bien si su solución también puede barajar los valores a otra posición que esté más lejos.
Por lo tanto, no es necesario que su solución pueda barajar el primer valor muy abajo en la lista, o que pueda barajar un valor muy tardío hasta la primera posición, aunque está bien si lo hace, siempre que todas las posiciones estén a 9 pasos del La entrada es posible.
Por ejemplo, si tomó la siguiente cadena como entrada, ___
indica todas las posiciones que X
deben poder terminar en la salida:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Si su idioma carece de un generador de números aleatorios incorporado o no desea usarlo, puede tomar un valor semilla adicional como entrada e implementar su propio RNG adecuado utilizando la semilla. Esta página puede ser útil para eso.
Independientemente de la distribución real que utilice su solución, es casi seguro que debe producir el siguiente valor después de un tiempo finito (pero arbitrario).
Incluya una breve explicación sobre cómo su implementación satisface estos requisitos.
Tanteo
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Tabla de clasificación
La primera publicación de la serie genera una tabla de clasificación.
Para asegurarse de que sus respuestas aparezcan, comience cada respuesta con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(El idioma no se muestra actualmente, pero el fragmento sí lo requiere y analiza, y puedo agregar una tabla de clasificación por idioma en el futuro).