Noel hızla yaklaşıyor ve onunla birlikte, yıllık aile Gizli Santa düzenliyor. Bu konuda bir başlangıç yapmak istiyorum, ancak çiftlerin birbirleri için satın almadığından emin olmak sorunlara neden olmaya devam ediyor ve bunu yıllarca yapmasına rağmen Bob
, birçok hediye için hediye satın alma konusunda oldukça saçma olan bir sorun var. , Erin
hayal kırıklığına uğrayacaktır, ancak bunun Frank
Talisker'i sevdiğini biliyor , bu yüzden onun için iyi bir eşleşme. Bu, mevcut basit çözümlerin hiçbirini ihtiyaçlarım için kabul edilebilir hale getirmiyor.
Hayatımı kolaylaştırmak için göreviniz, bir dizi dizi (veya seçtiğiniz dilde en yakın alternatif) verildiğinde, 'hediyelik eşyalar' eşleştirmesini döndüren (veya çıktılar) bir işlev (veya dilinize en yakın alternatif) yazmaktır. Aşağıdaki koşulların karşılanması için bayt cinsinden mümkün olan en kısa kodda 'hediye' yazar:
- Her ad, giriş verilerinden rasgele seçilen başka bir adla eşleştirilir (Sağlanan koşullara göre çıktıyı rasgele ayarlamak her zaman mümkün olmayabilir)
- Adlara , sıralaması tutarlı olan bir bitişiklik matrisini temsil eden bayrakların bir listesi verilir , böylece sütun
n
satırla aynı kişiyi belirtirn
. - Koşullar karşılanamıyorsa, dilinizde yanlış bir şey döndürün.
- Birden fazla çözüm varsa, programınız birçok kez çalıştırıldığında hepsini üretebilmelidir.
Sence hangisinin hangisi aile üyesi söylemek gerekiyor olarak yinelenen adlarla sunulan asla varsayabiliriz, ancak ayırt etmek boşluklar içeren verilerle sunulabilir Bob Senior
dan Bob Junior
! Kaynak verilerindeki 100 benzersiz ad gibi oldukça büyük aileler için sağlanan tüm test vakalarını bir saat içinde tamamlamalıdır (lütfen aşağıdaki örnek veri kümelerine bakın, bunların tümünü ayrılan süre içinde ayrıştırabilmeniz gerekir).
Örnek girdi:
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"]
]
Dile bağlı olarak, girdi üzerinde örneği detaylar için, başka biçimlerde olabilir STDIN
olabilir olarak sağlanacaktır:
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'
Çıktı, diliniz için en kolay olan herhangi bir makul biçimde de sağlanabilir. Kabul edilebilir biçimler, bir dizi diziyi (yukarıdaki gibi) veya belki bir karma / Object
/ ilişkilendirilebilir diziyi içerir veya hatta şu satırları şu şekilde yazdırır STDOUT
:
Alice:Dan
Bob:Erin
Carla:Bob
Dan:Alice
Erin:Frank
Frank:Carla
Şüpheniz varsa, lütfen cevabınızla gerekli girdi formatı ve beklenen çıktı formatı hakkında sorular sorun ve sağlayın.
Referans JavaScript uygulaması .
Daha büyük veri setleri: 100 , 100 , 200 , 200 - birçok çözüm , 200 - sadece bir çözüm .
Referans uygulaması tüm bunları makinemdeki <4s içinde tamamlar.
Bu komut dosyasıyla oluşturulan yukarıdaki setler .
Bob
sağlar Erin
? Sadece itibaren bir bakınız Erin
için Bob
.
1
kth subarray'ın (n + 1) th elementinde kth kişinin n'inci kişiye verebileceği anlamına mı geliyor?