クリスマスが近づいてきており、それに伴い、毎年恒例の家族のシークレットサンタを手配しています。私はこれをうまく始めたいと思いますが、カップルがお互いのために買わないようにすることは問題を引き起こし続けます、そして、これを何年もしているにもかかわらずBob、ほとんどの贈答品のギフトを購入する際にかなりの問題があります、Erinおそらく失望するでしょうが、彼Frankはタリスカーが好きであることを知っているので、彼は彼にぴったりです。これにより、既存のシンプルなソリューションはどれも私のニーズに受け入れられません。
私の人生を楽にするために、あなたの仕事は、配列の配列(または選択した言語の最も近い代替)が与えられたときに、「gifters」のペアを返す(または出力する)関数(または、言語の最も近い代替)を書くことです次の条件が満たされるように、バイト単位の可能な限り短いコードの「giftees」:
- 各名前は、入力データからランダムに選択された別の名前とペアになります(指定された条件に基づいて出力をランダム化できるとは限らないことに注意してください)
- 名前には、一貫性のある順序で隣接行列を表すフラグのリストが提供されるため、列
nはrowと同じ人物を参照しnます。 - 条件を満たせない場合は、あなたの言語で偽物を返してください。
- 複数のソリューションがある場合、何度も実行する場合、プログラムはそれらをすべて生成できる必要があります。
あなたは私たちがどのある家族の一員伝えることができる必要があるとして、あなたが重複した名前を提示することはありませんと仮定することができますが、区別するために、スペース含むデータを提示することができるBob SeniorからをBob Junior!ソースデータ内の100個の一意の名前など、非常に大規模なファミリに対して提供されたすべてのテストケースを1時間以内に完了する必要があります(以下のサンプルデータセットを参照してください。割り当てられた時間内にこれらすべてを解析できる必要があります)。
入力例:
santa([
["Alice", 0, 0, 1, 1, 1, 1, 1],
["Bob", 0, 0, 0, 0, 0, 1, 0],
["Carla", 1, 1, 0, 0, 0, 1, 1],
["Dan", 1, 1, 0, 0, 0, 1, 1],
["Erin", 1, 1, 0, 0, 0, 1, 1],
["Frank", 1, 1, 1, 1, 1, 0, 1],
["Gary", 1, 1, 1, 1, 1, 1, 0]
]);
// might return something like:
[
["Alice", "Erin"],
["Bob", "Frank"],
["Carla", "Alice"],
["Dan", "Gary"],
["Erin", "Bob"],
["Frank", "Dan"],
["Gary", "Carla"]
]
santa([
["Alice", 0, 1, 1, 1, 0, 1],
["Bob", 0, 0, 1, 1, 0, 1],
["Carla", 0, 1, 0, 1, 0, 1],
["Dan", 0, 1, 1, 0, 0, 0],
["Erin", 0, 0, 1, 0, 0, 1],
["Frank", 1, 1, 1, 1, 1, 0]
]);
false
santa([
["Alice", 0, 1, 1],
["Bob", 1, 0, 1],
["Carla", 1, 1, 0]
]);
[
["Alice", "Bob"],
["Bob", "Carla"],
["Carla", "Alice"]
]
言語に応じて、入力は他の形式にするSTDIN ことができます。たとえば、詳細は次のように提供できます。
script <<< 'Alice,0,0,1,1,1,1,1
Bob,0,0,0,0,0,1,0
Carla,1,1,0,0,0,1,1
Dan,1,1,0,0,0,1,1
Erin,1,1,0,0,0,1,1
Frank,1,1,1,1,1,0,1
Gary,1,1,1,1,1,1,0'
出力は、適切な形式で提供されますが、言語の最も簡単なものが使用されます。許容される形式には、配列の配列(上記のように)またはhash / Object/ associative配列が含まれSTDOUTます。
Alice:Dan
Bob:Erin
Carla:Bob
Dan:Alice
Erin:Frank
Frank:Carla
疑問がある場合は、回答とともに必要な入力形式と予想される出力形式の例を尋ねて提供してください。
より大きなデータセット:100、100、200、200 -多くのソリューション、200 -唯一の解決策。
リファレンス実装は、私のマシンでこれらすべてを4秒未満で完了します。
このスクリプトで生成された上記のセット。
Bobへのマッピングを提供しErinますか?からのいずれかが表示さErinれBobます
1、k番目のサブアレイの(n + 1)番目の要素は、k番目の人がn番目の人に与えることができるということですか?