Airports
HackConf 2018: Skyscanner Problem
Time Limit: 1s, Memory Limit: 256MiB
Преди време ние от Skyscanner искахме да направим хакатон, в който участниците да решават опростен вариант на интересна задача, с която се бяхме сблъскали на работа. За съжаление установихме, че трябва да дадем на участниците много данни, които потенциално можеха да бъдат използвани срещу партньорите ни от наши конкуренти. Замислихме се, дали не можем да анонимизираме данните, но преценихме, че умен и мотивиран човек може да ги де-анонимизира, ползвайки дадената информация.
Самата задача с де-анонимизирането също е интересна, макар и относително проста като постановка! Затова сега трябва да се справите именно с нея.
Дадени са ви 1,000,000 двупосочни полета между 1000 избрани от нас летища. Всеки полет е зададен с три стринга: началното и крайното летище, както и цената, която е струвал билетът. Това, което е променено, е че вместо истинските трибуквени кодове на летищата са дадени анонимизирани такива. Все пак, дадено летище винаги е зададено със съответния му "анонимизиран" код. Например,
Допълнително сме ви дали информация за 1000-те летища, които сме избрали. За всяко летище (с оригиналния му код) сме дали неговите координати (latitude, longitude), чрез които може да го локализирате на земното кълбо. Например, за летище София, дадената информация е
Самата задача с де-анонимизирането също е интересна, макар и относително проста като постановка! Затова сега трябва да се справите именно с нея.
Дадени са ви 1,000,000 двупосочни полета между 1000 избрани от нас летища. Всеки полет е зададен с три стринга: началното и крайното летище, както и цената, която е струвал билетът. Това, което е променено, е че вместо истинските трибуквени кодове на летищата са дадени анонимизирани такива. Все пак, дадено летище винаги е зададено със съответния му "анонимизиран" код. Например,
SOF(кодът на летище София) е даден навсякъде в данните с полетите като
KPY;
SFO(San Francisco International) навсякъде е
ZJD, а
AAQнавсякъде е
SPK. Така, например, полет между София и Сан Франциско, струващ $1519.98, е зададен като
KPY,ZJD,$1519.98. Всички полети можете да намерите във файла Flights.csv.
Допълнително сме ви дали информация за 1000-те летища, които сме избрали. За всяко летище (с оригиналния му код) сме дали неговите координати (latitude, longitude), чрез които може да го локализирате на земното кълбо. Например, за летище София, дадената информация е
SOF,42.700000,23.400000. Тези данни можете да намерите във файла AirportData.csv.
Вход
На стандартния вход ще бъдат зададени 1000-те летища във формата на изхода, но с въпросителни ('?') вместо търсените кодове.
Изход
На стандартния изход изведете входа, но с попълнени въпросителните със съответните "анонимизирани" кодове. За летищата, които не можете да отгатнете, можете да печатате произволни трибуквени кодове, или да оставите въпросителни.
Примерен Вход | Примерен Изход |
---|---|
SOF,??? SFO,??? AAE,??? AAL,??? AAQ,??? KOI,??? | SOF,KPY SFO,ZJD AAE,XXH AAL,??? AAQ,SPK KOI,WHO |
В истинския вход и, съответно, изход ще бъдат зададени точно 1000 летища. В дадения изход сме отгатнали правилно SOF, SFO, AAE, и AAQ, не сме дали предположение за AAL, и сме сгрешили KOI.
Ограничения
- Всички цени са зададени в щатски долари и са резултати на истински търсения.
- Както истинските, така и анонимизираните кодове на летищата са стрингове с точно три главни букви от английската азбука ('A'-'Z').
- Както оригиналните кодове на летища, така и анонимизираните такива, са уникални - тоест нито преди, нито след анонимизирането има две летища с еднакъв код. Възможно е, обаче, след анонимизиране дадено летище да е получило код на друго летище преди анонимизирането. Например, летището в Бангкок (
BKK
) след анонимизирането е станалоIVP
, докато Al Najaf Airport (NJF
) след анонимизирането е станалоBKK
. - Можете да предавате решение веднъж на всеки 3 минути.
Оценяване
Точките за съответния събмит ще бъдат броя правилно де-анонимизирани летища делено на всички летища. При няколко участника с равен резултат, по-напред ще бъде класиран този, който е предал решението си преди другия.