Inspirado neste mini-desafio de bate-papo.
Dada uma sequência como entrada (somente caracteres imprimíveis ASCII), imprima a sequência com as letras "chovendo". Cada letra deve ser um número aleatório de linhas para baixo (aleatório entre 0
e o comprimento da sequência, cada uma com probabilidade diferente de zero) e apenas um caractere por coluna. Todas as saídas possíveis devem ter novamente uma probabilidade diferente de zero.
Talvez isso seja um pouco confuso, então aqui está um exemplo (retirado desse CMC):
Hello World
d
H
o
llo
l
W
e
r
Observe como o H
espaço é um abaixo, o d
zero é baixo e llo
tudo acontece na linha. O r
é o mais distante 9
, mas ainda é menor que o comprimento da corda do topo. Este é apenas um exemplo, existem dezenas de outras possibilidades de entrada Hello World
.
Outros exemplos podem ser:
test
t
e
s
t
PP&CG
& G
P
P C
- A entrada e a saída podem ser fornecidas por qualquer método conveniente .
- A entrada é garantida como não vazia (ou seja, você nunca receberá
""
como entrada). - Você pode imprimi-lo em STDOUT ou retorná-lo como resultado de uma função.
- Um programa completo ou uma função são aceitáveis.
- Qualquer quantidade de espaço em branco estranho é aceitável, desde que os caracteres sejam alinhados adequadamente (por exemplo, fique à vontade para preencher como um retângulo).
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
Respostas:
R , 104 bytes
Experimente online!
Entrada como uma string; escreve para stdout.
fonte
scan(,'')
e aninhando um monte de chamadas, mas sinceramente eu prefiro muito a abordagem de funções, essa outra é hedionda para ganho mínimo. Pode desencadear algumas idéias, no entanto. Experimente online!sample(l,,T)
é suficiente em vez desample(l,l,T)
(-1 byte).JavaScript (ES6), 72 bytes
Recebe a entrada como uma lista de caracteres. Retorna uma matriz de caracteres.
Experimente online!
fonte
(0|'A') === (0|undefined)
e as letras restantes não teriam mais garantia de aparecer na última linha. (Então, basicamente, é como se|!a[y+1]
fosse completamente removido.)Math.random()
retorna um número em [0, 1), então não poderia seMath.random()<.5
tornarMath.random()>0
?math.random()
implementação que possui um estado interno e, portanto, não pode gerar uma saída exclusiva.Pitão - 9 bytes
Lista de linhas de saída.
Experimente online .
fonte
J ,
3019 bytesExperimente online!
fonte
0|:]{.~"+_1-#?#
para 15 bytes0|:]{.~"+_2-#?@##
por 17 bytes sem alterar o comportamento da sua resposta.Japonês , 8 bytes
-1 byte de @Shaggy
Experimente online!
fonte
APL (Dyalog Unicode) , 16 bytes SBCS
Função de prefixo tácito anônimo
≢
comprimento da corda1+
um adicionado a isso≢⍴
cópias "longas" desse∘?
números inteiros aleatórios no intervalo 1… aqueles e depois…∘-
negar e depois ...⊢↑¨⍨
pegue muitos elementos de cada personagem, preenchendo a esquerda com espaços∘↑
misture a lista de strings em matriz, preenchendo com espaços à direita⍉
transporExperimente online!
fonte
Japonês , 8 bytes
Tente
fonte
Gelatina , 10 bytes
Experimente online!
fonte
0..(length - 1)
? A pergunta especifica entre 0 e o comprimento da string. Ou eu estou esquecendo de alguma coisa?Ruby ,
595755 bytesExperimente online!
Entradas 1D, gera uma matriz 2D de caracteres.
fonte
PHP , 88 bytes
Experimente online!
Ou 94 bytes usando PHP função de números inteiros aleatórios criptográficos .
Experimente online!
Entrada de
STDIN
, saída paraSTDOUT
. Correr como:-1 byte (string vazia em vez de espaço) e +1 byte (erro no lado das regras) thx para @ somente ASCII!
fonte
<?php
que?>
fecha. também parece que é bom se$o
for a string vaziarand
função PHP , pois você pode ter um texto de entrada que exija mais aleatoriamente que o tamanho da fonte interna. o seed rand usa, então tecnicamente sua resposta falha em satisfazer essa condição em todas as situaçõesrand
não é útil para muitos, no entanto, todas as versões suportadas / de produção do PHP (7.1+) usam o Mersenne Twister RND (mt_rand
) internamente para uma geração aleatória de números. Você está preocupado que isso não seja suficientemente aleatório para esse desafio?mt_rand
também usa internamente um sistema de números pseudo-aleatórios e também possui limitações. Supondo que o PHP seja compilado com números de 64 bits (e que a semente, usada pararand
oumt_rand
aceite esse intervalo completo), geraria saídas exclusivas para palavras com até 13 caracteres ou menos. Bastante limitante se você me perguntarCarvão ,
109 bytesExperimente online!Link é a versão detalhada do código. Editar: salvou 1 byte graças a @ ASCII-only. Explicação:
Como aponta apenas ASCII, você pode mover as letras aleatoriamente para cima em vez de para baixo para o mesmo efeito (exceto que pode haver espaço em branco extra na parte inferior, em vez da parte superior). Imprimir uma matriz de caracteres para cima é equivalente a imprimir uma sequência normalmente; portanto, o preenchimento compensa cada caractere verticalmente de forma aleatória.
fonte
05AB1E (herdado) , 9 bytes
Insira como uma sequência ou lista de caracteres (está correto).
Experimente online.
Alternativa de 9 bytes muito mais lenta:
Insira como uma lista de caracteres.
Experimente online.
Ambos usam a versão herdada de 05AB1E, pois a nova versão requer um explícito
€S
antes doζ
..Explicação:
fonte
gD¸s∍ÝδΩ
como, mas é mais longo ... e ooo ... isso nem funciona no novo 05AB1E;).C (gcc) , 131 bytes
Experimente online!
fonte
R[j=i%l]?32:s[j]));
vez deR[j]?32:s[j]))j=i%l;
Julia, 69 bytes
Isso define uma função
f
que aceita aString
ouVector{Char}
e retorna umaMatrix{Char}
.Ungolfed:
Exemplo:
Isso certamente poderia ser melhor; minhas habilidades no golfe são bastante enferrujadas.
Experimente online!
fonte
Perl 5
-F
,5049 bytes-1 por @DomHastings
Experimente online!
fonte
map$_||$",@$_
!PowerShell ,
10810298 bytes-4 bytes graças ao mazzy
Experimente online!
Basicamente, itera
1..length
a string duas vezes, uma vez para obter localizações aleatórias de linhas para cada caractere e uma segunda vez para realmente construir cada linha usando esses índices. Descobrir como fazer isso de uma só vez é onde estão as grandes economias de bytes.fonte
SmileBASIC 3, 62 bytes
fonte
Vermelho , 84 bytes
Experimente online!
fonte
Python - 92 bytes
fonte
import random
from random import*
.map(None,...
que não funciona no Python 3, então você deve especificar o Python 2 no seu título.K (oK) , 20 bytes
Solução:
Experimente online!
Explicação:
fonte
Python 3 ,
140131 bytesExperimente online!
fonte
Python 3, 208 bytes
Cria uma lista de opções aleatórias e, em seguida, cria uma lista de colunas com espaço em branco em todos os lugares, exceto no índice especificado por cada escolha aleatória. As colunas são transpostas em linhas e impressas com novas linhas entre elas.
Experimente online!
fonte