8
リストをピックフラット化する
ネストされたリストを「ピッキング」するプロセスを検討してください。ピッキングは次のように定義されます。 引数がリストの場合、リストから要素をランダムに(均一に)取り出し、そこから選択します。 引数がリストではない場合、単にそれを返します。 Pythonでの実装例: import random def pick(obj): if isinstance(obj, list): return pick(random.choice(obj)) else: return obj 簡単にするために、ネストされたリストには整数またはさらにネストされたリストのみが含まれると仮定します。 任意のリストが与えられた場合、で区別できないフラット化されたバージョンを作成することができますpick。つまり、リストから選択すると、同じ確率で同じ結果が得られます。 たとえば、リストを「ピックフラット化」 [1, 2, [3, 4, 5]] リストを生成します [1, 1, 1, 2, 2, 2, 3, 4, 5] 。単純な平坦化が無効である理由は、サブリストの要素が選択される確率が低いためです。たとえば、リストで[1, [2, 3]]は1が2/4 = 1/2の確率で選択され、3と4は両方とも1/4チャンスそれぞれ。 また、シングルトンリストからの選択はその要素からの選択と同等であり、空のリストからの選択には意味がないことに注意してください。 チャレンジ 非負整数のネストされたリストを指定すると、非負整数のフラット化されたリストを返します。このリストから、同じ確率で同じ結果が得られます。 これはcode-golfなので、最短の有効な回答(バイト単位で測定)が勝ちます。 仕様書 入力は[2, 3, 4]、[2, 2, 2, 2, …