О серии
Во-первых, вы можете относиться к этому, как к любому другому вызову для игры в гольф, и отвечать на него, не беспокоясь о серии вообще. Тем не менее, существует таблица лидеров по всем задачам. Вы можете найти таблицу лидеров вместе с дополнительной информацией о серии в первом посте .
Отверстие 8: перемешать бесконечный список
Вы должны написать функцию или программу, которая принимает бесконечный список в качестве входных данных и возвращает перемешанную версию этого списка.
О бесконечном вводе / выводе
Существует несколько способов ввода и вывода результатов для этой задачи:
- Вы можете взять список целых положительных чисел, или его строковое представление, или строку или список печатных символов ASCII (от 0x20 до 0x7E включительно). Выходной формат должен соответствовать входному формату. Теперь я буду ссылаться на данные как на «список», независимо от того, какой вариант вы выберете.
- Вы можете прочитать список из бесконечного стандартного входного потока и непрерывно записывать вывод в бесконечный стандартный выходной поток. Решение не должно зависеть от какого-либо конкретного значения или последовательности значений, чтобы гарантировать, что выходной поток регулярно записывается и сбрасывается (например, вы не можете просто записывать выходные данные, когда они есть
5
в списке входных данных). Конечно, если вы читаете строковое представление списка, хорошо подождать, пока не встретится разделитель списка. - На языках, которые их поддерживают, вы можете написать функцию, которая принимает и возвращает ленивый бесконечный список или строку.
- В языках, которые их поддерживают, вы можете реализовать бесконечный генератор, который принимает другой генератор в качестве входных данных.
- В качестве альтернативы вы можете написать функцию, которая не принимает аргументов и возвращает одно выходное значение при каждом ее вызове. В этом случае вы можете предположить, что была определена функция, которая не принимает аргументов и возвращает следующее входное значение каждый раз, когда она вызывается. Вы можете свободно выбирать имя этой функции.
Вы можете предположить, что ваша программа работает вечно и что доступно бесконечное количество памяти. (Это можно решить с помощью ограниченного объема памяти, но это означает, что вам разрешается утечка памяти.)
О случайности
Для любого значения v, которое читается в позиции i бесконечного входа, должна быть положительная вероятность того, что оно окажется в любой из позиций с i-9 по i + 9 бесконечного выхода (если только эта позиция не будет отрицательной ). Эти вероятности не должны быть одинаковыми для разных выходных позиций или даже для разных входных позиций. Хорошо, если ваше решение может также переместить значения в другое положение, которое находится дальше.
Следовательно, не обязательно, чтобы ваше решение могло перетасовать первое значение очень далеко вниз по списку или чтобы оно могло перетасовывать очень позднее значение до первой позиции, хотя это нормально, если это произойдет, если все позиции находятся в 9 шагах от вход возможен.
Например, если вы взяли следующую строку в качестве входных данных, то ___
указывает все позиции, которые X
должны быть в состоянии оказаться в выходных данных:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Если в вашем языке отсутствует встроенный генератор случайных чисел или вы не хотите его использовать, вы можете взять в качестве входных данных дополнительное начальное значение и реализовать свой собственный подходящий ГСЧ с использованием начального числа. Эта страница может быть полезна для этого.
Независимо от фактического распределения, которое использует ваше решение, оно почти наверняка произведет следующее значение по истечении конечного (но произвольного) времени.
Пожалуйста, включите краткое объяснение того, как ваша реализация удовлетворяет этим требованиям.
счет
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
Leaderboard
Первый пост серии генерирует таблицу лидеров.
Чтобы убедиться, что ваши ответы отображаются, начните каждый ответ с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Язык в настоящее время не отображается, но фрагмент требует и анализирует его, и я могу добавить таблицу лидеров по языкам в будущем.)