Walczysz z rozległą siecią szpiegów wroga . Wiesz, że każdy szpieg ma co najmniej jedną (czasem wielokrotną) fałszywą tożsamość, której lubią używać. Naprawdę chciałbyś wiedzieć, z iloma szpiegami faktycznie masz do czynienia.
Na szczęście twoi agenci kontrwywiadu wykonują swoją pracę i czasami mogą dowiedzieć się, kiedy dwie fałszywe tożsamości są faktycznie kontrolowane przez tego samego szpiega wroga.
To jest do powiedzenia:
- Twoi agenci nie zawsze wiedzą jednak, kiedy dwie fałszywe tożsamości mają za sobą tego samego szpiega
- Jeśli agent powie ci, że dwie fałszywe tożsamości są kontrolowane przez tego samego szpiega, masz nadzieję, że mają rację.
Wiadomości agenta
Agenci wysyłają ci tajemnicze wiadomości informujące, które tożsamości mają za sobą tego samego szpiega. Przykład:
Masz do czynienia z 2 agentami i 5 fałszywymi tożsamościami .
Pierwszy agent wysyła Ci wiadomość:
Red Red Blue Orange Orange
Oznacza to, że myślą, że są 3 szpiedzy:
- pierwszy (czerwony) kontroluje tożsamość 1 i 2
- drugi (niebieski) kontroluje tożsamość 3
- trzeci (pomarańczowy) kontroluje tożsamość 4 i 5
Drugi agent wysyła Ci wiadomość:
cat dog dog bird fly
Oznacza to, że myślą, że są 4 szpiedzy:
- pierwszy (kot) kontroluje tożsamość 1
- drugi (pies) kontroluje tożsamość 2 i 3
- trzeci (ptak) kontroluje tożsamość 4
- czwarty (mucha) kontroluje tożsamość 5
Kompilujemy informacje, które widzimy:
Identities: id1 id2 id3 id4 id5
Agent 1: |--same-spy--| |--same-spy--|
Agent 2: |--same-spy--|
Conclusion: |-----same-spy------||--same-spy--|
Oznacza to, że jest maksymalnie 2 szpiegów .
Notatki
Tożsamości należące do tego samego szpiega nie muszą być następujące po sobie, tzn. Wiadomość taka jak:
dog cat dog
jest ważny.
To samo słowo może być również używane przez dwóch różnych agentów - to nic nie znaczy, to tylko zbieg okoliczności, np .:
Agent 1: Steam Water Ice
Agent 2: Ice Ice Baby
Lód jest używany przez oba agenty - Ice
używany przez pierwszego agenta nie jest związany z dwoma przypadkami Ice
użycia przez drugiego agenta.
Wyzwanie
Zbierz wszystkie dane wywiadowcze swoich agentów i dowiedz się, ilu naprawdę jest szpiegów wroga. (Mówiąc ściślej, uzyskaj najniższą górną granicę, biorąc pod uwagę ograniczoną liczbę posiadanych informacji).
Najkrótszy kod w bajtach wygrywa.
Dane wejściowe i wyjściowe
Dane wejściowe to lista n linii, które reprezentują n wiadomości od agentów. Każda linia składa się z k oddzielonych spacjami tokenów, takich samych k dla wszystkich linii. Tokeny są alfanumeryczne, o dowolnej długości. Sprawa ma znaczenie.
Wynik powinien być pojedynczą liczbą, reprezentującą liczbę różnych szpiegów, na podstawie danych wywiadowczych twoich agentów.
Przykłady
Przykład 1
Wkład:
Angel Devil Angel Joker Thief Thief
Ra Ra Ras Pu Ti N
say sea c c see cee
Wydajność:
2
Przykład 2
Wkład:
Blossom Bubbles Buttercup
Ed Edd Eddy
Wydajność:
3
Przykład 3
Wkład:
Botswana Botswana Botswana
Left Middle Right
Wydajność:
1
Przykład 4
Wkład:
Black White
White Black
Wydajność:
2
Przykład 5
Wkład:
Foo Bar Foo
Foo Bar Bar
Wydajność:
1
Przykład 6
Wkład:
A B C D
A A C D
A B C C
A B B D
Wydajność:
1
Przykład 7
Wkład:
A B A C
Wydajność:
3
Przykład 8
Wkład:
A
B
C
Wydajność:
1
Przykład 9
Wkład:
X
Wydajność:
1