船が元の部品をすべて交換した場合、それはまだ同じ船ですか?
このゴルフでは、「船」の「部品」をゆっくりと交換し、まったく新しい船を入手するのにかかる時間を確認します。
仕事
船は少なくとも2つの部分で構成されます。パーツは、パーツの状態を表す正(ゼロ以外)の整数の配列として指定されます。
各サイクルで、リストから1つの部品を均一な方法でランダムに選択します。その部分の状態は1つ減ります。部品の状態がゼロになると、新しい部品に置き換えられます。新しいパーツは、元のパーツと同じ条件値で始まります。
すべての部品が(少なくとも)1回交換された最初のサイクルで、停止して、かかったサイクル数を出力します。
たとえば(ここでランダムにパーツを選択していると仮定します):
2 2 3 <- starting part conditions (input)
2 1 3 <- second part reduced
2 1 2 ...
2 1 1
2 2 1 <- second part reduced to zero, replaced
1 2 1
1 2 3 <- third part replaced
1 1 3
2 1 3 <- first part replaced
この例の出力は8、すべての部品を交換するのに8サイクルかかったので、になります。正確な出力は、実行ごとに異なる必要があります。
I / O
唯一の入力は、部品条件の整数のリスト/配列です。唯一の出力はサイクル数です。これらの値は、STDIO、関数の引数/戻り値などの通常の方法で取得/提供できます。
テストケース
出力は固定されていないため、テストしたいものは何でも使用できますが、標準化のために以下にいくつか示します。
1 2 3 4
617 734 248 546 780 809 917 168 130 418
19384 74801 37917 81706 67361 50163 22708 78574 39406 4051 78099 7260 2241 45333 92463 45166 68932 54318 17365 36432 71329 4258 22026 23615 44939 74894 19257 49875 39764 62550 23750 4731 54121 8386 45639 54604 77456 58661 34476 49875 35689 5311 19954 80976 9299 59229 95748 42368 13721 49790