Dibuje un programa o función que escriba a STDOUT
n
veces (cada uno para un paso) una cadena que contiene un punto .
en la ubicación del andador. El programa también necesita escribir una línea cada s
segundo (o esperar s
segundos después de cada línea).
Una caminata aleatoria es una formalización matemática de una ruta que consiste en una sucesión de pasos aleatorios ( wiki ), de modo que cada nuevo paso será el último paso más un nuevo valor, por lo que cualquier t
valor de paso es solo la suma de todos los valores aleatorios antes de ir más el valor inicial.
El programa debe tomar 2 entradas y usará solo espacios " "
y puntos "."
en la salida. El valor inicial del andador será 20
tal que la salida debería ser un punto después de 19 espacios.
. #19 spaces then a dot
En cada nuevo paso, el valor será el último valor del caminante más uno de estos [-2-1,0,1,2]
(20% de probabilidad cada uno). Después de que se imprime la nueva posición, el programa debe esperar s
segundos y pasar al siguiente paso. Si el paso lleva al caminante fuera del rango 1 to 40
, simplemente se debe ignorar y la posición del caminante permanece igual. El número de espacios siempre será un número de 0 a 39.
Ejemplo
#input
Mywalk(s = 0.1, n = 30)
#output
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Consideraciones
Puede tomar la entrada como cualquier formato razonable
El código más corto gana
Está bien si su programa solo acepta los segundos como enteros
n
es el número de pasos?1 to 40
, porque el número de espacios es siempreposition-1
.Respuestas:
Pyth, 39
Toma
s
como la primera línea de entrada yn
como la segunda. Funciona en la línea de comando pero no con el intérprete en línea. ¡Mi primer programa Pyth! Consejos de golf son apreciados.fuente
Q
yE
para las dos entradas en lugar de fohQ
yeQ
, si separa la línea, separe las entradas.Matlab, 112
La idea central es generar una lista de las siguientes posiciones posibles y luego dibujar uniformemente una de ellas. Si estamos, por ejemplo, en la posición $ l = 1 $, los posibles pasos serían, por
[-1,0,1,2,3]
supuesto, si eligiéramos-1
eso sería inválido y tendríamos que permanecer en la misma posición. Es por eso que reemplazamos las posiciones inválidas con la posición actual[1,0,1,2,3]
, y luego elegimos aleatoriamente un elemento de esta lista actualizada.La OP nos pidió Tho elaborar el programa, así que aquí vamos:
La transcripción:
fuente
Perl,
1361281161061019086Requiere que los segundos sean un número entero.
Corre con
perl <filename> <second delay> <number of steps>
.Puede haber más potencial de golf aquí, aunque, sinceramente, me sorprende que haya llegado tan lejos. (Vamos, solo 6 bytes más para superar la respuesta bash ...)
Cambios
$s
y$n
ya sólo el uso de la llanura$ARGV[0]
y$ARGV[1]
$"
y no necesitaba definir específicamente$u
como$undef
.$x
se usa y usando enmap
lugar defor
.say
lugar deprint
.fuente
Python 2,
124119 bytes@janrn y @Steve Eckert: no tengo suficiente reputación para comentar su respuesta, pero aquí está esencialmente su versión acortada. La tarea es dibujar un programa o una función , por lo que al usar
f(s,x)
puede guardar bastantes bits, y también puede usarmax(0,min(x,39))
para evitar unaif
cláusula adicional . Lo tengo todo a:fuente
Bash, 81
Editar: si el paso lleva al caminante fuera del rango de 1 a 40, debe ignorarse y la posición del caminante se mantiene igual manejada correctamente.
Entrada de opciones de línea de comandos. P.ej:
fuente
Rubí, 84
fuente
Python 2.7,
198162143133Al llamar al script con
python script.py
, la primera entrada es la cantidad de pasos, la segunda entrada el tiempo entre pasos (acepta flotante o int). ¿Alguna sugerencia para mejorar?Ediciones
print ' '*p+'.'
, gracias a @corsiKlause Ho Ho Ho;
cuando sea posiblep=max(1,min(p+r.randint(-2,2),40))
(no puedo comentar tu respuesta también, pero gracias; no quiero copiarla por completo)fuente
' '*p
a repetir la cadena?Procesamiento,
150147Uso:
Nota:
1000
no se puede cambiar1e3
por razones de tipo.fuente
Lua, 140 bytes
Nota: Este programa requiere el paquete LuaSocket.
fuente
Perl 6 , 92 bytes
Uso:
fuente
JavaScript (ES6), 125 bytes
Explicación
Prueba
Mostrar fragmento de código
fuente
k4, 61 caracteres
ejecución de muestra:
fuente
Mathematica,
122117 bytesFunción anónima recursiva, toma la entrada en el orden especificado. Probablemente podría jugar más golf.
fuente
Python 3, 154 bytes
Genere una cadena de espacios mayor que la longitud máxima requerida, luego imprima esa cadena SOLAMENTE hasta el carácter en el índice 'g', luego imprima un '.'. Termine incrementando g en un valor aleatorio en el rango [-2: 2] y repita.
Si alguien pudiera ayudarme a bajar ese horrible bloque de entrada, lo agradecería.
fuente
sys.argv
?while z:
, ¿por qué no usarfor i in range(1,z)
?sys.argv
y la importación, no puedo ver cómo puedo guardar los bytes haciendo eso. E incluso con las líneas adicionales para declararc
luego decrementarc
yz
, según mi cuenta, todavía es más barato hacerlo de esta manera.Función C, 114
Casi una traducción directa de mi respuesta bash .
Programa de prueba completo:
fuente