JSFiddle - React, Tailwind, and code Playground
by Andrey
JavaScript
const tickets = [
'Lviv-Warshaw',
'Prague-Vienna',
'Warshaw-Prague',
'Kharkiv-Kyiv',
'Kyiv-Lviv'
];
const ticketsMetadata = ticketsHandler(tickets);
ticketsLength = Object.keys(ticketsMetadata).length-1
const sortedCities = [];
let firstCity;
let lastCity;
function ticketsHandler(_tickets){
const cities = {};
_tickets.forEach(item => {
const depart = item.split('-')[0];
const arrival = item.split('-')[1]
if(!cities[depart]){
cities[depart] = {
cityName: depart,
isFirst: true,
next: arrival,
isArrival: true
}
} else {
cities[depart].isFirst = false;
cities[depart].isLast = false;
cities[depart].next = arrival;
}
if(!cities[arrival]){
cities[arrival] = {
cityName: arrival,
isLast: true,
isFirst: false,
previous: depart
}
} else {
cities[arrival].cityName = arrival;
cities[arrival].isFirst = false;
cities[arrival].isLast = false;
cities[arrival].previous = depart;
}
});
return cities;
}
console.log(ticketsMetadata);
firstCity = extreme(ticketsMetadata, 'isFirst');
lastCity = extreme(ticketsMetadata, 'isLast');
function extreme(_ticketsMetadata, position){
for(let city in _ticketsMetadata){
if(_ticketsMetadata[city][position]) {
return city;
}
}
};
sorting(ticketsMetadata[firstCity]);
function sorting(city){
if(sortedCities.length < ticketsLength){
sortedCities[sortedCities.length] = `${city.cityName}-${city.next}`;
sorting(ticketsMetadata[city.next]);
}
}
console.log(`Traveling from ${firstCity} to ${lastCity}`);
console.log(sortedCities);