Three word location: Difference between revisions

→‎{{header|Raku}}: Make word indexing routine user overridable, demo
(→‎{{header|Raku}}: Add another test coordinate)
(→‎{{header|Raku}}: Make word indexing routine user overridable, demo)
Line 308:
 
# ENCODE / DECODE
sub w-encode ( Rat(Real) $lat, Rat(Real) $lon, :&f = &synth ) {
$_ = (($lat + 90) * 10000).round.fmt('%021b') ~ (($lon + 180) * 10000).round.fmt('%022b');
(:2(.substr(0,15)), :2(.substr(15,14)),:2(.substr(29)))».&synthf
}
 
sub w-decode ( *@words, :&f = &thnys ) {
my $bin = (@words».&thnysf Z, <0 1 1>).map({.[0].fmt('%015b').substr(.[1])}).join;
(:2($bin.substr(0,21))/10000) - 90, (:2($bin.substr(21))/10000) - 180
}
Line 325:
59.3586, 24.7447, # Lake Raku
29.2021, 81.5324, # Village Raku
-7.1662, 53.9470, # The Indian ocean, south- west of Seychelles
28.3852, -81.5638 # Walt Disney World
-> $lat, $lon {
my @words = w-encode $lat, $lon;
my @index = w-encode $lat, $lon, :f( { $_ } );
printf "Coordinates: %s, %s\n To Index: %s\n To 3-word: %-20ss\nnFrom 3-word: %s, %s\n AndFrom backIndex: %s, %s\n\n",
$lat, $lon, @index.Str, @words.Str, w-decode(@words), w-decode @index, :f( { $_ } );
}</lang>
{{out}}
;Run 1
<pre>Coordinates: 51.4337, -0.2141
To 3-word: herazi dowisi rahiku
And back: 51.4337, -0.2141
 
Coordinates: 21.2596, -157.8117
To 3-word: bisiju yeduku pakeye
And back: 21.2596, -157.8117
 
Coordinates: -55.9652, -67.2256
To 3-word: lepimu wokemo nerupe
And back: -55.9652, -67.2256
 
Coordinates: 59.3586, 24.7447
To 3-word: nohaye tijehe nibida
And back: 59.3586, 24.7447
 
Coordinates: 29.2021, 81.5324
To 3-word: zipupi mebeto zekafa
And back: 29.2021, 81.5324
 
Coordinates: -7.1662, 53.947
To 3-word: zesonu yikezo rutaru
And back: -7.1662, 53.947
 
Coordinates: 28.3852, -81.5638
To 3-word: tabesa radoya lazinu
And back: 28.3852, -81.5638</pre>
;Run 2 (same coordinates)
<pre>Coordinates: 51.4337, -0.2141
To 3-wordIndex: herazi22099 poleye365 zepewa12003
To 3-word: herazizofobe dowisifohujo rahikuhabute
And back: 51.4337, -0.2141
<pre>CoordinatesFrom 3-word: 51.4337, -0.2141
From And backIndex: 51.4337, -0.2141
 
Coordinates: 21.2596, -157.8117
To 3-wordIndex: hayibi17384 yeduku5133 rufabo8891
To 3-word: bisijunijemo yedukuzanaza pakeyefupawu
And back: 21.2596, -157.8117
CoordinatesFrom 3-word: 21.2596, -157.8117
From And backIndex: 21.2596, -157.8117
 
Coordinates: -55.9652, -67.2256
To 3-wordIndex: dupupu5317 zidura15428 torime13632
To 3-word: lepimuzanohu wokemojulaso nerupehusese
And back: -55.9652, -67.2256
CoordinatesFrom 3-word: -55.9652, -67.2256
From And backIndex: -55.9652, -67.2256
 
Coordinates: 59.3586, 24.7447
To 3-wordIndex: nohaye23337 duniju4732 haripu15831
To 3-word: nohayekapupi tijehehokame nibidasupoku
And back: 59.3586, 24.7447
CoordinatesFrom 3-word: 59.3586, 24.7447
From And backIndex: 59.3586, 24.7447
 
Coordinates: 29.2021, 81.5324
To 3-wordIndex: jamudu18625 duriki5535 nefini10268
To 3-word: zipupidijule mebetonutuza zekafanefini
And back: 29.2021, 81.5324
CoordinatesFrom 3-word: 29.2021, 81.5324
From And backIndex: 29.2021, 81.5324
 
Coordinates: -7.1662, 53.947
To Index: 12942 12942 12942
To 3-word: rakudo rakudo rakudo
From And back3-word: -7.1662, 53.947
Coordinates From Index: -7.1662, 53.947
 
Coordinates: 28.3852, -81.5638
To 3-wordIndex: saradu18497 zemoke11324 yaneso1322
To 3-word: zesonutabesa yikezonekaso rutarubupodo
And back: 28.3852, -81.5638</pre>
CoordinatesFrom 3-word: 28.3852, -81.5638
From And backIndex: 28.3852, -81.5638</pre>
 
(Ok, I admit I manipulated that second to last one in the second run, but it '''is''' a correct, and valid 3-word addresslocation in this implementation. There is less than 1 chance in 5000 that it will produce that specific word group though.)
 
=={{header|Symsyn}}==
10,333

edits