Acabei de ter uma conversa "animada" com um colega de trabalho sobre a sucessão da seguinte declaração do BASIC:
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
É o título deste livro e simplesmente imprimirá uma sequência de /
e \
caracteres, alternando entre os dois aleatoriamente, resultando em um padrão semelhante a este:
(Imagem emprestada de http://www.flickr.com/photos/rndmcnlly/5058442151/sizes/o/in/photostream/ )
Sendo uma propensão ao PHP, imaginamos qual seria a maneira mais compacta de escrever a mesma coisa no PHP, e criamos o seguinte:
while(1) { echo chr(47 + 45 * rand(0,1)); }
chr(47)
é um /
personagem e chr (92) é a \
. Portanto, a afirmação echo chr(47 + 45 * rand(0,1));
alternará aleatoriamente entre os dois, ad nauseum.
Em um idioma de sua escolha, escreva o programa ou função mais curto para gerar uma sequência aleatória infinita de \
e /
caracteres, em que cada caractere tem a mesma probabilidade de ser escolhido.
{}
aparelho, mas isso é o mais conciso possível.Respostas:
O
goto
operador foi adicionado ao PHP a partir da versão 5.3.0 para que você pudesse usar o mesmo método usado no BASIC:fonte
Como isso foi migrado para o codegolf ...
PHP 30 bytes
O
Ð
caractere é 208 e o£
caractere é 163.Exemplo de uso (em uma caixa do Windows):
Produz algo semelhante a:
Funciona melhor com uma fonte monoespaçada exatamente quadrada (aqui eu escolhi a fonte padrão do sistema 8x8). Para voltar à sua cor padrão, você pode digitar
color
novamente sem nenhum parâmetro.fonte
rand()%2
(ninguém disse como pseudo-aleatório que tinha que ser) - também não funciona em terminais Unicode (como OSX)rand()%2
alternará entre zero e um.mt_rand()%2
funcionaria, no entanto.Mathematica 157 bytes
Na falta de PETSCII, rolei meus próprios "\" e "/".
Nenhum charuto por brevidade aqui.
fonte
Brainfuck - 534
Meu prng ( daqui ) é grande e extremamente lento. Talvez um LFSR mais simples ou similar seja suficiente, mas isso funciona:
fonte
C, 39 caracteres (38 em MSVC)
Veja-o correr.
Em MSVC, podemos substituir
putchar()
com_putch()
e salvar um byte, mas ele não funciona em IDEOne.fonte
Lisp comum, 33
fonte
print
tem um valor de retorno 1, portanto, se você usar isso, poderá apenas envolver toda a expressão nowhile
:while(print chr(47 + 45 * rand(0,1));
Você provavelmente também pode jogar golfe.
fonte
rubi,
2723 caracteres$><<
é 'print to stdout'.fonte
"/\\"
por'\/'
. O Ruby 1.8 requer[rand(2),1]
a produção do caractere em vez do código ascii.C ++, 45 caracteres
Não vou ganhar nenhum prêmio por falta, mas eu já tinha escrito isso quando soube do livro mencionado, então apenas joguei no golfe.
O truque putchar também funciona em C ++, diminuindo para 43, mas você não pode evitar declarar o tipo de retorno em main.
fonte
eu tento criar usando o estilo css, e é trabalho
este código php:
fonte
font-family: courier; line-height: 0.75em; letter-spacing: -0.25em;
Usando-0.25em
a letter-spacing parece corresponder-se melhor do que-3px
, que tem artefatos devido a um inexatapt
apx
conversão.Lisp comum - 68
fonte
do
.05AB1E , 7 bytes
Experimente online!
fonte
Befunge-98 (PyFunge) , 7 bytes
Experimente online!
o
?
envia o IP a esquerda ou direita, por isso ou/
ou\
é empurrado antes de imprimir com,
. Ao executar o'/
ou\'
na ordem errada após a impressão, ele faz as coisas na pilha (divide ou troca) e, em seguida, envia um caracter irrelevante antes de repetir.fonte
Befunge,
12987 BytesEditar: James Holderness descobriu uma solução insana que usa três citações.
Transborda a pilha com muitos caracteres em excesso para cada símbolo, mas quem se importa quando você pode jogar golfe com 1 byte?
Versão antiga
(Observe o espaço à direita)direita aparentemente não necessário (obrigado Mistah Figgins)Experimente Online
Isso começa a encher a pilha, com um símbolo extra para cada símbolo impresso.
fonte
#
no final de uma linha. É um comportamento não é consistente, mas o intérprete que você está usando permite que ele: tio.run/##S0pNK81LT/3/X0k/RsneTkf5/38A"
, mas minhas tentativas foram inúteis. Como você precisa de um/
dos lados"
, terá que dividir metade do tempo.<
após#
para fazer o trabalho.'
. Experimente online!?\","/"
A única desvantagem é que ela transbordará muito mais rápido, eu acho.Não muito melhor. Precisa do php 5.5+ para o recurso de desreferenciamento de array.
fonte
while(1)echo'/\\'[rand(0,1)];
.Python, 68
Na categoria "minha linguagem é péssima nessa", temos o Python!
Agradecimentos a Ivo por alguns caracteres sobre importações e
choice
.fonte
> <> , 14 bytes
Eu esperava poder restringi-lo a um quadrado 3 * 3, mas não obtive sucesso.
Você pode tentar aqui .
fonte
Cubix , 12 bytes
Veja no intérprete online!
Isso mapeia a seguinte rede de cubos:
Explicação
Configuração:
O IP começa a ir para o leste no primeiro
!
. Este é o comando 'skip if truthy', que é False quando não há nada na pilha; portanto, nenhum comando é ignorado."/\"
insere stringmode e anexa esses dois códigos de caracteres à pilha.B!o
é principalmente um no-op aqui, apenas revertendo a pilha.O IP agora volta ao primeiro
!
. No entanto, agora existem números inteiros positivos na pilha, portanto o primeiro"
é ignorado. Isso significa que/
não é mais um personagem, mas um espelho, enviando o IP para o norte no loop principal.Loop principal:
O
D
comando é a única fonte de aleatoriedade no Cubix. Ele envia o IP em uma direção aleatória. Ao bloquear o sul e o leste com flechas, garantimos que o IP tenha 50% de chance de ir para o norte e 50% de chance de ir para o oeste.Se seguir para oeste, a pilha será revertida. Se seguir para o norte, o caractere superior será impresso.
Isso cria a sequência aleatória de barras, conforme desejado.
fonte
PHP,
2631 bytesoitotrês bytes mais curtos que o seu (sem espaços em branco ou chaves),.dois bytes mais curtos que a solução do primo (sem a tag)
O PHP 5.4.9 era a versão atual em dezembro de 1012, então ...
requer PHP 5.5 ou posterior para indexação literal de strings.Corra com
-r
ou experimente online .fonte
rand()&1
criar um PHP para Windows. Você pode se surpreender.SmileBASIC, 20 bytes
fonte
PowerShell ,
108908654533736 bytesExperimente online!
fonte
for
também tornawhile
um pouco mais curtoJava 8,
60595453 bytes-1 byte graças a @BenjaminUrquhart substituindo
print
porwrite
, então'/'
pode ser47
.Explicação:
Experimente online (o tempo limite termina após 60 s).
fonte
c->{for(;;)System.out.print(Math.random()<.5?'/':92);}
( 54 bytes ) Ou você quis dizer que o Java 7 é mais longo que o Java 8? Nesse caso, você está realmente correto.System.out.write
e substituindo'/'
por47
JavaScript (Node.js) ,
595554 bytesResposta original
-4 bytes graças ao manatwork
-1 byte graças a Conor O'Brien
fonte
while(1)process.stdout.write(Math.random()<.5?"/":"\\")
.for(;;)
em vez dewhile(1)
Eu acho que você pode usar recursão.
Eu acho que você pode usar recursão.
fonte
cortou um caractere:
em seguida, remova as chaves:
outro truque, com o mesmo comprimento:
fonte
rand()%2
resultará em uma alternância de0
s e1
s. Não é incrivelmente aleatório. Você precisaria usarrand(0,1)
ou emmt_rand()%2
vez disso.Perl
Este parece engraçado para mim:
(Desculpe por estar fora de assunto aqui. Eu sei que isso não é PHP)
fonte
PowerShell, 37 bytes
infelizmente, parece não haver aliases mais curtos para Write-Host que não causam uma nova linha após cada caractere.
fonte
Código de montagem x86 de 16 bits, 10 bytes
Não me lembro se este acabou no livro.
fonte
Fissão , 12 bytes
Experimente online!
fonte
Perl 6 , 23 bytes
loop
laços para sempre.<\ />
é uma lista das strings\
e/
..pick
escolhe uma das duas seqüências aleatoriamente..print
imprime essa sequência aleatória.fonte
xx*