Implemente essa cifra de chave
Objetivo
Use o algoritmo (explicado na seção Algoritmo) para implementar uma determinada cifra.
O programa deve ler a entrada do STDIN ou o equivalente mais próximo disponível, usar o algoritmo para gerar o texto cifrado e uma chave.
O texto cifrado e a chave serão gravados em STDOUT ou no equivalente mais próximo disponível. Qualquer formato é permitido, desde que ele produza o texto cifrado e a chave.
Algoritmo
Converta os caracteres na sequência nos respectivos valores ASCII. Por exemplo:
Hello -> 72 101 108 108 111
Em seguida, você precisará gerar uma chave desde que a sequência com números aleatórios no intervalo de 0 a 9.
Hello -> 62841
Adicione os números inteiros na sequência de números aleatórios aos valores ASCII da sequência. Nos exemplos acima, 72 se tornaria 78 e 101 se tornaria 104.
72 + 6 = 78, 101 + 2 = 103, 108 + 8 = 116, etc
Em seguida, converta os novos valores novamente em caracteres. Nos exemplos acima, o texto Hello
se tornou Ngtpp
.
Exemplos
(Estes são apenas exemplos de como a saída pode ser. A saída pode e irá variar.)
Hello World
Lfrlu)_supg
41606984343
This will be encoded
Zhjs$~koo gj$iuhofgj
60104723305544750226
Regras
- Você pode assumir que a entrada conterá apenas caracteres no intervalo az, AZ e espaços.
- As submissões devem ser programas ou funções completos.
- As submissões serão pontuadas em bytes.
- As brechas padrão são proibidas.
- Isso é código-golfe, então o código mais curto vence.
(Esse é um dos meus primeiros desafios, se houver algo errado com isso, fique à vontade para me dizer como eu poderia melhorá-lo.)
fonte
preferably with the format (ciphertext)\n(key).
"recursos preferenciais" e código de golfe não se misturam muito bem. Você deve tornar isso obrigatório ou permitir outros formatos de saída. 3. A chave precisa ser impressa sem espaços? Que tal imprimi-lo em formato de lista, por exemplo[0, 5, 2, ...]
?Respostas:
Geléia ,
129 bytesExperimente online!
Como funciona
fonte
Python 3, 130 bytes
Obrigado a @Rod por apontar um bug
Uma função que recebe entrada via argumento como uma sequência e imprime em STDOUT.
Como funciona
Experimente no Ideone
fonte
m=10**len(x);k=str(randint(m,m*10))[1:];
e você ainda salva um byte no processo c:randint
é inclusivo, o que significa que você precisaria fazerm*10-1
. Eu apenas pensei em uma maneira de corrigi-lo para a mesma contagem de bytes.Pitão - 16 bytes
Aguardando decisão do OP nos formatos de saída.
Conjunto de Teste .
fonte
Na verdade, 17 bytes
Experimente online!
Explicação:
fonte
CJam - 14 bytes
Quando vi a matemática do código ascii, sabia que tinha que escrever uma resposta CJam.
Experimente online aqui .
fonte
MATL, 13 bytes
A saída é assim:
Experimente online!
Explicação:
fonte
r
ouYr
PowerShell v2 +,
7977 bytesRecebe entrada
$n
, faz um loop sobre cada caractere e obtém umRandom
elemento de0..9
cada iteração. Armazena esses números (como uma matriz) em$x
. Tubos que se agrupam em outro loop. Cada iteração, pega o elemento atual$_
, o adiciona ao caracter posicional cortado em$n
(conversão implícita de char para int) e, em seguida, é re-convertido como[char]
. Deixa isso no pipeline. Isso é encapsulado em parênteses e edificado-join
para formar a palavra. Isso fica na calha. Além disso, o número$x
também é-join
editado e deixado no pipeline. Esses são implicitamente impressos com umWrite-Output
no final da execução, o que resulta em serem impressos com uma nova linha por padrão.Exemplo
fonte
C #,
252247245232216 bytesO tamanho é muito ruim em comparação com as outras soluções, mas mesmo assim ...
Esta é minha segunda resposta a um codegolf e eu sou bastante iniciante, considerando C #, então eu gostaria de saber como diminuí-lo :)
Ungolfed:
static
da classe pfonte
b++<i.Count()
e deixar a terceira cláusula vazia? Além disso, não acho que você precise de uma nova linha à direita; portanto, a última chamada paraWriteLine
poderia serWrite
.var
. ie- emvar c=
vez destring c=
raspar alguns bytes.Console.ReadLine()
como string?i.Length
é menor quei.Count()
, você não precisará do System.Linq. string possui um indexador de char. Também a criação de new Random objetos no circuito é menos bytes:new Random().Next(10)
.CJam, 11 bytes
Experimente online!
Como funciona
fonte
05AB1E ,
1817 bytesExplicação
Experimente online
fonte
Python 3, 112 bytes
c é uma função que retorna o texto criptografado e a chave
Aqui está um código que faz a mesma coisa e é um pouco mais legível
Resultado:
fonte
PHP,
638682 bytesEdit: esqueceu de imprimir a chave ...
Obrigado a Alex Howansky por me salvar 4 bytes.
A entrada é fornecida através de um argumento de linha de comando. Pega cada caractere na sequência e adiciona um int aleatório de 0 a 9 ao seu código ASCII, depois converte o código novamente em ASCII. Todo número aleatório é anexado a
$s
, que é impresso no final.fonte
$s.=$r
depois da 2ª semi no loop for, salvando um byte porque pode despejar sua semi final. Então, seu loop será apenas uma instrução, para que você possa cortar as chaves de empacotamento, economizando mais 2 bytes. Em seguida, no final, você pode colocar o$s
interior da cadeia de caracteres citada, salvando o.
operador por mais um byte. :)J, 32 bytes
equivalente em python:
fonte
Perl, 34 bytes
Inclui +1 para
-p
fonte
Perl, 65 bytes
Levei um tempo para descobrir como obter a entrada sem uma nova linha no final. Toma como uma linha de comando arg
fonte
$;
não começar vazia para que ele imprime o conteúdo antigo eo rand nunca pode gerar 9. Eles são fáceis de corrigir e usando STDIN vai fazer seu código mais curto :-)<>=~/./g
. E não,int
em perl trunca para 0, ele não arredonda.perl -wle 'print int 8.6'
saídas8
Python 2,
8499 bytesUsa o
id()
valor da sequência para gerar números aleatórios.Tente
fonte
map(chr,[ord(a)+int(b)for a,b in zip(x,y)])
paramap(lambda x,y:chr(ord(x)+int(y)),x,y)
? que deve salvar alguma coisaSenva , 74 bytes
Aqui está o programa mais curto que eu fiz:
Uma pequena explicação? (Nota: BM significa Back-Memory ):
Isso parece maior agora, é verdade: p? Talvez seja possível otimizar esse código, mas, no momento, é o mais curto que encontrei.
fonte
C #, 174 bytes
Ungolfed:
Bem simples, realmente.
fonte
Perl 6: 55 ou 70 bytes
Como uma função anônima que aceita um parâmetro de string e retorna uma lista de duas strings (54 caracteres, 55 bytes) :
Como um programa que lê STDIN e grava em STDOUT (69 caracteres, 70 bytes) :
fonte