Dada uma sequência que contém apenas letras (sem distinção entre maiúsculas e minúsculas), divida-a em palavras de comprimentos uniformemente aleatórios, usando a distribuição abaixo, com exceção da última palavra, que pode ter qualquer comprimento válido (1-10). Sua saída são essas palavras, como uma sequência separada por espaço ( "test te tests"
), uma matriz de sequências ( ["test","te","tests"]
) ou qualquer outro formato de saída semelhante.
Distribuição do comprimento da palavra
Word Length - Fractional Chance / 72 - Rounded Percentage
1 - 2 / 72 - 2.78%
2 - 14 / 72 - 19.44%
3 - 16 / 72 - 22.22%
4 - 12 / 72 - 16.67%
5 - 8 / 72 - 11.11%
6 - 6 / 72 - 8.33%
7 - 5 / 72 - 6.94%
8 - 4 / 72 - 5.56%
9 - 3 / 72 - 4.17%
10 - 2 / 72 - 2.78%
Suas probabilidades não precisam corresponder exatamente - elas podem ser desativadas por 1/144
th ou .69%
, em qualquer direção (mas obviamente elas ainda devem somar 72/72
ou 100%
).
Os dados foram adivinhados a partir da quarta página, primeira figura deste artigo .
Casos de teste com saída de amostra
O comportamento em casos de teste muito curtos (comprimento <11) é indefinido.
Observe que eu os criei manualmente, para que eles sigam ou não a distribuição uniforme acima.
abcdefghijklmnopqrstuvwxyz
abcd efgh i jklmnopq rs tu vwx yz
thequickbrownfoxjumpedoverthelazydog
t heq uick brown fo xj ump edo vert helazydog
ascuyoiuawerknbadhcviuahsiduferbfalskdjhvlkcjhaiusdyfajsefbksdbfkalsjcuyasjehflkjhfalksdblhsgdfasudyfekjfalksdjfhlkasefyuiaydskfjashdflkasdhfksd
asc uyoi uawer k nb a dhcviua hsid ufe r bfa lskd jhv lkcj haius dy faj se fbks dbfkals jcuyasjehf lkjh falk sd blhsgdf asudyfekjf alk sdjfhlk asefyu iaydskfja shdflk as dhf ksd
Isso é código-golfe , então a resposta mais curta em bytes vence.
fonte
Respostas:
Gelatina , 28 bytes
Um link monádico pegando uma lista e retornando uma lista de listas.
Experimente online! (o rodapé separa a lista resultante de listas com espaços)
Quão?
Usa todas as porcentagens na distribuição arredondadas para o número inteiro mais próximo (estando dentro dos limites permitidos de 0,69%).
fonte
PHP, 94 bytes
Execute como pipe
-nR
ou experimente online .demolir
Nota:
ywgSKAF:=?
representa as probabidades crescentes -1:[1,15,31,43,51,57,62,66,69,71]
fonte
rand()
todas as comparações? Caso contrário, eu poderia salvar 5 bytes.Run as pipe with -nR
. Ou seja, esse código deve ser um parâmetro para php, não um arquivo. Useecho <input> | php -nR '<code>'
na linha de comando para executar.Oitava, 108 bytes
Experimente online!
* Pega a string como entrada e gera uma matriz de strings.
* O último elemento da saída pode ser uma sequência vazia.
fonte
Python 2,
154150147145 bytesTudo bem, esta é minha primeira tentativa no código de golfe. Direto com o código:
O segundo travessão é por um caractere de tabulação, como você pode ver na minha versão do TIO: Experimente on-line .
O que faço é adicionar um espaço na string de acordo com a distribuição fornecida. Eu mudei minha distribuição usando:
O que me deu:
O que eu acho que está correto o suficiente. Repito então o processo de adicionar um espaço até que o comprimento da minha string seja bem-sucedido. Também incremento meu índice de posição em um após adicionar um espaço. Espero que alguém possa me ajudar a jogar fora essa linha, mas não vi como tirá-la sem falsificar o primeiro espaço.
Ao ver meu texto, reconheço que tenho que aprender muito sobre este site. Alguém poderia me vincular um guia sobre como usar a função de resposta Stackoverflow nos comentários para que eu possa aprender nas minhas próximas postagens.
Editar:
Aparentemente, ao reler minha postagem, descobri uma maneira de me livrar do i + = 1. Então eu salvei 4 bytes fazendo isso. O novo código fica assim:
Experimente online!
Editar:
Eu descobri que posso remover algumas quebras de linha.
Edit: Modifiquei minha importação e coloquei a definição de i dentro da função.
Experimente online!
fonte
Dyalog APL, 90 bytes
Experimente online! Clique em Executar algumas vezes para ver como isso muda.
Quão?
72?⍨≢⍵
- rolar 72 dados de lados dos tempos de entrada[...]
- indexar dentro(2 14 16 12 8,⌽1+⍳5)\⍳10
- expanda o intervalo de 10 em2 14 16 12 8 6 5 4 3 2
(para criar aleatório ponderado)+\
- soma cumulativa⍉2(1-⍨≢⍵)⍴
- forma como uma mesa compactadax y z
→z x, x y, y z
o←1↓
- solte o primeiro elemento(↓(o[1;2]),0),↓o
- encase com sua primeira coordenada emparelhada com 0¨
- para cada par (x, y)(2⊃⍵)↓k↑⍨⊃⍵
- recebe entrada do índice x para y' '~⍨
- e remover espaçosfonte
Python 2 , 155 bytes
Experimente online!
fonte
Mathematica, 164 bytes
pega uma string quando a entrada
gera uma matriz de strings
fonte
Carvão ,
4339 bytesExperimente online! Link é a versão detalhada do código. Gera um espaço à direita se a última palavra tiver o tamanho exato escolhido aleatoriamente.
fonte
Assign(Slice(q, i), q);
.Perl 5 , 107 bytes
Experimente online!
106 bytes de código +1 para -p
fonte
Ruby , 96 + 1 = 97 bytes
Usa a
-p
bandeira.Experimente online!
fonte
> <> ,
168152 bytesExperimente online ou assista no playground de peixes !
A aleatoriedade é complicada em> <>: existe apenas uma instrução aleatória
x
, que define a direção do peixe para cima, baixo, esquerda ou direita. Este é um programa complicado, então aqui está um diagrama com código de cores para ajudá-lo:Tentei dividir as probabilidades em partes para que as probabilidades dentro e entre as partes fossem bastante simples (preferindo, digamos, 1/3 a 25/72). Eu fiz isso da seguinte maneira:
O peixe começa no bit cinza do código ( X ). Este é um código> <> bastante padrão para ler todas as entradas. Fica mais interessante, então vamos seguir em frente.
Em seguida, o peixe chega às seções verde clara e escura ( Y ). Você pode notar na árvore de probabilidade que as três ramificações principais somam 1/3 e que cada uma dessas ramificações se divide em uma sub-ramificação 2/3 e uma sub-ramificação 1/3. As seções verdes do código cobrem esses dois níveis da árvore. Primeiro, escolhemos um número aleatório de 0, 1, 2 com a mesma chance de cada um, no lobo superior do bit verde claro. Podemos simular uma chance de 1/3 usando a instrução de quatro direções
x
cortando uma das saídas para que ele apenas redirecione o peixe de volta para ox
- então existem apenas três rotas de fuga dox
, e por simetria elas têm probabilidades iguais.O próximo
x
, um pouco abaixo deste, envia o peixe para o^
próximo a ele com 2/3 de chance - observe que o peixe gira em torno se nadar saindo dax
- e desce para um\
com chance de 1/3. O peixe então nada ao longo de uma das duas caudas da seção verde-clara. Essas caudas são funcionalmente iguais: cada uma verifica se pressionamos 0, 1 ou 2 anteriormente e ramificamos de acordo. E isso completa os dois primeiros níveis da árvore.As próximas seis seções ( A - F ), em essência, usam mais
x
s para ramificar ainda mais o peixe e, em seguida, usam algum número deo
s para imprimir várias letras da entrada. Essas seções variam de simples (por exemplo, azul escuro, C , que imprime apenas três letras) a, bem, não tão simples (por exemplo, laranja, D , que precisa de doisx
s para simular uma divisão de 3 / 8–5 / 8, imprimindo letras em estágios múltiplos). Os detalhes destes são deixados como um exercício. (Estou particularmente satisfeito com o amarelo, E , que envia o peixe em um loop-the-loop!)Após cada um desses galhos, o peixe finalmente atinge a seção rosa ( Z ). Isso reúne todos os galhos, imprime um espaço e, finalmente, faz o peixe pular para a posição (2,2) na grade e começar de novo no primeiro
x
.Caso a explicação "complicada" acima não o convença de que isso fornece as probabilidades corretas, eu também a testei em uma string de entrada com 65.000 caracteres (64 KiB, apenas 13 segundos no TIO!) E a distribuição resultante dos comprimentos das palavras foi
Essas probabilidades estão no máximo 0,0044 das probabilidades esperadas.
fonte