Gere uma cifra com um número e uma string
Sua tarefa é simples. Dada uma sequência s
e um número 0 <= n <= 9
como entradas, insira um caractere ASCII imprimível pseudo-aleatório entre cada caractere dos n
tempos da sequência . De modo que, para cada personagem, s
haja n
caracteres aleatórios entre eles. Os espaços devem ser aparados.
Entrada:
s
frase de cadeia para criptografar na cifra- inteiro
n
na faixa de0 <= n <= 9
Exemplo:
Entrada:
The treasure is here
2
Resultado:
T ! 0 h 32 e F4 t 0i r lk e hm a 7y s # 0 u * & r * h e ! 2 i H ^ s B, h ! @ E 0) r $ h e
Isso é código-golfe, então o código mais curto vence! Boa sorte e divirta-se!
code-golf
string
random
cryptography
jacksonecac
fonte
fonte
n
caracteres consistir emn
cópias do mesmo caractere aleatório, elas ainda serão aleatórias, mas serão não é estatisticamente independente. E assim por dianteO
sejam mais prováveis que os espaços ou~
? Se tiver que ser uniforme, você deve dizê-lo explicitamente. E se não precisa ser uniforme, você deve pelo menos declarar que algo como cada caractere precisa ter uma probabilidade diferente de zero. Você também já declarou em um comentário anterior que cada personagem não tem que ter uma distribuição independente, por isso, se isso é importante, deve ser mencionado no desafio. Existe um espectro muito amplo de aleatoriedade.Respostas:
C #,
141131 bytesMuito parecido com a resposta Java da @ Geobit , mas atualmente há mais tempo :(
Material lambda completo:
fonte
R=...
você pode apenas usar diretamentenew System.Random().Next(...)
eu acho05AB1E , 11 bytes
Experimente online!
Explicação
fonte
Java 7,
132124 bytesNada extravagante, apenas um loop duplo como você esperaria. Externo para fazer um loop na cadeia, interno para preencher randoms:
fonte
k
:String f(int n,char[]a){String o="";for(char b:a)if(b>32){o+=b;for(int i=0;i++<n;o+=(char)(33+Math.random()*94));}return o;}
(125 bytes)char
elenco. Obrigado!Pyke,
12119 bytesExperimente aqui!
Trailing caracteres aleatórios é bom de acordo com OP.
fonte
Oitava, 43 bytes
Isso leva uma string
s
e um número inteiron
como entrada. Uma string no Octave é simplesmente uma matriz de caracteres.s>32
é um mapa lógico1
para quaisquer caracteres não espaciais. O código anexa uma matriz comn
linhas e o mesmo número de colunas ques(s>32)
possui, contendo números de ponto flutuante entre 33 e 126. É implicitamente arredondado para números inteiros e convertido em caracteres ASCII quando concatenado com a strings
.(:)'
endireita isso para uma matriz horizontal de caracteres.Teste aqui!
fonte
Python 2,
12312211811498 BytesCara, eu gostaria que
random
não fosse tão caro (e que não precisássemos filtrar por espaços). Agora temos uma grande economia de podermos ter caracteres cifrados no final :) De qualquer forma, aqui está:fonte
JavaScript (Firefox 30+), 96 bytes
O ES6 puro tem dois bytes a mais:
Aqui está uma abordagem muito interessante que, infelizmente, é 26 bytes mais longa:
fonte
/. *(?=.)/
, não funciona para strings que começam ou terminam em espaços, não que alguém se importe. (Você está ainda permitiu arrastando caracteres aleatórios agora.)(?=.)
que cuida de espaços no final das strings.94+33
em vez de95+32
R, 97 bytes
Função sem nome, recebendo entradas
x
(string) en
.Experimente no R-fiddle
fonte
CJam ,
2118 bytesExperimente online!
Imprime
n
caracteres finais aleatórios.Explicação
fonte
Bash, 124 bytes
Pure bash + coreutils , sem estruturas de controle de fluxo, sem sub-idiomas, sem "eval"
Golfe
Teste
fonte
Q / KDB +,
39 3634 bytesVariáveis em uso:
Isso usa o anterior advérbio , que aplica a função à esquerda entre cada item à direita e seu antecessor. (Essencialmente, aplica função à esquerda entre cada caractere à direita.)
Gere n números aleatórios entre 40 e 126 e depois converta-os em um caractere equivalente: (q parece ter apenas caracteres para estes)
Exemplo de saída:
EDIT:
salvou 3 bytes convertendo o q's raze em (, /) usando a notação k e alterou similarmente antes de `: Graças a @slackwear pela atualização, raspou 2 bytes :)
fonte
10h$
Java 8, 114 bytes
Golfe
Lambda que aceita um inteiro e uma string. Inspirado na resposta do Java 7, faça um loop duplo usando alguma sintaxe do Java 8 Stream (
String.chars
) para economizar alguns bytes.Entrada
Resultado
fonte
Scala,
9594 bytesNada demais, além do uso de mkString em uma String. Ele trata a string como uma lista de caracteres e me permite inserir um separador entre eles. Meu separador é o número apropriado de caracteres alfanuméricos gerados aleatoriamente.
fonte
Random.alphanumeric
fará com que cada pedaço de ser o mesmo, por isso é uma cifra coxo ... Veja este exemplo:scala> c("Hello", 1) res0: String = Hbeblblbo
filter
. InvocarmkString
uma String o tratará como uma coleção de caracteres.> <> (Peixe),
107106103 bytesExperimente online!
Não é super aleatório, mas é aleatório. Apenas coloque a string e o número inteiro na pilha (exemplo: "Olá, mundo!", 5).
Explicação completa
Esta é uma versão um pouco mais antiga do código, até que eu atualize a explicação. É basicamente o mesmo, apenas um pouco mais fácil de ler:
Vamos fingir que o parâmetro string é
s
e o parâmetro inteiro éi
.O
<
comando diz ao peixe para mover-se imediatamente para a esquerda, o que envolve" "
, o que adiciona um espaço na pilha. Em seguida, o peixe viaja&
, o que adiciona espaço ao registro.r
inverte a pilha e{:}
desloca a pilha para a esquerda (colocandoi
no final da pilha), copia o valor no final da pilha e depois a desloca para a direita.v
diz ao peixe para começar a se mover para baixo.x
diz ao peixe para se mover em uma direção aleatória, resultando no peixe indo para a direita e continuando para baixo, ou passando por cima1+
ou2+
antes. Eles adicionam 1 ou 2, respectivamente, ao número no final da pilha. Se o peixe viaja para cima, batev
novamente e volta para baixo.}
desloca a pilha para a direita, tendoi
na posição 1 na pilha e essa nova variável na posição 0 (a chamaremosm
).Esta seção é uma função, vamos chamá-la whitespaceTrimmer . Começa onde o
<
está. Ele simplesmente remove os espaços que estão no final da pilha (portanto, o início da string) até que ele seja executado em um caractere não espacial.Então, imediatamente, o peixe nada
<
e deve viajar para a esquerda. Em seguida, ele é executado:&:&
qual copia o valor no final da pilha, coloca o espaço do registrador no final da pilha, copia-o e o coloca novamente no registrador.Então o peixe acerta
=?!v ~
, ou mais especificamente,=
que retira os dois últimos valores (os dois que acabamos de criar) da pilha, os compara, coloca um 1 no final da pilha, se eles são iguais, e um 0 em o fim da pilha, se forem diferentes. A?
aparece o novo valor para fora da extremidade da pilha, se for 0 não executar a instrução seguinte, que neste caso é!
, em vez disso é executadov
, o que as ordens do peixe para se deslocar para baixo (de sair a função).Se for 1, no entanto, ele encontrou um espaço, para executar o
!
que é um trampolim e fazer com que o peixe pule a próxima instrução, que é av
, para que o peixe continue. Na frente do peixe, ele vê o~
que diz para retirar o último valor da pilha (confirmado como um espaço), depois o peixe continua e executa a função novamente.O peixe é instruído imediatamente a nadar para a direita com a e
>
, em seguida, gera o último caractere na pilha como
(o qual, a primeira vez que isso é executado, é o primeiro caracteres
). Ele obtém o comprimento da pilhal
, coloca um2
no final da pilha e-
faz com que 2 sejam subtraídosl
. Acerta o?!;
que, lembrando o que?
faz, faz com que o peixe pule!
a pilha se estiver vazia e apareça;
, o que encerra o programa.A seguir, se ainda houver caracteres na pilha, executamos o
!
que faz com que o peixe salte sobre;
e executea6.
, que armazenaa
(AKA10
) e,6
no final da pilha, quais são asx, y
coordenadas.
, o que os expõe no final do empilhar e depois teleporta o peixe para10, 6
e execute a instrução à direita dessa posição (como o peixe está nadando direito).Isso é menos complicado do que parece quando você percebe que a
y
posição 6 é a linha abaixo desta.x
posição 10 é entãov
, e à direita disso é, que é um no-op. Isso faz com que o peixe continue nadando direito e realmente comece a execução no início da linha ...
Portanto, esta é a função que adiciona o texto aleatório entre os caracteres. É meio bocado, mas é só porque eu tentei torná-lo um pouco mais aleatório. Vamos chamar isso de genRandomChars .
Na
:{{:}l1-[rv
verdade, é a configuração da função e menos parte da própria função. O peixe nada primeiro sobre o:{{
qual copia o valor no final da pilha e depois o desloca para a esquerda duas vezes. Se você se lembrar quei
estava na posição 1 da pilha, você saberiai
agora está no fim da pilha.O peixe então nada sobre
:}
quais cópiasi
e desloca a pilha para a direita, colocandoi
ambas no início e no final da pilha.l1-[
faz com que o peixe coloque o comprimento no final da pilha, subtraia 1 e[
crie uma nova pilha, movendol-1
(comprimento da pilha menos 1) os valores para a nova pilha (deixando apenasi
a pilha antiga). Então o peixe simplesmente bate, orv
que inverte a pilha novamente (acho que a criação de uma nova pilha a inverte por algum motivo) e ordena que o peixe nade para baixo mais uma vez, começando verdadeiramente a função no<
abaixo.Então, atualmente, o fim da pilha tem
m
e nosso temporárioi
, que chamaremosti
. Imediatamente o peixe nada1-}
, o que subtrai 1ti
e o move para o início da pilha. Então,:}
simplesmente copiam
e move-o para o início da pilha (colocandoti
na posição 1 da pilha).É quando atingimos esta coisinha:
Isso é realmente simples demais. Isso
!
faz com que o peixe pule|
e executex
. Lembrando o quex
faz, lembramos que isso faz o peixe se mover em qualquer 4 direções.|
é simplesmente um espelho e faz com que o peixe volte a nadarx
. Então, basicamente, o peixe colocará 1, 2 ou 3 no final da pilha e continuará se movendo para a esquerda, contornando.O peixe então é executado, o
*+o
que faz com que os dois últimos valores na pilha sejam disparados, multiplicados juntos, e o resultado é pressionado novamente, em seguida, a mesma coisa com a adição e, em seguida, o valor final é disparado da pilha e gerado com eleo
. Nossa pilha é agora relativamente normal novamente contendo apenas [m
,ti
,s
].:}}:
faz com que o valor no final da pilha (basicamente nas
posição 0) não seja copiado, a pilha é deslocada para a direita duas vezes (colocandoti
na frente novamente) e depoisti
é copiada.?!v
deve ser bem fácil de entender agora. Basicamente, seti
for 0, sairemos da função comv
, caso contrário, executamos!
e pulamosv
(fazendo outro loop).Se
ti
for 0 e terminamos de produzir caracteres ligeiramente aleatórios, executamosv
e vemos:Nada muito chique aqui. Nós removemos
ti
da pilha via~
. Então]
é novo, ele retira todos os nossos valores da pilha e os coloca na pilha antiga! Por causa da questão reversão nós revertemos comr
, em seguida, mudar a pilha direita duas vezes com}}~
, shufting a pilha para a direita, dando-nos [m
,i
,s
], o~
é para remover o adicional duplicados[0]
a partir no início da função que precisaríamos-lo se estávamos fazendo um loop (mas não estamos, estamos saindo).v
diz ao peixe para nadar para baixo e para dentro>34.
(invertido para mostrar a ordem de execução), que diz ao peixe para nadar simplesmente para a esquerda e para dentro3, 4
(porque o.
é um salto!).3, 4
é realmente apenas à direita do começowhitespaceTrimmer
, o que é perfeito porque estamos viajando para a esquerda.Seguindo toda essa lógica, podemos seguir o peixe até que a pilha esteja vazia e o programa saia logo após a
whitespaceTrimmer
execução.fonte
Perl 5, 81 bytes
Espero que o seguinte ajude você a entender o que o one-liner faz:
fonte
Clojure,
126123118122117 bytesMapeia a mensagem, insere caracteres aleatórios e concatena o resultado.
As instruções sugerem que todos os espaços devem ser removidos da sequência de resultados. Se apenas espaços da mensagem original devem ser removidos, eu posso mudar isso.
Ungolfed:
fonte
Python 3, 127 bytes
Provavelmente muito mais tempo do que o necessário, mas este é o meu golfe até agora.
fonte
PHP, 96 bytes
Toma String como argumento 1 e Number como argumento 2
Experimente online
fonte
Python 3, 133 bytes
fonte
Node.js, 88 bytes
Exemplo de saídas:
Experimente online!
fonte
C,
102100 bytes-2 bytes para pular
continue
.Ungolfed:
Uso:
fonte