> <> (Peixe), 107 106 103 bytes
<v}:{r&" "
1xv+
2<v+
v}<
<~v!?=&:&:
6.>ol2-?!;a
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o-+
^3<v ~}}r]~<
.40<
Experimente online!
Não é super aleatório, mas é aleatório. Apenas coloque a string e o número inteiro na pilha (exemplo: "Olá, mundo!", 5).
Input: "Hello world!", 5
Output: H^\^]^eceeedldcdeclgfffhowhhfggojkkkkrdccedl]]\]\d
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:
< v}:{r&" "
+1xv
+2<v
}
:&:<~ v!?=&
?!;a6.>ol2-
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
Vamos fingir que o parâmetro string é se o parâmetro inteiro é i.
< v}:{r&" "
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. rinverte a pilha e {:}desloca a pilha para a esquerda (colocando ino final da pilha), copia o valor no final da pilha e depois a desloca para a direita. vdiz ao peixe para começar a se mover para baixo.
+1xv
+2<v
}
xdiz 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 cima 1+ou 2+antes. Eles adicionam 1 ou 2, respectivamente, ao número no final da pilha. Se o peixe viaja para cima, bate vnovamente e volta para baixo. }desloca a pilha para a direita, tendo ina posição 1 na pilha e essa nova variável na posição 0 (a chamaremos m).
:&:<~ v!?=&
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 é executado v, 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 é a v, 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.
?!;a6.>ol2-
O peixe é instruído imediatamente a nadar para a direita com a e >, em seguida, gera o último caractere na pilha com o(o qual, a primeira vez que isso é executado, é o primeiro caractere s). Ele obtém o comprimento da pilha l, coloca um 2no final da pilha e -faz com que 2 sejam subtraídos l. 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 execute a6., que armazena a(AKA 10) e, 6no final da pilha, quais são as x, ycoordenadas ., 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 yposição 6 é a linha abaixo desta. xposição 10 é então v, 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 ...
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
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-[rvverdade, é 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 que iestava na posição 1 da pilha, você saberiai agora está no fim da pilha.
O peixe então nada sobre :}quais cópias ie desloca a pilha para a direita, colocando iambas 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, movendo l-1(comprimento da pilha menos 1) os valores para a nova pilha (deixando apenas ia pilha antiga). Então o peixe simplesmente bate, o rvque 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 me nosso temporário i, que chamaremos ti. Imediatamente o peixe nada 1-}, o que subtrai 1 tie o move para o início da pilha. Então, :}simplesmente copia me move-o para o início da pilha (colocando tina posição 1 da pilha).
É quando atingimos esta coisinha:
v2<
<1x|!
^3<
Isso é realmente simples demais. Isso !faz com que o peixe pule |e execute x. Lembrando o que xfaz, lembramos que isso faz o peixe se mover em qualquer 4 direções. |é simplesmente um espelho e faz com que o peixe volte a nadar x. 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 *+oque 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 ele o. Nossa pilha é agora relativamente normal novamente contendo apenas [ m, ti, s].
:}}:faz com que o valor no final da pilha (basicamente na sposição 0) não seja copiado, a pilha é deslocada para a direita duas vezes (colocando tina frente novamente) e depois tié copiada. ?!vdeve ser bem fácil de entender agora. Basicamente, se tifor 0, sairemos da função com v, caso contrário, executamos !e pulamos v(fazendo outro loop).
Se tifor 0 e terminamos de produzir caracteres ligeiramente aleatórios, executamos ve vemos:
v ~}}r]~<
.43<
Nada muito chique aqui. Nós removemos tida 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 com r, 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 duplicado s[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). vdiz 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 dentro 3, 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 whitespaceTrimmerexecução.