Bu, öncelikle veri yapılarına odaklanan bir soru olduğuna dikkat edin
Giriş
Bacefook insanların dostça olmasını istiyor! Bu nedenle, arkadaş önermek için yeni bir sistem uyguluyorlar! Göreviniz Bacefook'a yeni önerme sistemlerini uygulamalarında yardımcı olmak.
Özellikler:
Programınız komuta 3 tip destekleyen bir REPL (okuma-eval-baskı döngü) olması gerekir: FRIEND
, SUGGEST
ve KNOW
.
FRIEND X Y
- Bunu belirtir X
ve Y
sosyal ağda arkadaşlar.
Eğer X Y ile arkadaşsa, Y X ile arkadaş
Olabilir, ancak çıktısı olması gerekmiyor
X her zaman X ile arkadaş
KNOW X Y
- Eğer X ve Y arkadaşlar ise, gerçek olmayan bir değer verir, aksi takdirde sahte olur
KNOW X X
her zaman bir gerçeğe uygun değer üretecek
SUGGEST X Y
- Eğer X ve Y'nin arkadaş olması gerekiyorsa, aksi taktirde sahte bir değer verin. X ve Y şu durumlarda arkadaş olmalıdır:
X ve Y arkadaş değil
X ve Y'nin en az 1 arkadaşı var
Sen değiştirmek için izin verilir FRIEND
, SUGGEST
ve KNOW
kendi dizeler, ama sen her komutu yerini ne dize belirtmek zorundadır.
Programınız, nasıl çalıştığını anlamak oldukça kolay olduğu sürece, istediğiniz şekilde girdi / üretim çıktısı alabilir.
Sosyal ağdaki insan sayısı N
1 ile 100,000 arasındadır, ancak herhangi bir sayıda "arkadaş bağı" (kenarlar) olabilir.
Henüz farketmediyseniz, bu grafik arama sorunudur. Bunu uygulamak için (muhtemel) en kolay (ve muhtemelen en hızlı) veri yapısı bir bitişiklik matrisi olacaktır.
Test durumları
FRIEND A B
FRIEND A C
FRIEND B D
SUGGEST A B -> Falsy, as they are friends
SUGGEST A D -> Truthy, as they share B as a common friend
SUGGEST C D -> Falsy, they do not share a common friend
KNOW D B -> Truthy, they are friends
KNOW B C -> Falsy, not friends
=============
FRIEND Tom Tim
KNOW Tom Tim -> Truthy
KNOW Tim Tom -> Truthy
KNOW Tom Kit -> Falsy
=============
KNOW Tim Kit -> Falsy
FRIEND Tim Tom
KNOW Tim Kit -> Falsy
FRIEND Tom Kit
SUGGEST Tim Kit -> Truthy
=============
FRIEND X Y
SUGGEST X Y -> Falsy since X is friends with X
Resim formunda bazı test örnekleri
Koşulu kazanmak
Bu kod golf , en kısa kod kazanır!
SUGGEST UK EU
.
{A, B, C, D}
?