Ir para o conteúdo

Código Natural/Notação posicional: mudanças entre as edições

reformat section
(reformat section)
Linha 230: Linha 230:


O conjunto foi otimizado excluindo vogais ("I", "O", "U") e símbolos que podem ser facilmente confundidos entre si (como ''L''), e excluindo "X" porque é usado como prefixo de conversão hexadecimal (por exemplo, <code>x0123</code>).
O conjunto foi otimizado excluindo vogais ("I", "O", "U") e símbolos que podem ser facilmente confundidos entre si (como ''L''), e excluindo "X" porque é usado como prefixo de conversão hexadecimal (por exemplo, <code>x0123</code>).
[[arquivo:KraEtAll2019-fig11-ordBases.png|thumb|300px|Tabela da representação dos códigos naturais de até 4 bits, em bases 2h, 4h, 8h e, com um dígito, 16h. ]]


O nome desta nova representação é base16h, porque é a “base16 ordinária estendida para hierarquia”:
O nome desta nova representação é base16h, porque é a “base16 ordinária estendida para hierarquia”:
<code>/^([0-9a-f]*)([GHJKMNP-TVZY])?$/</code>
<code>/^([0-9a-f]*)([GHJKMNP-TVZY])?$/</code>


O inverso, para traduzir de uma string de bits com b bits, há b%4 últimos bits a serem traduzidos para um nhDigit. Dividindo (por exemplo, com Javascript) o valor como partes de prefixo e sufixo,
O inverso, para traduzir de uma cadeia de bits com ''b'' bits, há ''b''%4 últimos bits a serem traduzidos para um ''nhDigit''. Dividindo (por exemplo, com Javascript) o valor como partes de prefixo e sufixo,
<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
let part = bitString.match(/^((?:[01]{4,4})*)([01]*)$/)
let part = bitString.match(/^((?:[01]{4,4})*)([01]*)$/)
Linha 241: Linha 243:


<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{ "0":"G", "00":"H", "000":"J", "001":"K", "01":"M", "010":"N", " 011":"P",
{ "0":"G", "00":"H", "000":"J", "001":"K",  
   "1":"Q", "10":"R", "100":"S", "101":"T", "11":"V", "110":"Z", "111 ":"S"
  "01":"M", "010":"N", " 011":"P",
   "1":"Q", "10":"R", "100":"S", "101":"T",  
  "11":"V", "110":"Z", "111 ":"S"
}
}
</syntaxhighlight>
</syntaxhighlight>
A tabela ao lado resume as convenções adotadas, e demonstra que há consistência entre as bases 4h,  8h e 16h.


Exemplo: para converter <code>0010100101</code> em Base16h, divida em <code>part[0]=00101001</code> de blocos de 4 bits desde o início, e <code>part[1]=01</code>, dos bits restantes. Converta <code>parte[0]</code> em hexadecimal comum (<code>00101001</code> é “29”) e <code>part[1]</code> pela tabela JSON acima (<code>01</code> é “M”), resultando em “29M”.
Exemplo: para converter <code>0010100101</code> em Base16h, divida em <code>part[0]=00101001</code> de blocos de 4 bits desde o início, e <code>part[1]=01</code>, dos bits restantes. Converta <code>parte[0]</code> em hexadecimal comum (<code>00101001</code> é “29”) e <code>part[1]</code> pela tabela JSON acima (<code>01</code> é “M”), resultando em “29M”.
== Ilustrando em geocódigos ==
Podemos imaginar, sobre um mapa geográfico, a célula-mãe de 512 km de lado, rotulada pelo ID <code>82</code>. Ela pode ser subdividida recursivamente em 4 partes para manter a formar quadrada, ou ainda ser subdivida recursivamente em 2, resultando em grades quadradas e retangulares alternadamente:


[[Arquivo:GGeohash-ilustra4.png|centro|620px]]
[[Arquivo:GGeohash-ilustra4.png|centro|620px]]


Abaixo células ''L0'' de cobertura do Brasil, ilustrando caso concreto de grades de diferentes níveis.
Abaixo células ''L0'' de cobertura do Brasil, ilustrando caso concreto de grades de diferentes níveis.
2 402

edições