[MISJA] misja008_drone_output

Tutaj umieszczamy tematy związane z językami programowania niepasującymi do innych działów.
Regulamin forum
Temat prosimy poprzedzić nazwą języka umieszczonego w nawiasach kwadratowych np. [Pascal].
Awatar użytkownika
PROTON
User
User
Posty: 426
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

[MISJA] misja008_drone_output

Postautor: PROTON » piątek 14 lip 2017, 08:55

Na streamie https://www.youtube.com/watch?v=3hGK87NTXmw&t=553s Gynvael Coldwind zamieścił misję do wykonania, jej treść znajduje się pod linkiem: https://goo.gl/gg4QcA

Kod: Zaznacz cały

MISJA 008            goo.gl/gg4QcA                  DIFFICULTY: █████████░ [9/10]
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅

Otrzymaliśmy dość nietypową prośbę o pomoc od lokalnego Instytutu Archeologii.
Okazało się, iż podczas prac remontowych studni w pobliskim zamku odkryto
niewielki tunel. Poproszono nas abyśmy skorzystali z naszego autonomicznego
drona wyposażonego w LIDAR (laserowy skaner odległości zamontowany na obracającej
się platformie) do stworzenia mapy tunelu.

Przed chwilą dotarliśmy na miejsce i opuściliśmy drona do studni. Interfejs I/O
drona znajduje się pod poniższym adresem:

  http://gynvael.coldwind.pl/misja008_drone_output/

Powodzenia!

--

Korzystając z powyższych danych stwórz mapę tunelu (i, jak zwykle, znajdź tajne
hasło). Wszelkie dołączone do odpowiedzi animacje są bardzo mile widziane.

Odzyskaną wiadomość (oraz mapę) umieśc w komentarzu pod tym video :)
Linki do kodu/wpisów na blogu/etc z opisem rozwiązania są również mile widziane!

HINT 1: Serwer może wolno odpowiadać a grota jest dość duża. Zachęcam więc do
cache'owania danych na dysku (adresy skanów są stałe dla danej pozycji i nigdy
nie ulegają zmianie).

HINT 2: Hasło będzie można odczytać z mapy po odnalezieniu i zeskanowaniu
centralnej komnaty.

P.S. Rozwiązanie zadania przedstawie na początku kolejnego livestreama.


Pod linkiem: http://gynvael.coldwind.pl/misja008_drone_output/ jest przekierowanie do: http://gynvael.coldwind.pl/misja008_drone_io/ gdzie jest opis interejsu:

Kod: Zaznacz cały

SCAN DRONE v0.17.3
CLASSIFIED DATA. FOR YOUR EYES ONLY.

-- Podręcznik Operatora
 1. Dron posiada zamontowany obrotowy LIDAR.
 2. Dron automatycznie wykonuje skan LIDARem w każdym nowym miejscu.
 3. Skan odbywa się co 10 stopni i zwraca odległość w metrach.
 4. Zerowy stopien oznacza kierunek północny.
 5. Odległość może być niedokładna, szczególnie w okolicy ciasnych przejść.
 6. Zasięg LIDARu to 50m. Powyżej tej odległości zwracany jest "inf".
 7. Skan zawsze odbywa sie na wysokosci 1m nad powierzchnia.
 8. Dron zawsze porusza się o dokładnie jeden metr.
 9. Dron podaje swoją pozycję w metrach na osi zachód-wschód oraz
    północ-południe od ustawionego przez operatora (na stałe) nadajnika.
10. Dron może się poruszać jedynie w kierunkach wschód/zachód/północ/południe.

-- Format Danych
SCAN DRONE v0.17.3
POZYCJA_DRONA_X POZYCJA_DRONA_Y
ODLEGLOSC_NA_KĄCIE_0
ODLEGLOSC_NA_KĄCIE_10
ODLEGLOSC_NA_KĄCIE_20
...
ODLEGLOSC_NA_KĄCIE_350
MOVE_EAST: ADRES_PRZESUWAJĄCY_NA_WSCHÓD_LUB_"not possible"
MOVE_WEST: ADRES_PRZESUWAJĄCY_NA_ZACHÓD_LUB_"not possible"
MOVE_SOUTH: ADRES_PRZESUWAJĄCY_NA_POŁUDNIE_LUB_"not possible"
MOVE_NORTH: ADRES_PRZESUWAJĄCY_NA_PÓŁNOC_LUB_"not possible"

