À propos de la série
Tout d'abord, vous pouvez traiter cela comme n'importe quel autre défi de golf de code et y répondre sans vous soucier de la série. Cependant, il existe un classement pour tous les défis. Vous pouvez trouver le classement avec plus d'informations sur la série dans le premier post .
Trou 8: Mélangez une liste infinie
Vous devez écrire une fonction ou un programme qui prend une liste infinie en entrée et renvoie une version mélangée de cette liste.
À propos des E / S infinies
Il existe plusieurs façons de prendre des entrées et de produire des sorties pour ce défi:
- Vous pouvez soit prendre une liste d'entiers positifs, soit une représentation sous forme de chaîne de ceux-ci, soit une chaîne ou une liste de caractères ASCII imprimables (0x20 à 0x7E, inclus). Le format de sortie doit correspondre au format d'entrée. Je vais simplement désigner les données comme "la liste" à partir de maintenant, quelle que soit l'option que vous choisissez.
- Vous pouvez lire la liste à partir d'un flux d'entrée standard infini et écrire la sortie en continu sur un flux de sortie standard infini. La solution ne doit pas dépendre d'une valeur particulière ou d'une séquence de valeurs pour garantir que le flux de sortie est régulièrement écrit et vidé (par exemple, vous ne pouvez pas simplement écrire la sortie chaque fois qu'il y a un
5
dans la liste d'entrée). Bien sûr, si vous lisez une représentation sous forme de chaîne d'une liste, il est normal d'attendre de rencontrer le séparateur de liste. - Dans les langues qui les prennent en charge, vous pouvez écrire une fonction qui prend et renvoie une liste ou une chaîne infinie paresseuse.
- Dans les langues qui les prennent en charge, vous pouvez implémenter un générateur infini qui prend un autre générateur en entrée.
- Alternativement, vous pouvez écrire une fonction qui ne prend aucun argument et renvoie une valeur de sortie à chaque appel. Dans ce cas, vous pouvez supposer qu'une fonction a été définie qui ne prend aucun argument et renvoie la valeur d'entrée suivante à chaque appel. Vous pouvez librement choisir le nom de cette fonction.
Vous pouvez supposer que votre programme s'exécute pour toujours et qu'une mémoire infinie est disponible. (Il est possible de résoudre ce problème avec une quantité de mémoire limitée, mais cela signifie que vous êtes autorisé à perdre de la mémoire.)
À propos du caractère aléatoire
Pour toute valeur v lue à une position i de l'entrée infinie, il doit y avoir une probabilité positive qu'elle se retrouve dans l'une des positions i-9 à i + 9 de la sortie infinie (à moins que cette position ne soit négative ). Ces probabilités ne doivent pas nécessairement être les mêmes pour différentes positions de sortie ou même pour différentes positions d'entrée. C'est bien si votre solution peut également mélanger les valeurs à une autre position plus éloignée.
Par conséquent, il n'est pas nécessaire que votre solution puisse mélanger la première valeur très loin dans la liste, ou qu'elle puisse mélanger une valeur très tardive jusqu'à la première position, bien que ce soit correct si c'est le cas, tant que toutes les positions se trouvent à 9 étapes de la entrée sont possibles.
Par exemple, si vous avez pris la chaîne suivante en entrée, le ___
indique toutes les positions que le X
doit pouvoir finir dans la sortie:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Si votre langue ne dispose pas d'un générateur de nombres aléatoires intégré ou si vous ne souhaitez pas l'utiliser, vous pouvez prendre une valeur de départ supplémentaire en entrée et implémenter votre propre RNG approprié à l'aide de la valeur de départ. Cette page peut être utile pour cela.
Quelle que soit la distribution réelle utilisée par votre solution, elle doit presque sûrement produire la valeur suivante après un temps fini (mais arbitraire).
Veuillez inclure une brève explication sur la manière dont votre implémentation satisfait à ces exigences.
Notation
Ceci est un code-golf , donc la plus courte réponse valable - mesurée en octets - victoires.
Classement
Le premier post de la série génère un classement.
Pour vous assurer que vos réponses s'affichent, veuillez commencer chaque réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(La langue n'est pas actuellement affichée, mais l'extrait de code l'exige et l'analyse, et je pourrai ajouter un classement par langue à l'avenir.)