Este porquinho foi para o mercado, este porquinho escreveu algum código ...
Ah, espere, não estamos falando sobre esse bacon, estamos falando sobre Sir Francis Bacon! Especificamente, a cifra Bacon concebida no final dos anos 1500 , como um método de ocultar uma mensagem dentro de outra mensagem, um método de esteganografia .
A cifra funciona ocultando a mensagem na apresentação do texto, em vez de seu conteúdo. Primeiro, as letras da sua mensagem são codificadas em binário (de 0 a 25) da seguinte maneira:
Nota: Por favor, use a seguinte codificação em seu código e não se preocupe com números, espaços ou outros símbolos na entrada, embora eu possa conceber algum bônus para aqueles que incluem esses caracteres em sua codificação. Se você incluir outros símbolos, as letras ainda deverão ocupar os espaços de 0 a 25 na codificação.
Letter Encoding
A AAAAA
B AAAAB
C AAABA
D AAABB
E AABAA
F AABAB
G AABBA
H AABBB
I ABAAA
J ABAAB
K ABABA
L ABABB
M ABBAA
N ABBAB
O ABBBA
P ABBBB
Q BAAAA
R BAAAB
S BAABA
T BAABB
U BABAA
V BABAB
W BABBA
X BABBB
Y BBAAA
Z BBAAB
Depois de codificar todas as letras da sua mensagem nos A
es e B
s acima, você deve agora selecionar dois tipos de letra para o seu código. Neste exemplo, usarei texto normal para o tipo de letra A
e texto em negrito para o tipo de letra B
.
Então a mensagem
HELLOWORLD
está codificado para
AABBB AABAA ABABB ABABB ABBBA BABBA ABBBA BAAAB ABABB AAABB
E agora ocultamos esse binário com um texto de portadora .
A rápida raposa marrom pula sobre os cães preguiçosos, brincando nos campos onde os pastores vigiam.
Tudo bem se a mensagem da transportadora for maior que a mensagem codificada real, embora não possa ser mais curta. Agora, transformamos o texto da operadora em negrito, de acordo com o local B
na mensagem codificada,
Th e qu ic k bro w n fo x j u pf s ove r t h e l az y do g s , gam b o l i ng em t ele campos onde os pastores mantém relógio.
Que sem Markdown lê como
Th**e** **qu**ic**k** bro**w**n **fo**x **j**u**mp**s **ove**r **t**h**e** **l**az**y**
**do**g**s**, gam**b**o**l**i**ng** in t**he** fields where the shepherds keeps watch.
Observe que eu não usei a pontuação na mensagem da operadora para codificar a mensagem, mas se a pontuação é codificada ou não, é com você /.
Regras
Sua entrada será a mensagem a ser codificada e uma mensagem da operadora. Se a mensagem da transportadora for muito curta, retorne algum tipo de mensagem de erro.
Você deve selecionar dois tipos de letras para codificar
A
eB
, como letras maiúsculas, minúsculas, itálico , negrito , itálico ,tachado,in code format
e assim por diante. Você deve usar a forma de Markdown do Stack Exchange para codificar esses tipos de letra, ou seja,UPPERCASE, lowercase, *italic*, **bold**, ***bold italic***, <s>strikethrough</s>, `in code format`
Sua saída deve ser sua mensagem da operadora agora codificada, mostrada com Markdown ou mostrada sem, como visto no exemplo acima.
Você só precisa criar um algoritmo de codificação. Quaisquer algoritmos de decodificação que você deseja fornecer são bem-vindos, mas no momento da redação deste documento não ajudará nem prejudicará sua pontuação.
Seu código deve ser um programa ou uma função.
Esse é o código golf, portanto o menor número de bytes vence.
Como sempre, se o problema não estiver claro, entre em contato. Boa sorte e bom golfe!
fonte
Respostas:
Pitão, 47 bytes
Experimente aqui .
Explicação:
fonte
Python 3,
216211231225207 bytesEsta é uma solução que usa texto normal e itálico no estilo Markdown para seus dois tipos de letra. E codifica tudo na mensagem da operadora, exceto os espaços.Editar: teve que corrigir o código para que o resultado fosse impresso corretamente e adicionou exemplos abaixo do código.
Editar: Editou o código para uma solução em maiúscula / minúscula anteriormente pior, devido a problemas na impressão do itálico corretamente.
Exemplos
Ungolfed:
fonte
C, 124 bytes
Isso requer que os argumentos estejam em uma codificação compatível com ASCII (por exemplo, ISO-8859.1 ou UTF-8). Ele modifica a transportadora no local e retorna 0 em caso de sucesso ou diferente de zero. A codificação é
A
== minúscula eB
== maiúscula. As letras de transporte não utilizadas são definidas como superiores.Explicação
Incluindo um programa de teste. Passe as letras para codificar como o primeiro argumento e a string portadora como o segundo.
Saída de teste:
fonte