Introdução:
Tenho várias cifras diferentes armazenadas em um documento que compilei quando criança, escolhi algumas que achei mais adequadas para desafios (não muito triviais e nem muito difíceis) e as transformei em desafios. A maioria deles ainda está na caixa de areia, e ainda não tenho certeza se vou postar todos eles, ou apenas alguns. Aqui está o segundo (o Computer Cipher foi o primeiro que eu postei).
Para a codificação trífida (sem usar uma palavra-chave), o alfabeto (e um curinga adicional) são divididos em três tabelas 3 por 3:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Um texto que queremos codificar é o primeiro caractere por caractere codificado nos números da coluna da linha da tabela. Por exemplo, o texto this is a trifid cipher
se torna:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Em seguida, colocamos tudo um após o outro linha por linha na tabela acima em grupos de três:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
E esses são transformados novamente em caracteres usando as mesmas tabelas:
s y y z a g d d y y u i q u z w u u h u y o
Uma coisa a observar, o comprimento da entrada deve ser coprime para 3. Portanto, se o comprimento for múltiplo de 3, anexamos um ou dois espaços à direita para tornar o comprimento da entrada não mais um múltiplo 3.
Desafio:
Dada uma sequência sentence_to_encipher
, codifique-a como descrito acima.
Você só precisa codificar, dado sentence_to_encipher
que não há necessidade de criar um programa / função de decifração também. No entanto, eu posso fazer um desafio da parte 2 para a decifração no futuro (embora eu tenha a sensação de que é trivial / semelhante ao processo de codificação).
Regras do desafio:
- Você pode assumir
sentence_to_encipher
que conterá apenas letras e espaços. - Você pode usar letras minúsculas ou maiúsculas completas (indique qual delas você usou na sua resposta).
- Você pode optar por acrescentar um ou dois espaços à direita quando o comprimento da entrada for 3 para que não seja mais um múltiplo de 3.
- A E / S é flexível. Tanto a entrada como a saída podem ser uma sequência, lista / matriz / fluxo de caracteres, etc.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)
Respostas:
Geléia ,
292625 bytesExperimente online!
Como funciona
fonte
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
pode acabar com oµ
que é aceitável para 24 anos.Carvão , 39 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Python 2 ,
180176174165163 bytesExperimente online!
A entrada pode ser superior ou inferior. Saída em maiúscula
fonte
Pitão,
3433 bytesPrograma completo. A entrada é esperada como minúscula, a saída é uma matriz de caracteres. Experimente online aqui ou verifique todos os casos de teste de uma vez aqui .
Solução alternativa de 34 bytes:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- em vez de +27 e cauda, usa.[03
preenchimento com 0 a comprimento 3. Pode ser 33 se o líders
for descartado.Editar: salvou um byte, largando à esquerda
s
como matrizes de caracteres com saída válidafonte
Ruby ,
153145138131 131 bytesExperimente online!
Uma abordagem rápida e ingênua, trabalha com texto em minúsculas. Entradas e saídas de matrizes de caracteres.
fonte
Java (JDK) , 192 bytes
Experimente online!
Abordagem muito ingênua. Pega uma letra minúscula
char[]
como entrada, mas gera aString
.Explicações
Créditos
fonte
Integer.valueOf
Byte.valueOf
R+=c<26?(char)(c+97):' ';
R+=(char)(c<26?c+97:32);
R , 145 bytes
Experimente online!
E / S como cadeias; adiciona um espaço. A estranha repetição de
[,3:1]
é porque a indexação da matriz natural de R é um pouco diferente.fonte
APL + WIN, 102 bytes
Explicação:
Exemplo de captura de tela do caso de teste:
fonte
SAS, 305 bytes
Um 'oof' caloroso para essa monstruosidade do SAS. Há muita formatação aleatória de strings que eu pensei que poderia evitar entrar nisso; Tenho certeza de que existem maneiras melhores de fazer isso.
A entrada é inserida nas novas linhas após a declaração dos cartões, da seguinte forma:
Produz um conjunto de dados que contém a saída na variável
f
, junto com um monte de variáveis auxiliares / valores de matriz.Ungolfed / explicação:
fonte
JavaScript (Node.js) ,
146 141 139136 bytesA E / S está em minúscula.
Experimente online!
Comentado
fonte
(o=...,++i)%3
funciona o JS novamente? É(o,i)
uma tupla ou algo assim, e os dois inteiros internos são convertidos em seu módulo-3? Como desenvolvedor Java, ainda me confunde um pouco(a,b)%c
. Boa resposta embora! Eu gosto de como você converte cada terceiro dígito e remove os dois primeiros bytes nulos. +1 de mim.++i
.05AB1E , 25 bytes
Como ninguém postou uma resposta 05AB1E ainda, achei que publicaria minha própria solução. Vejo agora que é muito parecido com a resposta de @ Dennis ♦ 'Jelly , apesar de eu ter pensado nisso de forma independente antes de lançar o desafio.
Entrada como string, saída como uma lista de caracteres. Adiciona um espaço se o comprimento for divisível por 3.
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Japonês , 42 bytes
Experimente online!
O núcleo desta resposta vem de uma resposta excluída de Shaggy, mas ele nunca voltou a lidar com entradas de comprimento divisíveis por 3, portanto essa é uma versão fixa .
Explicação:
fonte
C # (compilador interativo do Visual C #) , 178 bytes
Experimente online!
Menos jogado ... Ainda é confuso :)
fonte