(ac) Botwars
Konkurs Programistyczny dla XII LO

Zadanie turniejowe (1)

Bitrootlandia słynie ze swoich pól uprawnych bitrootów. Długo by można rozpisywać się na temat cudownych właściwości tych jakże przesmacznych warzywoców - po prostu ah i oh!
Niestety, na pobliskiej planecie Yafa mieszkają technokraci, którzy są zagorzałymi fanami kotlecików wegańskich z bitrootów. Mało tego! Mieszkańcy Yafy nie znają się na uprawie bitrootów, dlatego wyspecjalizowali się podkradaniu ich z pól Bitrootlandii. Używają do tego dronów własnej produkcji - BTZ-2k20.
Ot złodziejaszki!

I tu pojawia się zadanie dla Ciebie.
Musisz zbudować bota, który będzie sterował systemem obrony przed takimi dronami. Jego zadaniem będzie namierzanie dronów bezpośrednio na polu bitrootów i dezaktywowaniu ich.

Teraz garść ważnych wskazówek, które udało nam się zaobserwować, a które przydadzą się Tobie do budowy bota.

  • Każdy dron zbudowany jest z pojedynczych segmentów połączonych ze sobą w linii prostej.
  • Dron może składać się z 1, 2, 3 lub 4 segmentów.
  • Każdy dron wyposażony jest w pole siłowe, które znika tylko wtedy, kiedy wszystkie jego segmenty zostaną uszkodzone. Dopiero wtedy bezpiecznie możemy usunąć wrak drona z pola.
  • Każdy drony wyposażony jest w funkcję samonaprawy oraz naprawy innych dronów, dlatego wszystkie segmenty wszystkich dronów muszą zostać zdezaktywowane - w sumie będzie ich 10.
  • Obecnośc pola siłowego wokół drona powoduje, że nie może on w żaden sposób stykać się z innym dronem na polu.
  • Drony atakują pola bitrootów w zespołach. Każdy zespół składa się z 4 dronów:
    • drona 1 segmentowego: jednostki koordynującej pracą zespołu
    • drona 2 segmentowego: kopacza
    • drona 3 segmentowego: ruchomej przetwórni bitrootów
    • drona 4 segmentowego: transportowca gotowych kotlecików
  • Każdy zespół dronów operuje na kwadratowym polu, które podzieliliśmy dla Twojej wygody na 49 sektorów (7 x 7).
  • Wielkość jednego sektora równa się wielkości pojedynczego segmentu drona.
  • Drony działają pod osłoną nocy, więc Twój bot nie będzie ich widział. Jedyną wskazówką jest słabe, czerwone światło, jakie emituje zdezaktywowany segment drona.
    Na tej podstawie będziemy sporządzali dla Ciebie mapę pola z położeniem namierzonych dronów.
  • Twój bot, po wytypowaniu sektora, wysyła tam mikrobota, który zdezaktywuje segment drona.
  • Niestety, będziesz dysponował jedynie 45 mikrobotami, więc bądź skuteczny.

Dysponujemy mapami z kilku pól zaatakowanych przez zespoły dronów, które teraz hasają w dronowej Walhalli.

Plansze OK

Jak widzisz, nie ma tu prawidłowości co do rozstawienia dronów.
Po prostu mogą być wszędzie.

I żeby była jasność. Ty budujesz bota (tylko i aż).
Działający system obrony, którym będzie strował Twój bot, już jest.

Jak Twój bot będzie sterował systemem obrony?

  1. System obrony dostarcza startową mapę pola, na którym będzie operował Twój bot.
    (7x7 z ustawionymi statusami dla wszystkich sektorów na 0).
  2. System obrony przekazuje dla Twojego bota aktualną mapę (na wejście).
  3. Twój bot, na podsatwie mapy, typuje sektor do wysłania do niego mikrobota, a następnie przekazuje współrzędne tego sektora do systemu obrony (na wyjście).
  4. System obrony wysyła mikrobota do wskazanego segmentu pola, a następnie na podsatwie informacji zwrotnej od mikrobota aktualizuje na mapie status tego sektora (1, 2, 9).
    Jeżeli system obrony po aktualizacji mapy stwierdzi, że:
    • wszystkie drony zostały wyłączone - kończy operację oczyszczania pola z dronów z informacją o sukcesie (w tym liczbie użytych mikrobotów).
    • Twój bot wysłał już 45 mikrobotów, jednak przynjamniej jeden dron dalej działa - kończy operację oczyszczania pola z dronów z informacją o porażce (w tym liczbie wyłączonych segmentów dronów).
    • przynjamniej jeden dron dalej działa i masz jeszcze do wykorzystania co najmniej jednego mikrobota - wraca do punktu 2.

Wejście

Mapa pola.
7 wierszy opisujących statusy kolejnych 7 segmentów pola bitrootów.
Każdy segment może być opisany jedną z trzech liczb całkowitych, gdzie:
  • 0 to sektor, który nie został jeszcze sprawdzony.
  • 1 to zdezaktywowany segment drona, który ma jeszcze inne działające segmenty.
  • 2 to zdezaktywowany segment drona, który nie ma już działających segmentów.
  • 9 to sprawdzony już sektor, w którym nie odnaleziono segmentu drona.
Kolejne liczby w pojedynczym wierszu oddzielone są pojedynczą spacją.

Wyjście

Współrzędne sektora, do którego wysyłany jest mikrobot, zapisane w jednym wierszu w postaci dwóch liczb całkowitych W i K oddzielonych pojedynczą spacją.
1 <= W <= 7 i opisuje współrzędną wiersza.
1 <= K <= 7 i opisuje współrzędną kolumny.

Przykład

Wejście: startowa mapa pola (przed pierwszą aktualizacją):

0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

Wejście: przykładowa mapa pola po wysłaniu 20 mikrobotów:

9 9 2 2 9 0 0
9 0 9 0 0 9 9
9 1 1 0 0 9 0
0 0 0 0 0 9 9
9 9 0 9 0 0 0
0 0 0 0 0 9 0
2 0 0 0 0 0 0

Wyjście: współrzędne sektora w = 7 i k = 6

7 6

Szczegóły nt. sposobu testowania Twojego bota znajdziesz w sekcji Środowisko testowe.
botwars