Inspirado por esta pergunta de CR (por favor, não me mate por navegar por CR)
Spec
As probabilidades de escrever incorretamente uma palavra são:
- 1/3 do tempo não altera a saída
- 1/3 do tempo remove um caractere aleatório
- 1/3 do tempo duplicam um caracter aleatório
A chance de remover / duplicar um determinado caractere na entrada deve ser a mesma para todos os caracteres.
Se dois caracteres consecutivos forem iguais (diferencia maiúsculas de minúsculas), a probabilidade de um deles ser modificado deve ser a mesma que se fosse um caractere. Ou seja, as saídas para AA
(que são AA
ou A
ou AAA
) devem ter a mesma probabilidade.
A entrada conterá apenas letras para simplificar.
Exemplos
A primeira linha é inserida, as seguintes linhas são todos os erros ortográficos possíveis. Cada linha deve ter a mesma probabilidade de saída, a entrada é excluída nos exemplos, mas ainda deve ter uma probabilidade de saída de 1/3.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: se você remover um personagem, ele poderá se tornar (-f) oo, f (-o) o e fo (-o). Portanto,fo
deve ser duas vezes mais provável queoo
, mas você diz que cada linha tem igual probabilidade.If two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
Respostas:
Pip ,
3827 bytesIsso foi divertido - usei o regex de Pip e os recursos de seqüência de caracteres mutáveis, que eu não fazia muito tempo. Recebe entrada via argumento da linha de comando.
Explicação:
Experimente online!
fonte
Ruby,
6455 + 1 (p
sinalizador) = 56 bytesEntrada é uma linha de STDIN inserida sem linha nova à direita.
fonte
CJam (21 bytes)
Demonstração online
Dissecação
fonte
JavaScript (ES6), 107
Menos golfe
Teste
fonte
Java 7,
189180178 bytesCasos não testados e de teste:
Experimente aqui.
Saída possível:
fonte
Python 2, 134 bytes
Os espaços em branco no loop for são guias.
Experimente no Ideone
fonte
Pitão - 17 bytes
Este realmente lida com casos especiais com caracteres consecutivos corretamente.
Conjunto de Teste .
fonte
APL, 21
Isso começa criando um vetor de zeros com um 1 em posição aleatória. Em seguida, multiplica-o por um número aleatório entre 1 e 3. +1 e mod 3 obtém um vetor com todos os 1s e um aleatório posicionado 0,1 ou 2.
Finalmente, ⍵ / ⍨ diz que cada letra deve ser escrita n vezes, onde n são os números do vetor.
Experimente em tryapl.org
fonte
Python 2, 123 bytes
fonte
JavaScript (ES6), 103
fonte
APL, 27 bytes
Explicação:
Teste:
fonte