シリーズについて
まず、これを他のコードゴルフチャレンジと同様に扱い、シリーズについてまったく心配することなく答えることができます。ただし、すべての課題にリーダーボードがあります。最初の投稿では、リーダーボードとシリーズに関する詳細情報を見つけることができます。
8番ホール:無限リストをシャッフルする
入力として無限リストを取り、そのリストのシャッフルされたバージョンを返す関数またはプログラムを作成する必要があります。
無限I / Oについて
このチャレンジの入力を取得して出力を生成する方法はいくつかあります。
- 正の整数のリスト、またはその文字列表現、または印刷可能なASCII文字(0x20〜0x7Eを含む)の文字列またはリストを使用できます。出力形式は入力形式と一致する必要があります。選択したオプションに関係なく、今後はデータを「リスト」と呼びます。
- 無限標準入力ストリームからリストを読み取り、無限標準出力ストリームに出力を連続的に書き込むことができます。ソリューションは、出力ストリームが定期的に書き込まれ、フラッシュされることを保証するために、特定の値または値のシーケンスに依存してはなりません(たとえば
5
、入力リストにaがある場合は出力を書き込むことはできません)。もちろん、リストの文字列表現を読んだ場合、リストの区切りに遭遇するまで待つのは問題ありません。 - それらをサポートする言語では、怠zyな無限リストまたは文字列を受け取って返す関数を作成できます。
- それらをサポートする言語では、入力として別のジェネレーターを使用する無限ジェネレーターを実装できます。
- あるいは、引数を取らず、呼び出されるたびに1つの出力値を返す関数を作成できます。この場合、引数をとらず、呼び出されるたびに次の入力値を返す関数が定義されていると想定できます。その関数の名前は自由に選択できます。
プログラムが永久に実行され、無限のメモリが利用可能であると仮定するかもしれません。(有限のメモリ量でこれを解決することは可能ですが、これが意味することは、メモリをリークすることを許可されているということです。)
ランダム性について
無限入力の位置iで読み取られる値vについては、無限出力の位置i-9からi + 9のいずれかで終わるための正の確率がなければなりません(その位置が負でない限り) )。これらの確率は、異なる出力位置、または異なる入力位置でも同じである必要はありません。ソリューションが値をさらに離れた別の位置にシャッフルできる場合も問題ありません。
したがって、ソリューションが最初の値をリストの非常に下までシャッフルしたり、最初の位置まで非常に遅い値をシャッフルしたりする必要はありません。入力が可能です。
たとえば、次の文字列を入力として使用した場合、___
はX
、出力で終了する必要があるすべての位置を示します。
___________________
abcdefghijklmnopqrstuvwxyzXabcdefghijklmnopqrstuvwxyz...
言語に組み込みの乱数ジェネレーターがない場合、または使用したくない場合は、入力として追加のシード値を取得し、シードを使用して適切なRNGを実装できます。このページはそのために役立つかもしれません。
ソリューションが使用する実際の分布に関係なく、有限(ただし任意)の時間後にほぼ確実に次の値を生成する必要があります。
実装がこれらの要件を満たす方法についての簡単な説明を含めてください。
得点
これはcode-golfであるため、バイト単位で測定された最短の有効な答えが勝ちです。
リーダーボード
回答が表示されるようにするには、次のマークダウンテンプレートを使用して、すべての回答を見出しで開始してください。
# Language Name, N bytes
N
提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(言語は現在表示されていませんが、スニペットはそれを必要とし、解析します。将来、言語ごとのリーダーボードを追加するかもしれません。)