-- Dane


Zamiast się bawić w matematykę, postanowiłem pobrać wszystkie punkty i je wyświetlić, odpaliłem poniższy skrypt na noc, rano przerwałem po pobraniu ponad 178 tys plików. Sporo tego, trzeba teraz je jakoś wyświetlić.

Kod: Zaznacz cały

import os
import urllib2
import StringIO


#goo.gl/gg4QcA

url = "http://gynvael.coldwind.pl/misja008_drone_io/scans/"
nod = "68eb1a7625837e38d55c54dc99257a17.txt"
path = "robot/"

def read_node(nod):
    ret = []
    if not os.path.isfile(path+nod):
        try:
            r = urllib2.urlopen(url+nod).read()
            f = open(path+nod, 'w')
            f.write(r)
            f.close()
        except:
            ret.append(nod)
            print "TIMEOUT:", nod
            return ret
       
        for line in StringIO.StringIO(r):
            sline = line.split(' ')

            if sline[0] == "MOVE_EAST:" or sline[0] == "MOVE_WEST:" or sline[0] == "MOVE_SOUTH:" or sline[0] == "MOVE_NORTH:":
                print nod, line.strip()
                if sline[1] != "not":
                    ret.append(sline[1].strip())

    return ret
                   

def search_nodes():
    nodes = read_node(nod)
    while len(nodes):
        nodes += read_node(nodes.pop())


if __name__ == "__main__":
    search_nodes()
   
   


W każdym pobranym pliku, w drugiej linii mamy współrzędne drona, wystarczy zapalić ten bit na teksturze, do tego celu wykorzystałem poniższy program:

Kod: Zaznacz cały

import Image
import os

path = "robot/"

licznik = 0

im = Image.new('RGB', (2000,2000))
for filename in os.listdir(path):
    licznik += 1
    f = open(path + filename, 'r')
    l = f.readline()
    l = f.readline()
    f.close()
    ll = l.split(' ')
    x = int(ll[0])
    y = int(ll[1])
   
    try:
        im.putpixel((x,y), (255,255,255))
    except:
        print "error", x, y
        im.save("out.bmp")
       
    if licznik%1000 == 0:
        im.save("out.bmp")
        print licznik
       

im.save("out.bmp")




Tajne hasło to SECRET: DRON3$C4N
out2.PNG
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Today I am dirty
and I want to be pretty
Tomorrow, I know I'm just dirt

Awatar użytkownika
PROTON
User
User
Posty: 426
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [MISJA] misja008_drone_output

Postautor: PROTON » niedziela 16 lip 2017, 15:09

Zrobiłem animację pokazującą proces generowania mapy:
https://www.youtube.com/watch?v=CBKZvrMBBI4
Today I am dirty
and I want to be pretty
Tomorrow, I know I'm just dirt

Awatar użytkownika
PROTON
User
User
Posty: 426
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [MISJA] misja008_drone_output

Postautor: PROTON » niedziela 16 lip 2017, 20:48

Kolejny filmik pokazujący kroki drona, w jakiej kolejności była odkrywana mapa.
https://www.youtube.com/watch?v=3bB6wzcPwxA
Today I am dirty
and I want to be pretty
Tomorrow, I know I'm just dirt

Awatar użytkownika
PROTON
User
User
Posty: 426
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [MISJA] misja008_drone_output

Postautor: PROTON » piątek 21 lip 2017, 11:31

Gynvael Coldwind wspomniał o microgeek.eu.
https://youtu.be/M7hnoq2uSgs?t=33m35s
Today I am dirty
and I want to be pretty
Tomorrow, I know I'm just dirt

Awatar użytkownika
PROTON
User
User
Posty: 426
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [MISJA] misja008_drone_output

Postautor: PROTON » czwartek 27 lip 2017, 13:38

Today I am dirty
and I want to be pretty
Tomorrow, I know I'm just dirt


Wróć do „Inne języki programowania”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość