Jump to content

Three word location: Difference between revisions

(Make draft.)
Line 132:
 
</lang>
 
=={{header|Julia}}==
Direct translation from the SymSyn example given by the task creator. though note that idiomatic Julia would usually code this as two small encode() and decode() functions.
<lang julia>
# Three Word Location - convert latitude and longitude to three words
LAT = 28.3852
LON = -81.5638
 
# build word array W00000 ... W28125
wordarray = ["W" * string(x, pad=5) for x in 0:28125]
 
# make latitude and longitude positive integers
ILAT = Int(LAT * 10000 + 900000)
ILON = Int(LON * 10000 + 1800000)
 
# build 43 bit integer containing latitude (21 bits) and longitude (22 bits)
LATLON = (ILAT << 22) + ILON
 
# isolate most significant 15 bits for word 1 index
# next 14 bits for word 2 index
# next 14 bits for word 3 index
W1 = (LATLON >> 28) & 0xefff
W2 = (LATLON >> 14) & 0x7fff
W3 = LATLON & 0x7fff
 
# fetch each word from word array
w1 = wordarray[W1 + 1]
w2 = wordarray[W2 + 1]
w3 = wordarray[W3 + 1]
 
# display words
 
println("$w1 $w2 $w3")
 
 
# reverse the procedure
 
 
# look up each word
 
(w1index, w2index, w3index) = indexin([w1, w2, w3], wordarray) .- 1
 
# build the latlon integer from the word indexes
 
latlon = (w1index << 28) | (w2index << 14) | w3index
 
 
# isolate the latitude and longitude
 
ilon = latlon & 0xfffff
ilat = latlon >> 22
 
# convert back to floating point values
 
lon = (ilon - 1800000) / 10000
lat = (ilat - 900000) / 10000
 
# display values
 
println("latitude = $lat longitude = $lon")
</lang>{{out}}
<pre>
W18497 W27708 W01322
latitude = 28.3852 longitude = -81.5638
</pre>
4,105

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.