Informazioni sulla serie
Prima di tutto, puoi trattarlo come qualsiasi altra sfida di golf del codice e rispondere senza preoccuparti della serie. Tuttavia, esiste una classifica in tutte le sfide. Puoi trovare la classifica insieme ad alcune ulteriori informazioni sulla serie nel primo post .
Buca 8: mescola un elenco infinito
È necessario scrivere una funzione o un programma che accetta un elenco infinito come input e restituisce una versione casuale di tale elenco.
Informazioni sull'I / O infinito
Esistono diversi modi per prendere input e produrre output per questa sfida:
- Puoi prendere un elenco di numeri interi positivi, o una loro rappresentazione in stringa, o una stringa o un elenco di caratteri ASCII stampabili (da 0x20 a 0x7E, inclusi). Il formato di output deve corrispondere al formato di input. D'ora in poi farò riferimento ai dati come "l'elenco", indipendentemente dall'opzione scelta.
- È possibile leggere l'elenco da un flusso di input standard infinito e scrivere l'output continuamente su un flusso di output standard infinito. La soluzione non dovrebbe dipendere da alcun valore particolare o sequenza di valori per garantire che il flusso di output sia regolarmente scritto e svuotato (ad es. Non è possibile semplicemente scrivere output ogni volta che c'è un
5
nell'elenco di input). Naturalmente, se leggi una rappresentazione in forma di stringa di un elenco, è bene attendere fino a quando non si incontra il separatore di elenco. - Nelle lingue che li supportano, è possibile scrivere una funzione che accetta e restituisce un elenco o una stringa infiniti pigri.
- Nelle lingue che li supportano è possibile implementare un generatore infinito che accetta un altro generatore come input.
- In alternativa, è possibile scrivere una funzione che non accetta argomenti e restituisce un valore di output ogni volta che viene chiamato. In questo caso, si può presumere che sia stata definita una funzione che non accetta argomenti e restituisce il valore di input successivo ogni volta che viene chiamato. Puoi scegliere liberamente il nome di quella funzione.
Si può presumere che il programma sia in esecuzione per sempre e che sia disponibile memoria infinita. (È possibile risolverlo con una quantità finita di memoria, ma ciò significa che è possibile perdere la memoria.)
A proposito della casualità
Per qualsiasi valore v che viene letto in una posizione i dell'input infinito, ci deve essere una probabilità positiva che finisca in una delle posizioni da i-9 a i + 9 dell'output infinito (a meno che quella posizione non sia negativa ). Queste probabilità non devono essere le stesse per posizioni di output diverse o anche per posizioni di input diverse. Va bene se la tua soluzione può anche mescolare i valori in altre posizioni più lontane.
Quindi, non è necessario che la tua soluzione possa mescolare il primo valore molto in fondo alla lista o che possa mescolare un valore molto tardi fino alla prima posizione, anche se va bene così, purché tutte le posizioni a 9 passi dalla sono possibili input.
Ad esempio, se hai preso la seguente stringa come input, ___
indica tutte le posizioni che X
devono essere in grado di finire nell'output:
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
Se la tua lingua manca di un generatore di numeri casuali incorporato o non vuoi usarlo, puoi prendere un valore seed aggiuntivo come input e implementare il tuo RNG adatto usando il seed. Questa pagina può essere utile per questo.
Indipendentemente dalla distribuzione effettiva utilizzata dalla soluzione, deve quasi sicuramente produrre il valore successivo dopo un tempo finito (ma arbitrario).
Includi una breve spiegazione su come la tua implementazione soddisfa questi requisiti.
punteggio
Questo è code-golf , quindi la risposta valida più breve - misurata in byte - vince.
Classifica
Il primo post della serie genera una classifica.
Per assicurarti che le tue risposte vengano visualizzate, inizia ogni risposta con un titolo, utilizzando il seguente modello Markdown:
# Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(La lingua non è attualmente visualizzata, ma lo snippet richiede e analizza, e in futuro potrei aggiungere una classifica linguistica).