Zadania

Transkrypt

Zadania
Wojna robotów
Uczestnicy pierwszego etapu zawodów dla młodych konstruktorów robotów mieli za zadanie
stworzenie robotów, które potrafią walczyć i niszczyć inne roboty. Do drugiego etapu
zakwalifikowało się ośmiu konstruktorów ze swoimi robotami. W tym etapie każdy z ośmiu
robotów ma zostać ustawiony na kwadratowym placu podzielonym na 64 kwadratowe pola
równej wielkości. Kamera umieszczona nad placem identyfikuje każde z pól poprzez podanie
jego położenia jako pary numerów oznaczających odpowiednio jedną z ośmiu kolumn i jeden
z ośmiu rzędów. Robot może pokonać innego robota, gdy stoją na polach znajdujących się w
jednym rzędzie, lub w jednej kolumnie, ewentualnie, gdy można przejść z pola zajmowanego
przez jednego robota na pole drugiego poruszając się o dowolną ilość pól „na ukos” w
ustalonym kierunku. Robot pierwszego zawodnika został już ustawiony. Zadanie polega na
tym, żeby pomóc pozostałym zawodnikom tak ustawić swoje roboty na placu, aby żaden z
nich nie mógł od razu na starcie zniszczyć żadnego z pozostałych robotów.
Dane wejściowe
Pierwsza linia zawiera parę oddzielonych spacją cyfr n i m (1 ≤ n,m ≤ 8) oznaczających
odpowiednio numer kolumny i numer rzędu pierwszego robota. Można założyć, że ustawienie
pozostałych robotów zgodnie z warunkami zadania jest możliwe przy tym ustawieniu
początkowym.
Dane wyjściowe
Należy wypisać wszystkie możliwe poprawne ustawienia pozostałych robotów wraz z
pierwszym robotem. Każde z ustawień należy wypisać w osobnej linii w postaci ciągu ośmiu
par liczb oznaczających pozycje kolejnych robotów określone analogicznie jak liczby n i m w
danych wejściowych. Pozycje robotów należy uporządkować w ten sposób, aby para
oznaczająca pozycję robota stojącego w kolumnie o niższym numerze była wypisana
wcześniej. Jednocześnie w przypadku kilku różnych możliwości ustawienia robotów, należy
najpierw znaleźć najmniejszy numer kolumny, w której dane dwa ustawienia się różnią, a
następnie porównać numery rzędów, w których stoją roboty przy tych ustawieniach.
Ustawienie, w którym numer rzędu w tej kolumnie jest mniejszy, należy wypisać wcześniej.
Przykład:
Dane wejściowe
3 6
Dane wyjściowe
1 2 2 4 3 6
1 2 2 8 3 6
1 5 2 2 3 6
1 7 2 2 3 6
4
4
4
4
8
1
1
3
5
5
5
5
3
3
7
1
6
6
6
6
1
5
4
4
7
7
7
7
7
7
8
8
8
8
8
8
5
4
3
5
Nieuchwytny Czesio
Firma AlaMakota od początku swojej działalności zatrudniała technika zajmującego się
oprogramowaniem, nazywanego przez wszystkich Czesiem. Niestety, pewnego dnia Czesio zniknął.
Nikt nie pamięta jak on się naprawdę nazywa, gdzie mieszka, kim w istocie jest. Ale nie to jest
największym zmartwieniem Szefa – razem z Czesiem zniknęły hasła do Głównego Systemu, który
akurat teraz zaczął szwankować. Czesio instruował kiedyś współpracowników, w jaki sposób
dostać się do Systemu, ale oczywiście nikt nie zwracał na niego uwagi. Teraz jedynie niektórzy
pamiętają, że wspominał coś o jakimś grubie, grubym, czy innym otyłym. Pomyśl chwilę, bo tylko
w Tobie nadzieja Szefa i pomóż rozwiązać mu problem.
UWAGA: Główny System zainstalowany jest na sprzęcie ukrytym w szafie pancernej – jedyna
możliwość dostępu do niego, to klawiatura.
Zadania do wykonania
1. Dostać się do systemu (do dyspozycji jest tylko klawiatura, nie ma dostępu do CD-ROMu, USB
i innych urządzeń)
2. Zainstalować gcc i g++ z repozytorium ssieciowego Ubuntu
3. Znaleźć pliki rki1.cpp i rki2.cpp, połączyć ze sobą tworząc plik rki.cpp
4. Skompilować plik rki.cpp i uruchomić – wynik działania dodać do pliku wynik.txt bez
wyświetlania na ekranie
UWAGA: system szwankuje, więc należy doprowadzić go do stanu używalności, aby wykonać
wszystkie zadania.
Rozwiązanie
Plik skompresowany wyniki.zip zawierający:
1. plik system.txt - opis sposobu dostania się do systemu (zwięzły, najlepiej 1-2 zdania)
2. tekstowy wynik.txt, w którym należy podać WSZYSTKIE wykonywane polecenia wraz z
wynikami ich wykonania
BUDA
Firma AlaMakota ma kolejny problem – Czesio administrował serwerami Białostockiego
Uniwersytetu Dobrych Agentów. Jak wiadomo – Czesio zniknął. BUDA zaczyna nowy semestr i
nowo przyjęci studenci muszą mieć założone konta na serwerze. Rekrutacja w tym roku była
wyjątkowo udana – na wszystkich wydziałach naukę rozpoczną setki studentów. Dziekanaty
przysłały listę, która jest znacznie obszerniejsza – ktoś musiał pomyłkowo dołączyć dane studentów
ze starszych roczników, którzy posiadają konta w systemie. Kto jest w stanie ręcznie sprawdzić,
którzy użytkownicy istnieją w systemie oraz dodać nowych? Czesio... Ale go nie ma... Podobno
miał on skrypt, który zautomatyzował cały proces. Niestety, skrypt też zniknął. Szef jednak
zdecydowanie wierzy w Ciebie i chyba chcesz, aby tak pozostało?
Zadania do wykonania
1. Napisać skrypt, który jako jedyny parametr przyjmuje nazwę pliku tekstowego o strukturze
podanej niżej, zawierającego dane potrzebne do utworzenia konta.
2. Skrypt powinien sprawdzić, czy dany użytkownik istnieje w systemie:
- jeżeli nie – założyć konto, którego login ma postać: 3 pierwsze litery imienia, 3 pierwsze
litery nazwiska, suma cyfr numeru indeksu połączone w całość bez żadnych dodatkowych znaków,
- jeżeli tak – przesłać stosowną informację na wyjście diagnostyczne, podwyższyć o 1 liczbę
w nazwie tworzonego użytkownika i powtarzać taką procedurę weryfikacji aż do uzyskania nie
istniejącego w systemie użytkownika,
- jeżeli wystąpi brak imienia, nazwiska lub numeru indeksu – przesłać stosowną informację
na wyjście diagnostyczne i pominąć linię. Zakładamy, że nie może zajść sytuacja, gdy podano
niepełne dane, tj. część imienia, nazwiska lub numeru indeksu (numer indeksu jest zawsze
sześciocyfrowy).
3. Należy wymusić nadawanie hasła przy pierwszej próbie logowania użytkownika do systemu.
4. Skrypt powinien zawierać obsługę błędów w postaci wyświetlenia na standardowym wyjściu
komunikatu „Error xx”, gdzie xx oznacza numer błędu:
xx=1 nie podano parametru wywołania skryptu,
xx=2 podano jako parametr nieistniejący plik,
xx=3 plik podany jako parametr nie jest zwykłym plikiem.
Po wykryciu błędu skrypt powinien zakończyć działanie z kodem wyjścia odpowiadającym
numerowi błędu.
5. W przypadku braku błędów skrypt na końcu powinien wyświetlić liczbę nowo dodanych
użytkowników i zakończyć działanie z kodem wyjścia 0.
6. Skrypt nie powinien wyświetlać na ekranie żadnych informacji związanych z wykonywanymi
poleceniami (oprócz obsługi błędów i liczby dodanych użytkowników).
Plik tekstowy z danymi ma format: imię:nazwisko:numer indeksu, np.:
Antoni:Kraweznik:235847
Jozef:Baniak:200365
Hans:Kloss:289145
Tomasz:Paluch:104923
Nowo założone konta miałyby loginy odpowiednio:
AntKra29
JozBan16
HanKlo29
TomPal19
UWAGA: Zadanie należy wykonać na przygotowanym przez nas wirtualnym systemie:
1. do systemu nie wolno doinstalowywać żadnych dodatkowych poleceń
2. login do systemu: rki, hasło: rki2014
3. skrypt należy uruchamiać z uprawnieniami administratora (np. przez sudo)
Mistrzostwa Świata
Zenek Statystyk pracuje jako dziennikarz sportowy w pewnym tygodniku sportowym. Śledzi
rozgrywki najdziwniejszych dyscyplin, od rzucania młotkiem na odległość po piłkę nożną
w polskim wykonaniu. Od niedawna zainteresował się informatyką. Kiedy dowiedział się, że
istnieją relacyjne bazy danych, język SQL oraz system MySQL poczuł się wniebowzięty.
Szybko zrozumiał, że ułatwią mu one kolekcjonowanie informacji oraz przygotowywanie
statystyk.
Na początek zaprojektował prostą bazę danych reprezentującą pewną dyscyplinę sportową.
Baza danych składa się z trzech tabel: Kraje, Mistrzostwa oraz Zwiazki, opisujące kolejno
kraje świata, rozegrane mistrzostwa świata w tej dyscyplinie oraz narodowe związki sportowe
tejże dyscypliny. Zenek przyjął, że zawartość tabel będzie spełniała następujące kryteria:
 Nie istnieją dwa kraje o tej samej nazwie
 W jednym roku rozegrano najwyżej jedne mistrzostwa świata w tej dyscyplinie
 W każdym kraju jest jeden związek sportowy reprezentujący daną dyscyplinę
