O problema:
Dois agentes secretos inimigos criaram um maravilhoso (para você) método de comunicação!
Veja como o processo de criptografia funciona:
1) Pegue os equivalentes ascii de cada letra. (Não são enviados espaços, números ou pontuação)
2) Para cada letra na mensagem, o equivalente ascii e a letra após (se existir, se não existir, deve ser considerada 0) são multiplicados (este produto é armazenado em uma matriz / lista) e somado (esse número também é armazenado em uma lista diferente).
3) As duas listas (de somas e produtos) são reunidas (a lista de somas e depois a lista de múltiplos na mesma matriz) e transmitidas.
Você precisa escrever o menor programa capaz de reverter esse processo e descriptografar as mensagens enviadas neste formato!
Exemplo de pares de entrada e saída:
[173, 209, 216, 219, 198, 198, 225, 222, 208, 100, 7272, 10908, 11664, 11988, 9657, 9657, 12654, 12312, 10800, 0] -> “HelloWorld”
[131, 133, 164, 195, 197, 99, 4290, 4422, 6499, 9506, 9702, 0] -> “ABCabc”
Isso é código-golfe , então a menor solução em bytes vence.
Mensagens de erro são permitidas.
Seu programa pode receber uma lista / matriz unidimensional ou uma sequência separada por vírgula, se você especificar no seu envio. O padrão é uma matriz / lista.
fonte
Respostas:
Casca ,
76 bytesExperimente online! De acordo com a documentação, o líder
m
não deve ser necessário, mas parece haver um bug no momento.Edit: -1 byte graças ao Zgarb!
Explicação:
fonte
`-
pode ser≠
. O comportamento dec
fato parece um bug.brainfuck , 66 bytes
Entrada é a cadeia criptografada. Assume células com tamanho infinito e 0 no EOF.
Como funciona:
fonte
Haskell ,
4535 bytesExperimente online!
Explicação
fst.span(<245)
pega todos os números do início da lista menores que 245. Esses são apenas os números da parte da soma, porque a maior soma possível éz + z = 122 + 122 = 244
e o menor produto possívelA * A = 65 * 65 = 4225
.scanr1(-)
pega o último valor da lista e o usa como acumulador inicial. Em seguida, de trás para frente, cada elemento da lista é subtraído pelo acumulador atual e o resultado é usado como o próximo acumulador e adicionado a uma lista.map toEnum
substitui cada número na lista pelo caractere correspondente para recriar a sequência.fonte
Geléia , 9 bytes
Experimente online! ou Verifique os dois casos de teste.
Alternativo.
Explicação
fonte
Python 2 , 72 bytes
Experimente online!
fonte
Python 2 , 92 bytes
Experimente online!
fonte
Gelatina , 11 bytes
Um link monádico que obtém uma lista de números inteiros e retorna uma lista de caracteres.
Experimente online!
Quão?
fonte
Pyt , 60 bytes
Pega uma lista de números inteiros e retorna uma sequência de caracteres.
Explicação:
Experimente online!
fonte
JavaScript (ES6), 80 bytes
Mostrar snippet de código
fonte
Script VB -
7471 bytes(Consegui reduzir de 74 para 71 usando While..Wend em vez de Do.Loop)
A entrada está em um array a (), a saída está na string d
Explicação
Eu testei isso em um arquivo vbscript com o código acima agrupado como uma função:
fonte
Limpo ,
96817877 byteszero
é o caractere nulo.Eu poderia salvar outro byte se o Clean não fosse tão exigente quanto aos nulos literais no arquivo de origem.
Experimente online!
fonte
f=
.f=
é a tarefa mais curta; portanto, uma chamada mínima adiciona duas de qualquer maneira.Perl 5 , 39 + 2 (
-ap
) = 41 bytesExperimente online!
fonte
C (gcc) ,
9089 bytess+=(i%2?-1:1)*...
<~>s-=~(i%2*-2)
.Experimente online!
fonte
ML padrão (MLton) ,
858482 bytesExperimente online!
Ungolfed:
Experimente online!
fonte
Perl 6 ,
43 3935 bytesTeste-o
Teste (faça o mesmo que acima)
Teste-o
Teste-o
Explicação:
fonte
05AB1E , 9 bytes
Experimente online!
Explicação
fonte
J
oin.ç
não transforma implicitamente a lista de caracteres em uma string. Se eu entendi o problema corretamente, o programa precisa gerar uma string e não uma lista de caracteres.Japonês, 12 bytes
Tem que haver uma maneira mais curta de obter a primeira metade da matriz ...
Tente
fonte
Python 2 , 70 bytes
Experimente online!
fonte