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