sportową
 W różnych latach struktury związków mogą się różnić, ale przez cały rok są takie
same
Zenek bardzo szybko opanował techniki tworzenia baz danych, ale wyszukiwanie informacji
już sprawiało mu sporo problemów. Kiedy redaktor naczelny poprosił o sporządzenie, na tak
zwane wczoraj, odpowiedzi na serię pytań, Zenek popadł w lekką panikę. Sytuacja Zenka nie
jest jednak beznadziejna, Zenek zna Ciebie, a Ty na pewno chcesz mu pomóc. Twoim
zadaniem jest:
1. Rozpoznanie struktury tabel założonych na wirtualnym systemie przygotowanym na
potrzeby RKI 2014.
2. Przygotowanie zapytań w języku SQL odpowiadających na pytania:
a. Które miasta organizowały najwięcej zawodów? – organizatorem były zawsze
stolice państw.
b. W których krajach było najwięcej potencjalnych kibiców na jednych
zawodach, uwzględniając tylko mieszkańców kraju-organizatora?
c. W których latach i w jakich stolicach świętowano zwycięstwo organizatora?
d. Kibice których krajów mogli cieszyć się największą ilość razy ze zdobycia
tytułu mistrzowskiego?
e. Jak nazywali się Prezesi krajów, które w roku rozgrywania którychkolwiek
mistrzostw miały najwięcej licencji. Listę nazwisk posortować malejąco.
Zapytania generujące odpowiedzi na kolejne pytania a. – e. należy umieścić w pliku
tekstowym o nazwie baza14.txt, jedna odpowiedź w jednej linii tekstu.
Laboratorium
Laboratorium biologiczne zajmuje się hodowlą pewnej trudno rozmnażającej się bakterii.
W równych odstępach czasu kontroluje liczebność komórek kolonii i rejestruje je notując
kolejne przyrosty i ubytki. Po wykonaniu określonej ilości pomiarów wysyła raporty do
Centrali. Okazuje się, że Centrala nie potrafi z tak przygotowanych raportów wywnioskować
wszystkich informacji, które ją interesują. Najpoważniejsze zarzuty do Laboratorium dotyczą
braku informacji o największej ilości komórek żyjących w jednym momencie w kolonii
bakterii czy też największej wartości bilansu przyrostów i ubytków w dowolnym okresie
pomiarów. I rzeczywiście. Laboranci zapomnieli zapisać od jakiej ilości komórek zaczęli
hodowlę. Spróbuj pomóc Centrali znaleźć odpowiedź na zarzut drugi i na podstawie raportów
określ tę liczbę. Pokaż, że potrafisz! Napisz program, który w czasie nie dłuższym od jednej
sekundy wykona zadanie.
Dane wejściowe
Pierwsza linia zawiera jedną liczbę n (1 ≤ n ≤ 100000) oznaczającą ilość badań. Druga linia
zawiera n liczb całkowitych m (-100 ≤ m ≤ 100) oznaczających kolejne przyrosty populacji
bakterii liczone w tysiącach komórek.
Dane wyjściowe
Jedna linia zawierająca liczbę będącą odpowiedzią.
Przykład:
Dane wejściowe
10
1 -4 3 -2 4 -1 1 4 -8 1
Dane wyjściowe
9