My “Worst” Layovers

Flying out of a smaller city like Dayton, I’m used to having flight layovers on the way to nearly everywhere I travel. While any layover is going to lengthen a trip, one of the most common complaints I hear from traveling companions is when a layover forces them to fly east to go west, or vice versa.

Traveling east (DAY–IAD) to go west (TUL)

[All maps in this post are generated by Paul Bogard using the Great Circle Mapper – copyright © Karl L. Swartz]

I started thinking about a way to quantify how bad a layover was, and ultimately decided that it would be best to compare the sum of the (great circle) distances for each of the flights flown compared to the (great circle) distance of a direct flight from the origin to the destination:

{ratio}_{layover} = \dfrac{distance_1+distance_2+\ldots+distance_n}{distance_\text{direct}}

This would give me a ratio of how much further I flew than I needed to, where a higher ratio would mean a worse layover. A ratio of 2 would mean I flew twice as far as I needed to, a ratio of 3 would mean three times as far, and so on. A ratio of 1 would mean a layover didn’t add any extra distance at all.

Continue reading

2018 Year in Travel

In 2018, I visited Australia and New Zealand, each for the first time. Other than that, my travel was largely similar in nature and quantity to 2017 – frequent routine business trips, with a few weekend vacations thrown in.

Hotels

I stayed in hotels a record 124 nights this year. Business travel was down slightly, but my three-week Australia and New Zealand vacation added a lot of personal hotel nights.

Flights

I ended up flying 109 flights this year, totaling 87,306 miles (140,505 km).

My 2018 flights worldwide
My 2018 flights within the United States

Maps generated by Paul Bogard using the using the Great Circle Mapper – copyright © Karl L. Swartz

New Airports

I visited eight airports for the first time this year:

  • #79 – SYD (Sydney, New South Wales, Australia)
  • #80 – PER (Perth, Western Australia, Australia)
  • #81 – MEL (Melbourne, Victoria, Australia)
  • #82 – CHC (Christchurch, New Zealand)
  • #83 – DUD (Dunedin, New Zealand)
  • #84 – AKL (Auckland, New Zealand)
  • #85 – LBB (Lubbock, Texas, United States)
  • #86 – PVD (Providence, Rhode Island, United States)

With 86 airports visited to date, I have only 14 to go to reach my goal of visiting 100 airports.

New Airlines

I flew on two airlines for the first time this year:

New Aircraft

I flew on three aircraft families for the first time this year; all three were from my Australia and New Zealand vacation.

Airbus A380
Boeing 787
ATR 72

Aircraft illustrations created by Norebbo

Superlatives

My longest flight was 8,580 miles (13,808 km) from Dallas to Sydney. This 17–hour flight was the longest I’ve ever been on. I also flew my second-longest flight ever this year: 6,516 miles (10,486 km) from Auckland to Los Angeles.

My shortest flight was 139 miles (223 km) from Dallas to Lawton.

Map generated by Paul Bogard using the using the Great Circle Mapper – copyright © Karl L. Swartz

Driving

I drove approximately 22,587 miles (36,350 km) this year – 11,616 miles (18,694 km) in my own car, and 10,971 miles (17,656 km) in rental cars.

2018 US driving (rental cars in red, my car in blue)
2018 Australia and New Zealand driving

Map tiles by CartoDB, under CC BY 3.0. map data © OpenStreetMap contributors under ODbL

Frequent Traveler Status

This year, I maintained Platinum status with American Airlines and Diamond status with Hilton. I did not earn any other status this year.

State Abbreviations Graph

In a recent chat that I participated in, we were discussing US two-letter state abbreviations that were one letter off of each other (e.g., NY and NJ).

After that discussion, I was curious about whether it would be possible to step from any state abbreviation to any other by changing one letter at a time, using only valid states along the way. My first step was to determine if there were any state abbreviations which didn’t share a first or last letter with any other states, so I wrote a simple Ruby script to test that.

state_codes = %w(AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY)
state_codes.sort!
one_letter_changes = Hash.new()
state_codes.each do |sc|
  one_letter_changes[sc] = state_codes.select{|s| sc != s && (sc[0] == s[0] || sc[1] == s[1])}
  puts "#{sc}: #{one_letter_changes[sc].join(", ")}"
end
Matching States

So every state had at least one other state it could go to. Texas (TX) had the fewest, with only Tennessee (TN); Massachusetts (MA) had the most, as quite a few state codes start with M or end with A.

Now I needed to find out if all the states would connect to each other, or if there would be several distinct “neighborhoods” of states. I decided to do this visually by creating a graph, using the output of my script to draw the connections:

State One Letter Changes
Graph with US state abbreviations as the vertices, green lines connecting state abbreviations with the same first letter, and blue lines connecting state abbreviations with the same second letter

