Bludiště
Vytvořte malou aplikaci (např. ve frameworku Flask), která bude umět hledat nejkratší cesty v bludišti.
TL;DR: Bludiště je acyklický neorientovaný graf. (Opraveno 12.12.)
Bludiště se skládá z pojmenovaných místností, mezi místnostmi jsou v chodby. Chodbami je možné procházet oběma směry.
Bludiště má právě jeden začátek a jeden konec, oba se nachází v nějakých místnostech.
Aplikace
Výsledkem má být program main.py
, který bude obsahovat hlavní program.
Celá aplikace může obsahovat i další moduly, které si main.py
naimportuje.
Aplikace má po spuštění poslouchat na portu 5000/TCP, kde bude odpovídat na HTTP požadavky.
-
Na požadavek
GET /
má aplikace odpovědět odpovědí200 OK
. Obsah stránky není definovaný, může tam být např.testovací formulář nebo může být stránka prázdná. -
Na požadavek
POST /
má aplikace zpracovat poslaná JSON data a vrátit stavový kód200 OK
, v těle odpovědi pak bude JSON výstup. Pokud data nejsou validní, má aplikace přesto vrátit200 OK
a v těle odpovědi vrátit chybový stav. -
Na jiné požadavky
GET
aPOST
má aplikace vrátit404 Not found
. -
Na metodu
HEAD
není chování definováno. -
Na jiné HTTP metody má API vrátit
405 Method Not Allowed
Vstup API
Aplikace na vstupu jako tělo požadavku očekává JSON objekt -
slovník, který obsahuje klíče start
, end
, rooms
a corridors
.
Např.
{
"start": "A",
"end": "E",
"rooms": ["A","B","C","D","E"],
"corridors": [ ["A","B"], ["B","E"], ["B","C"], ["C","E"] ]
}
-
Pod klíčem
rooms
je uložen seznam jmen místností. Jména místností jsou řetězce nebo čísla. -
Pod klíčem
corridors
je seznam chodeb. Chodby jsou reprezentovány jako dvojice -
Klíče
start
aend
obsahují jména
Výstup API
Pokud řešení existuje, aplikace vrátí slovník ve fomátu JSON , který obsahuje
v klíči solution
jednu z nejkratších cest jako popis uzlů, kterými se
musí projít. V klíči status
může poslat zprávu, že se povedlo najít.
{"solution": [ "A", "B", "E"],
"length": 3,
"status": "OK"
}
Pokud řešení neexistuje, vrátí aplikace v klíčích solution
a length
hodnotu None
a v klíči status
pošle zprávu No solution found
.
HTTP odpověď bude přesto 200 OK.
{"solution": null,
"length": null,
"status": "No solution found"
}
Pokud je zadání nesmyslné (např. chceme postavit chodbu mezi
neexistujícími místnostmi), vrátí aplikace v klíčích solution
a length
hodnotu None
a
v klíči error
pošle zprávu 'Invalid input', případně detailnější
výstup. HTTP odpověď bude přesto 200 OK.
{"solution": null,
"length": null,
"error": "Invalid input"
}
Odevzdání
Do odevzdávárny na ISu prosím nahrajte archiv (ZIP, tar.gz) zdrojových kódů aplikace.
Pro řešení můžete použít libovovolné moduly (třeba pro BFS či
Dijstrův algoritmus). Pokud potřebujete nějaké speciální
moduly, nezpomeňte je přidat i do requirements.txt
.
Aplikaci budeme testovat ve virtuálním prostředí s Pythonem 3, před spuštěním se provede instalace balíčků pomocí:
pip install -r requirements.txt
Pro testy aplikace můžete použít přiložené testy - ty čekají, že
aplikace poslouchá na portu 5000. Pro testování jsou použil py.test