Autor: Dondu
Poniżej wyniki weekendowych zawodów RoboMind rozegranych w dniach 9-11 listopada 2013r. W zawodach wzięło udział 13 zawodników i jedna zawodniczka :-)
Ogłoszenie o zawodach: Konkurs weekendowy RoboMind (9-10 listopada 2013r,)
Zawody wypełniła dyskusja na temat problemu instrukcji jeść(), której nie było w oficjalnym helpie na stronie producenta programu. W przypadku następnych zawodów, ten problem rozwiążemy pisząc własną instrukcję.
Zawody pokazały także, że w następnych musimy bardzo szczegółowo opracować regulamin. Z drugiej strony pokazały, jak różnie można podchodzić do algorytmów rozwiązania problemów. Zapewne w przyszłych zawodach zamiast jednej trasy będą dwie, by algorytmy były jak najmniej dopasowane do aren zmagań.
Mam więc serdeczną prośbę, by w przyszłości tego typu zawody traktować jak zabawę, a nie ostrą rywalizację. Zawody te prowadzę dla Was hobbystycznie, a poświęcam na to sporo czasu. :)
Wyniki przedstawiają się następująco:
Gratulacje dla zwycięzców!!!
Najbardziej żal nam Łukasza, który miał bardzo fajnie napisany program, ale popełnił malutki błąd - robot zamiast podnieść ostatni beacon, zjadł go :( Niestety było to niezgodne z wytycznymi mówiącymi że:
- gdy się zatrzyma przedmiot powinien być we wnętrzu robota,
Program Łukasza zamieszczamy poniżej jako dodatkowy.
1 miejsce: Szymczyk Mirosław
# Przemieszczenie robota do pierwszej grupy nadajników # Sprawdzana jest wolna przestrzeń najpierw po prawej, późnej po lewej powtórzDopóki(nie zPrzoduNadajnik()) { jeżeli(prawoPusto()) { wPrawo() } wPrzeciwnymRazie jeżeli(lewoPusto()) { wLewo() } naprzód(1) } UsuńPrzeszkodę() # Przemieszczenie robota do drugiej grupy nadajników powtórzDopóki(nie zPrzoduNadajnik()) { jeżeli(zPrzoduPusto() i prawoPusto()) { wPrawo() } wPrzeciwnymRazie jeżeli(zPrzoduPrzeszkoda() i lewoPusto()) { wLewo() } naprzód(1) } UsuńPrzeszkodę() # Przemieszczenie robota do miejsca gdzie rozpoczyna się biała ścieżka powtórzDopóki(nie lewoBiałe()) { jeżeli(zPrzoduPrzeszkoda()) { wLewo() } naprzód(1) } wLewo() # Przemieszczenie robota po białej ścieżce do jej końca # Znajdujące się na ścieżce nadajniki sa eliminowane powtórz { jeżeli (prawoBiałe()) { wPrawo() } wPrzeciwnymRazie jeżeli (zPrzoduBiałe()) {} wPrzeciwnymRazie jeżeli (lewoBiałe()) { wLewo() } wPrzeciwnymRazie jeżeli (nie zPrzoduBiałe()) { jeżeli (zPrzoduPusto() ) {wLewo() wLewo()} wPrzeciwnymRazie { wPrawo() malujBiały() # rozpoczącie malowania białej ścieżki naprzód(1) przerwij # wyjście z pętli } } jeżeli (zPrzoduNadajnik()) { UsuńPrzeszkodę() } naprzód(1) } # Przemieszczenie robota do mety powtórz { jeżeli (lewoPusto()) { wLewo() } wPrzeciwnymRazie jeżeli (zPrzoduPusto()) { } wPrzeciwnymRazie jeżeli (prawoPusto()) { wPrawo() } jeżeli (zPrzoduNadajnik()) { podnieś() # pobranie nadajnika do wnętrza robota naprzód(1) przestańMalować() # można pominąć zakończ # zakończenie programu } naprzód(1) } # Usunięcie (zjedzenie) z toru nadajników procedura UsuńPrzeszkodę() { powtórzDopóki(zPrzoduNadajnik()) { jeść() naprzód(1) } }
2 miejsce: Kobus Sebastian
powtórz{ prawaręka jeżeli(zPrzoduPrzeszkoda() i lewoPrzeszkoda()){ przerwij } } powtórz{ lewaręka jeżeli(zPrzoduNadajnik()){ przerwij } } powtórz{ jedznadajnik prawaręka jeżeli(lewoBiałe){ przerwij } } powtórz{ pobiałej jeżeli(zPrzoduNadajnik()){ malujBiały powtórz{ jedznadajnik lewaręka } } } procedura jedznadajnik{ jeżeli(zPrzoduNadajnik()){ jeżeli(zPrzoduCzarne()){ podnieś() naprzód(1) zakończ } wPrzeciwnymRazie{ jeść() } } } procedura pobiałej{ jeżeli(lewoBiałe()){ jeżeli(zPrzoduBiałe()){ naprzód(1) wPrawo() wPrawo() } wPrzeciwnymRazie{ wLewo() naprzód(1) } } jeżeli(prawoBiałe()){ wPrawo() naprzód(1) } jeżeli(zPrzoduBiałe()){ naprzód(1) } } procedura prawaręka{ jeżeli(PrawoPrzeszkoda()){ jeżeli(zPrzoduPusto()){ naprzód(1) } wPrzeciwnymRazie{ wLewo() } } wPrzeciwnymRazie{ wPrawo() naprzód(1) } } procedura lewaręka{ jeżeli(lewoPrzeszkoda()){ jeżeli(zPrzoduPusto()){ naprzód(1) } wPrzeciwnymRazie{ wPrawo() } } wPrzeciwnymRazie{ wLewo() naprzód(1) } }
3 miejsce: Kempny Szymon
szukajTrasy # Szuka białej trasy procedura szukajTrasy { jeżeli(lewoBiałe) { wLewo trasaBiała } ogarnijSie szukajTrasy } # koniec szukajTrasy # ogarnia robota, żeby dobrze jechał procedura ogarnijSie { jeżeli(zPrzoduPrzeszkoda){ jeżeli(zPrzoduNadajnik){ jeść } # pozbądź się wszystkich nadajników wPrzeciwnymRazie jeżeli(lewoPusto i prawoPusto) { wPrawo } wPrzeciwnymRazie jeżeli(lewoNadajnik lub lewoPusto) { wLewo zwroć } wPrzeciwnymRazie { wPrawo } } wPrzeciwnymRazie jeżeli(lewoPusto) { naprzód(2) jeżeli(prawoPusto i lewoPusto) { # Sprawdź czy to aby nie zły zakręt wstecz(2) # kosztem 2 dodatkowych ruchów - kilka linii kodu mniej wLewo } } naprzód(1) } # koniec ogarnijSie # jedź po białej trasie procedura trasaBiała { powtórz { jeżeli(zPrzoduBiałe) { jeżeli(zPrzoduNadajnik) { jeść } wPrzeciwnymRazie { naprzód(1) } } wPrzeciwnymRazie jeżeli(prawoBiałe) { wPrawo } wPrzeciwnymRazie jeżeli(lewoBiałe) { wLewo } wPrzeciwnymRazie jeżeli(zPrzoduPrzeszkoda) { # koniec białej trasy wPrawo # czyli malujemy i malujBiały # i szukamy mety szukajMety } wPrzeciwnymRazie { # miejsce ze ślepym zaułkiem wstecz(1) wLewo } } } # koniec trasaBiała # po przejściu białej trasy - szukaj mety procedura szukajMety { powtórzDopóki(nie(prawoCzarne)) { jeżeli(lewoPusto()) { wLewo } naprzód(1) } wPrawo naprzód(1) podnieś naprzód(1) zakończ } # koniec szukajMety
Kresa Łukasz
Szkoda tego błędu z linii 34 - byłoby drugie miejsce :(
# http://mikrokontrolery.blogspot.com/ # Konkurs weekendowy # Lukasz Kresa # map: dd_arena.map ruszajRobocie() #ruszajRobocie - procedura procedura ruszajRobocie(){ # Na początku szukamy białej trasy powtórzDopóki(nie lewoBiałe){ jeżeli(zPrzoduNadajnik){jeść() powtórzDopóki(nie (zPrzoduPrzeszkoda lub lewoBiałe)){naprzód(1) gdzieSkrecic()}} wPrzeciwnymRazie jeżeli(zPrzoduPrzeszkoda){skrecBoPrzeszkoda} wPrzeciwnymRazie jeżeli(lewoPusto){wLewo naprzód(1)} wPrzeciwnymRazie{naprzód(1)}} wLewo naprzód(1) jedzBialaLinia()} # procedura jedzBialaLinia(){ powtórz{ jeżeli(prawoBiałe){wPrawo naprzód(1)} wPrzeciwnymRazie jeżeli(zPrzoduNadajnik){jeść()} wPrzeciwnymRazie jeżeli(zPrzoduBiałe){naprzód(1)} wPrzeciwnymRazie jeżeli(lewoBiałe){wLewo} wPrzeciwnymRazie jeżeli(zPrzoduPusto i lewoPusto){wLewo wLewo} wPrzeciwnymRazie{przerwij}} maluj()} # procedura maluj(){ malujBiały powtórz{ jeżeli(lewoPusto){wLewo naprzód(1)} wPrzeciwnymRazie jeżeli(zPrzoduPusto){naprzód(1)} #BŁĄD w poniższej linii - miało być PODNIEŚ zamiast JEŚĆ!!! wPrzeciwnymRazie jeżeli(zPrzoduNadajnik){jeść() naprzód(1) zakończ} wPrzeciwnymRazie{wPrawo}}} # procedura gdzieSkrecic() { jeżeli(zPrzoduPrzeszkoda i (nie zPrzoduNadajnik)){ jeżeli(PrawoPrzeszkoda){wLewo naprzód(1)} wPrzeciwnymRazie jeżeli(lewoNadajnik){wLewo} wPrzeciwnymRazie{wPrawo naprzód(1)}}} # procedura skrecBoPrzeszkoda() { jeżeli(PrawoPrzeszkoda){wLewo naprzód(1)} wPrzeciwnymRazie{wPrawo naprzód(1)}}
Zagapiłem się i zmieniając komendy z "podnieś/opuść" na "jeść" zmieniłem także nieopatrznie tę z końca.
OdpowiedzUsuńPomysł z dwoma mapami uważam za ciekawy. Czekam na kolejne zawody.
Tak bywa :(
UsuńCo do pomysłu to jutro pojawi się artykuł w tej sprawie z prośbą o dyskusję - zobaczymy co z tego wyjdzie. Jeżeli coś pozytywnego, to będziemy częściej takie zawody organizować.
Kiedy można się spodziewać przesłania wygranych ebooków? ;)
OdpowiedzUsuńJutro (wtorek) uzyskam odpowiednie kody i prześlę mailowo zwycięzcom. Zapomniałem o tym napisać.
Usuń