local fmt = require "fmt" ---'cpx' returns integer index from 1 to 32 corresponding to compass point. -- Input heading h is in degrees. local function cpx(h) local x = math.floor(h /11.25 + 0.5) % 32 if x < 0 then x += 32 end return x + 1 end -- Printable compass points. local compass_point = { "North", "North by east", "North-northeast", "Northeast by north", "Northeast", "Northeast by east", "East-northeast", "East by north", "East", "East by south", "East-southeast", "Southeast by east", "Southeast", "Southeast by south", "South-southeast", "South by east", "South", "South by west", "South-southwest", "Southwest by south", "Southwest", "Southwest by west", "West-southwest", "West by south", "West", "West by north", "West-northwest", "Northwest by west", "Northwest", "Northwest by north", "North-northwest", "North by west" } -- Function required by task. local function degrees_to_compass_point(h) return compass_point[cpx(h)] end local r = { 0.0, 16.87, 16.88, 33.75, 50.62, 50.63, 67.5, 84.37, 84.38, 101.25, 118.12, 118.13, 135.0, 151.87, 151.88, 168.75, 185.62, 185.63, 202.5, 219.37, 219.38, 236.25, 253.12, 253.13, 270.0, 286.87, 286.88, 303.75, 320.62, 320.63, 337.5, 354.37, 354.38 } print("Index Compass point Degree") local i = 0 for r as h do local index = i % 32 + 1 local d = degrees_to_compass_point(h) fmt.print("%4d %-19s %7.2f°", index, d, h) i += 1 end