Three word location: Difference between revisions
Content added Content deleted
(Added AppleScript solutions.) |
|||
Line 553: | Line 553: | ||
latitude = -81.5638 longitude = 28.3852 |
latitude = -81.5638 longitude = 28.3852 |
||
</pre> |
</pre> |
||
=={{header|Nim}}== |
|||
{{trans|Go}} |
|||
<lang Nim>import strformat, strutils |
|||
func toWord(w: int64): string = &"W{w:05}" |
|||
func fromWord(ws: string): int64 = ws[1..5].parseInt() |
|||
echo "Starting figures:" |
|||
var |
|||
lat = 28.3852 |
|||
long = -81.5638 |
|||
echo &" latitude = {lat:0.4f}, longitude = {long:0.4f}" |
|||
# Convert "lat" and "long" to positive integers. |
|||
var |
|||
ilat = int64(lat * 10_000 + 900_000) |
|||
ilong = int64(long * 10_000 + 1_800_000) |
|||
# Build 43 bit int comprising 21 bits (lat) and 22 bits (lon). |
|||
var latlong = ilat shl 22 + ilong |
|||
# Isolate relevant bits. |
|||
var |
|||
w1 = latlong shr 28 and 0x7fff |
|||
w2 = latlong shr 14 and 0x3fff |
|||
w3 = latlong and 0x3fff |
|||
# Convert to word format. |
|||
let |
|||
w1s = w1.toWord |
|||
w2s = w2.toWord |
|||
w3s = w3.toWord |
|||
# Print the results. |
|||
echo "\nThree word location is:" |
|||
echo &" {w1s} {w2s} {w3s}" |
|||
# Reverse the procedure. |
|||
w1 = w1s.fromWord |
|||
w2 = w2s.fromWord |
|||
w3 = w3s.fromWord |
|||
latlong = w1 shl 28 or w2 shl 14 or w3 |
|||
ilat = latlong shr 22 |
|||
ilong = latlong and 0x3fffff |
|||
lat = float(ilat - 900_000) / 10_000 |
|||
long = float(ilong - 1_800_000) / 10_000 |
|||
# Print the results. |
|||
echo "\nAfter reversing the procedure:" |
|||
echo &" latitude = {lat:0.4f}, longitude = {long:0.4f}"</lang> |
|||
{{out}} |
|||
<pre>Starting figures: |
|||
latitude = 28.3852, longitude = -81.5638 |
|||
Three word location is: |
|||
W18497 W11324 W01322 |
|||
After reversing the procedure: |
|||
latitude = 28.3852, longitude = -81.5638</pre> |
|||
=={{header|Perl}}== |
=={{header|Perl}}== |