> <> (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 é s
e 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. r
inverte a pilha e {:}
desloca a pilha para a esquerda (colocando i
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.
+1xv
+2<v
}
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 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 v
novamente e volta para baixo. }
desloca a pilha para a direita, tendo i
na 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 2
no 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, 6
no final da pilha, quais são as x, 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ã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-[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 que i
estava na posição 1 da pilha, você saberiai
agora está no fim da pilha.
O peixe então nada sobre :}
quais cópias i
e desloca a pilha para a direita, colocando i
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, movendo l-1
(comprimento da pilha menos 1) os valores para a nova pilha (deixando apenas i
a pilha antiga). Então o peixe simplesmente bate, o rv
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ário i
, que chamaremos ti
. Imediatamente o peixe nada 1-}
, o que subtrai 1 ti
e o move para o início da pilha. Então, :}
simplesmente copia m
e move-o para o início da pilha (colocando ti
na 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 x
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 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 *+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 ele o
. Nossa pilha é agora relativamente normal novamente contendo apenas [ m
, ti
, s
].
:}}:
faz com que o valor no final da pilha (basicamente na s
posição 0) não seja copiado, a pilha é deslocada para a direita duas vezes (colocando ti
na frente novamente) e depois ti
é copiada. ?!v
deve ser bem fácil de entender agora. Basicamente, se ti
for 0, sairemos da função com v
, caso contrário, executamos !
e pulamos v
(fazendo outro loop).
Se ti
for 0 e terminamos de produzir caracteres ligeiramente aleatórios, executamos v
e vemos:
v ~}}r]~<
.43<
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 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). 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 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 whitespaceTrimmer
execução.