Based on this graph, it is possible for any state abbreviation to change to any other state abbreviation!

I was also curious about the number of steps needed to go between any pair of state abbreviations, so I wrote a path distance algorithm based on Dijkstra’s algorithm (but with each path having equal weight) to find the shortest number of hops between any pair:

state_codes = %w(AL AK AZ AR CA CO CT DE FL GA HI ID IL IN IA KS KY LA ME MD MA MI MN MS MO MT NE NV NH NJ NM NY NC ND OH OK OR PA RI SC SD TN TX UT VT VA WA WV WI WY)
state_codes.sort!
one_letter_changes = Hash.new()
state_codes.each do |sc|
  one_letter_changes[sc] = state_codes.select{|s| sc != s && (sc[0] == s[0] || sc[1] == s[1])}
end

def path_distance(graph, source)
  vertexes = graph.keys
  return nil unless vertexes.include?(source)
  
  distance = Hash.new()
  previous_vertex = Hash.new()
  arbitrarily_large_distance = vertexes.length
  unvisited_vertices = Array.new

  vertexes.each do |v|
    distance[v] = arbitrarily_large_distance
    previous_vertex[v] = nil
    unvisited_vertices.push(v)
  end
  distance = 0;

  while(unvisited_vertices.any?)
    min_distance_vertex = unvisited_vertices.min_by{|v| distance[v]}
    
    graph[min_distance_vertex].each do |neighbor|
      alt = distance[min_distance_vertex] + 1
      if alt < distance[neighbor]
        distance[neighbor] = alt
        previous_vertex[neighbor] = min_distance_vertex
      end
    end
    unvisited_vertices -= [min_distance_vertex]
  end

  return distance

end

state_codes.each do |code|
  values = path_distance(one_letter_changes, code).sort_by{|k,v| k}.reject{|k,v| k > code}.map{|d| d[1]}
  puts "#{code}  #{values.join("  ")}"
end
puts "   #{state_codes.join(" ")}"
State to State

Based on the results, the highest number of hops is 6 – so every state abbreviation can be changed into any other state abbreviation in at most six steps!

2017 Year in Travel

Flights

With 113 total flights, this was a record flying year for me – the first year I’ve ever exceeded 100 flights. My work flights alone this year exceeded my total flights last year.

2017-flights

Hotels

My hotel nights were pretty consistent with the prior three years; I ended the year with 109 total nights.

2017-hotels

New Airports

I only visited five new airports this year, which puts me at a total of 78 airports visited so far.

New Airports 2017

Jacksonville, NC (OAJ) • Destin/Fort Walton Beach (VPS)

Bakersfield (BFL) • Tampa (TPA) • Peoria (PIA)

Peoria wasn’t a planned visit – we ended up diverting there and deplaning due to weather in Chicago.

Elite Status

I maintained American Platinum and Hilton Diamond this year, and earned Silver status for both United and Marriott.

EOY Status

So, for the first time, I have legitimate Marriott status – my previous Marriott Gold was a reward for having Gold status on United.

Trivia

Counting Visits to Airports: The Significance of Trip Sections

My Flight Historian is by no means the only personal flight tracking website. I could have easily tracked my flights on an existing site:

So why did I go to the trouble of writing my own flight tracking application rather than just use an existing one? My primary reason was to gain experience in a new programming language, but the reason I decided to write a flight tracker rather than any other project was that I disagreed with the way the available flight trackers count airports.

Continue reading

2015 Year in Travel

2015 was a relatively strong year for me for business travel, with the first and last thirds of the year being particularly busy. Due to that, my total flights and hotel nights just edged above 2014’s numbers, for another record year.

2015 Flights

2015map

I had 89 flights this year – 79 for work and 12 personal.

2015-flights

I didn’t take as many personal flights this year, but travel for my job more than made up for the difference.

2015 Hotel Nights

That’s not to say that I didn’t do a lot of personal travel, but a lot of those personal trips were by car. I came out with 30 personal hotel nights and 79 business nights, for a total of 109 nights.

2015-hotels

2015-portfolio

New Airports

I’ve visited six new airports this year:

I ended the year with 60 total airports visited, and am well on my way to my goal of visiting 100 airports.

Elite Status

2015-status

My flights were much more spread out among airlines this year, so I ended up getting the lowest tier status on two airlines (Gold on American Airlines and Silver on United) rather than last year’s mid-tier status on one airline. For hotels, I was easily able to pick up the 60 nights required for Diamond status with Hilton, and I even managed to pick up enough Marriott nights to get Silver. (Last year, my United Gold status gave me Marriott Gold status as well, even though I barely stayed with them.)

Trivia

2015-10-23 13.17.33