Desenhe um programa ou função que escreva às STDOUT
n
vezes (cada uma para uma etapa) uma sequência que contenha um ponto .
no local do caminhante. O programa também precisa escrever uma linha a cada s
segundo (ou esperar s
segundos após cada linha).
Uma caminhada aleatória é uma formalização matemática de um caminho que consiste em uma sucessão de etapas aleatórias ( wiki ), de modo que cada nova etapa será a última etapa mais um novo valor, portanto, qualquer t
valor de etapa é apenas a soma de todos os valores aleatórios antes de ir mais o valor inicial.
O programa deve receber 2 entradas e usará apenas espaços " "
e pontos "."
na saída. O valor inicial do andador será 20
tal que a saída deve ser um ponto após 19 espaços.
. #19 spaces then a dot
A cada nova etapa, o valor será o último valor do caminhante mais um deles [-2-1,0,1,2]
(20% de chance cada). Após a impressão da nova posição, o programa deve aguardar s
segundos e avançar para a próxima etapa. Se a etapa levar o andador fora do alcance, 1 to 40
ele deve ser ignorado e a posição do caminhante permanece a mesma. O número de espaços sempre será um número de 0 a 39.
Exemplo
#input
Mywalk(s = 0.1, n = 30)
#output
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Considerações
Você pode considerar a entrada como qualquer formato razoável
O código mais curto vence
Tudo bem se o seu programa aceitar apenas os segundos como números inteiros
n
é o número de etapas?1 to 40
, porque o número de espaços é sempreposition-1
.Respostas:
Pyth, 39
Toma
s
como a primeira linha de entrada en
como a segunda. Funciona na linha de comando, mas não com o intérprete online. Meu primeiro programa Pyth de todos os tempos! Dicas de golfe são apreciadas.fonte
Q
eE
para as duas entradas em vez de fohQ
eeQ
, se você separar as entradas de uma nova linha.Matlab, 112
A idéia central é gerar uma lista de possíveis próximas posições e depois desenhar uniformemente uma delas. Se estivermos, por exemplo, na posição $ l = 1 $, as etapas possíveis seriam
[-1,0,1,2,3]
Obviamente, se escolhermos-1
que seria inválido e teríamos que permanecer na mesma posição. É por isso que substituímos as posições inválidas pela posição atual[1,0,1,2,3]
e, em seguida, escolhemos aleatoriamente um elemento dessa lista atualizada.O OP nos pediu para desenhar o programa, então vamos lá:
A transcrição:
fonte
Perl,
1361281161061019086Requer que os segundos sejam um número inteiro.
Corra com
perl <filename> <second delay> <number of steps>
.Pode haver mais potencial de golfe aqui, embora, honestamente, estou surpreso que tenha chegado tão longe. (Vamos lá, apenas mais 6 bytes para vencer a resposta do bash ...)
Alterar
$s
e$n
usando apenas a planície$ARGV[0]
e$ARGV[1]
$"
e não precisava definir especificamente$u
como$undef
.$x
é usado e usando emmap
vez defor
.say
vez deprint
.fonte
Python 2,
124119 bytes@janrn e @Steve Eckert: não tenho reputação suficiente para comentar sua resposta, mas aqui está sua versão resumida. A tarefa é desenhar um programa ou uma função ; portanto,
f(s,x)
você pode salvar alguns bits e tambémmax(0,min(x,39))
evitar umaif
cláusula extra . Resolvi:fonte
Bash, 81
Editar: Se a etapa levar o andador para fora do intervalo de 1 a 40, ele deverá ser ignorado e a posição do andador permanecerá a mesma manipulada corretamente.
Entrada de opções de linha de comando. Por exemplo:
fonte
Ruby, 84
fonte
Python 2.7,
198162143133Ao chamar o script
python script.py
, a primeira entrada é a quantidade de etapas; a segunda entrada, o tempo entre as etapas (aceita float ou int). Alguma sugestão para melhorar?Edições
print ' '*p+'.'
, graças a @corsiKlause Ho Ho Ho;
que possívelp=max(1,min(p+r.randint(-2,2),40))
(não posso comentar sua resposta também, mas obrigado; não quero copiá-la completamente)fonte
' '*p
repetir a string?Processamento,
150147Uso:
Nota:
1000
não pode ser alterado para1e3
por motivos de tipo.fonte
Lua, 140 bytes
Nota: Este programa requer o pacote LuaSocket.
fonte
Perl 6 , 92 bytes
Uso:
fonte
JavaScript (ES6), 125 bytes
Explicação
Teste
Mostrar snippet de código
fonte
k4, 61 caracteres
amostra de execução:
fonte
Mathematica,
122117 bytesFunção anônima recursiva, recebe entrada na ordem especificada. Provavelmente poderia ser jogado ainda mais.
fonte
Python 3, 154 bytes
Gere uma sequência de espaços maior que o comprimento máximo necessário, imprima APENAS essa sequência até o caractere no índice 'g' e, em seguida, imprima um '.'. Finalize incrementando g por um valor aleatório no intervalo [-2: 2] e repita.
Se alguém pudesse me ajudar a jogar golfe naquele bloco horrível de entrada, eu agradeceria.
fonte
sys.argv
?while z:
, por que não usarfor i in range(1,z)
?sys.argv
e a importação, não consigo ver como posso salvar os bytes fazendo isso. E mesmo com as linhas extras para declararc
depois decréscimoc
ez
, ainda é mais barato do que fazê-lo desta forma, pelas minhas contas.Função C, 114
Praticamente uma tradução direta da minha resposta bash .
Programa de teste completo:
fonte