Depois de ler seus comentários, isso parece mais razoável. Eu só não tinha certeza se você estava pretendendo codificar megabytes de dados como este.
Eu recomendaria, seguindo as linhas da sugestão de Oliver, que você aumentasse sua densidade de dados pegando emprestada uma página de a cifra de Bacon , que as gangues de prisões costumam usar para codificar mensagens ocultas em missivas escritas em 2 estilos diferentes de scripts - geralmente em caracteres maiúsculos em comparação com caracteres minúsculos ou em caracteres impressos versus caracteres cursivos, por exemplo
Hey mOM, WHAT's FOR diNNeR TODAY? = ABBBA AAAAA BAAAB BAABA AAAAA
= P A S T A
No entanto, como seu objetivo não é stegnography, você simplesmente usaria isso para expandir seu conjunto de glifos. Fazendo isso, você pode ter até 114 glifos usando print & caracteres alfanuméricos cursivos ou 12996 pontos de código usando a codificação de caractere duplo.
No entanto, como todas as contagens de glifos superiores a 15 e inferiores a 256 são essencialmente as mesmas para uma cifra direta de dados binários (o que significa que você ainda precisará de 2 caracteres para representar cada byte, fornecendo uma densidade de dados de 4 bits por caractere em todos os casos), você pode usar os 98 pontos de código extra de glifos / 12740 para detecção / correção de erros.
As formas de fazer isso incluem:
- Escolha um conjunto dos 256 mais fáceis de ler / escrever combos de caracteres. Se qualquer outro combo de caracteres ocorrer, você sabe que é um erro de cópia.
- Use duas versões do caractere final como um bit de paridade.
-
Crie 50 conjuntos de glifos de 16 caracteres diferentes. Você pode usá-los para codificar os dados de correção de erros.
Por exemplo {set 1}{set 1}
significa os próximos 3 nibbles iguais a 0x000
, {set 1}{set 2}
igual a 0x001
, etc.
Você pode usar isso para representar 2500+ dos 4096 valores possíveis de 1,5 byte. Da mesma forma, você pode usar apenas 16 conjuntos para representar todos os valores do byte a seguir, oferecendo 100% de redundância sem aumentar a duração dos dados codificados.
Como alternativa, você pode usar os glifos extras para uma compactação adicional:
- Implemente a codificação de largura variável escolhendo 98 pontos de código de caractere único. Isso reduziria o tamanho médio do conteúdo codificado em cerca de 20%.
- Implemente algo semelhante à codificação de comprimento de execução usando conjuntos de glifos diferentes ou combinações de conjuntos de glifos para representar nibbles / bytes repetidos. Por exemplo.
Ab
= aba
; aB
= abab
; AB
= ababab
...
- Use os glifos extras ou os pontos de código para representar "palavras" e "frases" que são repetidas em seus dados. Embora os dados pré-compactados provavelmente tenham um alto nível de entropia, não sei quão eficiente isso seria.
Para reduzir ainda mais os erros de cópia, eu exibia o conteúdo codificado em linhas de grade e copiava para papel gráfico. Se você puder usar papel de carta personalizado que tenha cores de coluna / linha alternadas ou uma grade xadrez estilo tabuleiro de xadrez com colunas com letras & linhas numeradas para consultas rápidas, que aumentariam ainda mais a precisão da cópia.
Você também pode combinar um layout de grade alternada com estilos de caracteres alternados como uma forma fácil de detecção de erros. Ou seja Se colunas ímpares forem sempre maiúsculas, se o transcritor se encontrar escrevendo letras minúsculas em colunas ímpares, elas saberão que cometeram um erro e poderão começar a rastrear para ver onde isso aconteceu.
No entanto, se a sua principal prioridade for a precisão, usaria uma codificação binária +
código Hamming . Usando um (12, 8) encurtado código Hamming em papel gráfico padrão, você pode caber apenas 187 bytes, codificando apenas 124 bytes de dados. Mas pode ser transcrito muito rapidamente (uma barra para 1, nada para 0) e fornecer uma correção de erro simples. Tacking em um bit de paridade extra (13, 8) forneceria SECDED (correção de erro simples, detecção de erro duplo). Usando um código padrão de hamming como (15, 11) ou (31, 26), você obtém eficiência ainda melhor com 137 e 156 bytes de dados por folha, respectivamente. Taxas de código ainda mais altas podem ser alcançadas, dependendo de quão preciso você acha que seu transcritor pode ser.
Uma codificação binária também seria mais fácil de ler (em voz alta) e OCR / OMR.