Introdução:
Tenho muitas cifras diferentes armazenadas em um documento que compilei quando criança, escolhi algumas das 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, ou apenas alguns. Mas aqui está o primeiro deles a começar.
Uma Cifra de Computador codificará o texto fornecido em grupos de caracteres 'aleatórios' de uma determinada informação length
. Se esse grupo contiver um dígito, ele será usado para indexar em seu próprio grupo o caractere codificado. Se nenhum dígito estiver presente no grupo, significa que o primeiro caractere é usado.
Por exemplo, digamos que queremos codificar o texto this is a computer cipher
com um determinado comprimento de 5
. Esta é uma saída potencial (nota: os números são indexados 1 no exemplo abaixo):
t h i s i s a c o m p u t e r c i p h e r (without spaces of course, but added as clarification)
qu5dt hprit k3iqb osyw2 jii2o m5uzs akiwb hwpc4 eoo3j muxer z4lpc 4lsuw 2tsmp eirkr r3rsi b5nvc vid2o dmh5p hrptj oeh2l 4ngrv (without spaces of course, but added as clarification)
Vamos dar alguns grupos como exemplos para explicar como decifrar o grupo:
qu5dt
: Este grupo contém um dígito5
, assim que o (1-indexada) 5 caráter deste grupo é o caráter usado para o texto decifrado:t
.hprit
: Este grupo não contém dígitos, de modo que o primeiro caractere desse grupo é usado implicitamente para o texto decifrado:h
.osyw2
: Este grupo contém um dígito2
, assim que o (1-indexada) 2º caráter deste grupo é o caráter usado para o texto decifrado:s
.
Desafio:
Dado um número inteiro length
e uma sequência word_to_encipher
, produza uma sequência codificada aleatória, conforme descrito acima.
Você só precisa codificar os dados length
e word_to_encipher
, portanto, não é necessário criar um programa / função de decifração também. No entanto, posso fazer um desafio da parte 2 para a decifração no futuro.
Regras do desafio:
- Você pode assumir que o valor
length
estará no intervalo[3,9]
. - Você pode assumir
word_to_encipher
que conterá apenas letras. - Você pode usar letras minúsculas ou maiúsculas completas (indique qual delas você usou na sua resposta).
- Suas saídas, cada grupo e as posições dos dígitos em um grupo (se houver) devem ser uniformemente aleatórias . Portanto, todas as letras aleatórias do alfabeto têm a mesma chance de ocorrer; a posição da letra criptografada em cada grupo tem a mesma chance de ocorrer; e a posição do dígito tem a mesma chance de ocorrer (exceto quando é o primeiro caractere e nenhum dígito está presente; e obviamente não pode estar na mesma posição que o caractere codificado).
- Você também pode usar dígitos indexados a 0 em vez de indexados a 1. Indique qual dos dois você usou na sua resposta.
- O dígito
1
(ou0
quando indexado com 0) nunca estará presente na saída. Portanto,b1ndh
não é um grupo válido para codificar o caractere 'b'. No entanto,b4tbw
é válido, onde os4
encripta osb
na posição 4 (1-indexada), e os outros caracteresb
,t
,w
são aleatórios (que por coincidência, também contém umb
). Outros grupos válidos possíveis delength
5 para codificar o caractere 'b' são:abcd2
,ab2de
,babbk
,hue5b
, 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:
Length: 5
Word to encipher: thisisacomputercipher
Possible output:
qu5dthpritk3iqbosyw2jii2om5uzsakiwbhwpc4eoo3jmuxerz4lpc4lsuw2tsmpeirkrr3rsib5nvcvid2odmh5phrptjoeh2l4ngrv
Input:
Length: 8
Word to encipher: test
Possible output:
ewetng4o6smptebyo6ontsrbtxten3qk
Input:
Length: 3
Word to encipher: three
Possible output:
tomv3h2rvege3le
abcd2
, ab2de
, babbk
tudo mesmo? Também é b1akk
válido?
b1akk
eu diria que não. Irá editá-lo na descrição do desafio para esclarecer. Se o primeiro caractere for o codificado, nenhum dígito deve estar presente.
"a??"
tem 676 possíveis resultados, mas "1a?"
, "?a1"
, "2?a"
, "?2a"
, tem only104 resultados. Portanto, se estou tentando escolher um resultado de todos esses resultados do 780, a distribuição da "posição da letra criptografada" é 13: 1: 1, não 1: 1: 1. E eu consideraria isso como o trabalho "uniformemente aleatório".