Sobre a série
Primeiro, você pode tratar isso como qualquer outro desafio de código de golfe e respondê-lo sem se preocupar com a série. No entanto, existe uma tabela de classificação em todos os desafios. Você pode encontrar a tabela de classificação junto com mais informações sobre a série no primeiro post .
Buraco 8: embaralhar uma lista infinita
Você deve escrever uma função ou programa que use uma lista infinita como entrada e retorne uma versão aleatória dessa lista.
Sobre E / S infinita
Existem várias maneiras pelas quais você pode receber e produzir resultados para este desafio:
- Você pode fazer uma lista de números inteiros positivos ou uma representação de sequência, ou uma sequência ou lista de caracteres ASCII imprimíveis (0x20 a 0x7E, inclusive). O formato de saída deve corresponder ao formato de entrada. Vou me referir aos dados como "a lista" a partir de agora, independentemente da opção que você escolher.
- Você pode ler a lista de um fluxo de entrada padrão infinito e gravar a saída continuamente em um fluxo de saída padrão infinito. A solução não deve depender de nenhum valor específico ou sequência de valores para garantir que o fluxo de saída seja gravado e liberado regularmente (por exemplo, você não pode simplesmente gravar a saída sempre que houver uma
5
na lista de entrada). Obviamente, se você ler uma representação de string de uma lista, não há problema em esperar até encontrar o separador de listas. - Nos idiomas que os suportam, você pode escrever uma função que pega e retorna uma lista ou sequência lenta e infinita.
- Nas linguagens que os suportam, você pode implementar um gerador infinito que aceita outro gerador como entrada.
- Como alternativa, você pode escrever uma função que não aceita argumentos e retorna um valor de saída cada vez que é chamado. Nesse caso, você pode assumir que uma função foi definida que não aceita argumentos e retorna o próximo valor de entrada cada vez que é chamada. Você pode escolher livremente o nome dessa função.
Você pode supor que seu programa seja executado para sempre e que haja memória infinita disponível. (É possível resolver isso com uma quantidade finita de memória, mas o que isso significa é que você pode vazar memória.)
Sobre a aleatoriedade
Para qualquer valor v que seja lido na posição i da entrada infinita, deve haver uma probabilidade positiva para que ele termine em qualquer uma das posições i-9 a i + 9 da saída infinita (a menos que essa posição seja negativa ) Essas probabilidades não precisam ser as mesmas para diferentes posições de saída ou mesmo para diferentes posições de entrada. Tudo bem se sua solução também puder embaralhar os valores para outras posições mais distantes.
Portanto, não é necessário que sua solução possa embaralhar o primeiro valor muito abaixo da lista ou embaralhar um valor muito tardio até a primeira posição, embora seja bom se o fizer, desde que todas as posições a 9 passos da entrada é possível.
Por exemplo, se você pegou a seguinte string como entrada, ___
indica todas as posições que X
devem ser capazes de terminar na saída:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Se seu idioma não possui um gerador de números aleatórios embutido ou você não deseja usá-lo, você pode usar um valor adicional de semente como entrada e implementar seu próprio RNG adequado usando a semente. Esta página pode ser útil para isso.
Independentemente da distribuição real que sua solução usa, ela quase certamente deve produzir o próximo valor após um tempo finito (mas arbitrário).
Inclua uma breve explicação sobre como sua implementação atende a esses requisitos.
Pontuação
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Entre os melhores
O primeiro post da série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(O idioma não é mostrado no momento, mas o snippet exige e o analisa, e eu posso adicionar um cabeçalho por idioma no futuro.)