Criptografia de cifra Pigpen
Sua missão é simples: escrever um programa que receba texto como entrada e produza uma representação ASCII na Cifra Pigpen .
Entrada
Caracteres somente ASCII (sem Unicode). Você deve poder manipular pelo menos 16384 caracteres e 256 linhas.
Resultado
- Substitua todos os caracteres que não são novas linhas ou em
ABCDEFGHIJKLMNOPQRSTUVWXYZouabcdefghijklmnopqrstuvwxyzcom espaços. - Sem distinção entre maiúsculas e minúsculas, substitua cada letra pelo formato criptografado (consulte a próxima seção), inserindo um espaço à direita em cada uma das três linhas após cada uma. Cada caractere codificado é um bloco 3 * 3 da arte ASCII. Substitua espaços por 3 * 3 blocos de espaços.
- Todos os caracteres devem estar nas mesmas três linhas (chame essas três linhas de linha de pigpen), a menos que exista uma nova linha, que inicie uma nova linha de pigpen. Deixe uma linha normal em branco entre as linhas do pigpen.
The Cipher
| | | |
.| |.| |.
--+ for J +-+ for K +-- for L
--+ +-+ +--
.| |.| |.
--+ for M +-+ for N +-- for O
--+ +-+ +--
.| |.| |.
| for P | | for Q | for R
(ABCDEFGHI are the same as JKLMNOPQR, but with the . replaced by a space)
\./
V for W (note the row of 3 spaces on the top)
^
/.\ for Z (note the 3 spaces on the bottom)
\
.>
/ for X (note the leading spaces)
/
<.
\ for Y (note extra trailing spaces)
(STUV are like WXYZ, but with the . replaced by a space)
Exemplo
A entrada "hEllo, wORLd" deve produzir:
+-+ +-+ | | +-- +-- +-- | --+
| | | | |. |. |. \./ |. |. |. |
| | +-+ +-- +-- +-- V +-- | +-- --+
A codificação base64 acima, com uma nova linha à direita, está abaixo. O md5sum é 6f8ff1fed0cca4dd0492f9728ea02e7b.
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK
Sem uma nova linha à direita, o md5sum é 581005bef7ee76e24c019d076d5b375fe a base64 é:
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW ICArLS0gfCAgICstLSAtLSs =
Regras
- As brechas padrão são proibidas.
- Isso é código de golfe. O menor código vence.
- Em idiomas que não podem aceitar várias linhas de entrada por vez (por exemplo, com JavaScript
prompt()), use*(ou algum outro caractere) como um separador de linhas.
Erranda
- O exemplo estava faltando alguns espaços (um espaço deve consistir nos espaços finais do caractere anterior, se houver, em si e em seus próprios espaços finais). Isso foi consertado agora.
prompté usado para entrada, mas aceita apenas uma única linha. Eu poderia usar um caractere especial (como '*') para marcar uma nova linha na entrada ?.