<jupyter_start><jupyter_text>Programa de Estudios Superiores 2019-2020 Programación I - proyecto final Elaborado por  ***Inserta tu nombre en este espacio*** ******Instrucciones generales:*** resuelve el siguiente problema de acuerdo a la especificación dada. - El código debe ir comentado para explicar la lógica y debe ser totalmente funcional para ser considerado correcto. De lo contrario, la calificación podrá ser subjetiva.- Al final de la definición de la clase, obtenga una instancia y muestra que el objeto se comporta de acuerdo a las especificaciones deseadas, para poder calificarte más rápidamente.***  *Drunken robot*Considere un robot que sigue una caminata aleatoria dentro de una cuadícula unidimensional, como se muestra a continuación. En cada período, el robot se mueve aleatoriamente hacia la izquierda o hacia la derecha (siempre y cuando sea posible), para ocupar una casilla diferente. Cuando el robot ocupa una casilla, esta casilla se marca de color amarillo.  ![grid-robot.png](attachment:grid-robot.png)Un amigo suyo, economista, cree que este proceso estocástico puede ayudarle a entender un problema de reversión a la media de una serie de tiempo con la que está teniendo problemas recientemente, por lo que le interesa el problema de este robot. Para esto, su amigo necesita entender cuántos períodos le puede tomar a este robot marcar toda la cuadrícula de color amarillo. Entonces, le ha pedido ayuda a usted para que le ayude con algunas simulaciones.Usted ha llevado recientemente un curso de programación y pretende resolver este problema a través de la implementación de una clase de Python.  Descripción de la claseUsted va a implementar la simulación a través de la clase `DrunkenRobot` de la siguiente forma:- Al crear un objeto de esta clase, el constructor debe recibir la cantidad $n$ de casillas para crear la cuadrícula y posicionará al robot en una de estas casillas de forma aleatoria.Además, deberá implementar los siguientes métodos:- Método `takeStep` que lleve a cabo un paso del robot y marque la nueva casilla como visitada. El robot debe llevar un registro de todos los pasos que ha tomado y en qué período lo ha hecho.- `conquerAll` que utilice el método `takeStep` para mover el robot hasta visitar toda la cuadrícula.- `plotSteps` que haga una gráfica de la posición del robot (número de casilla) en cada período. Debe llamarse posterior a la ejecución de `conquerAll`.    - Deberá agregar una opción booleana `savePlot` para escoger si guardar la gráfica en un formato de alta calidad.- `getTrajectory` que devolverá un `DataFrame` de pandas con la posición del robot en cada período. Debe llamarse posterior a la ejecución de `conquerAll`.- **Extra**: `getCumulativeTrajectory` que devolverá un `DataFrame` de pandas con el número de casillas visitadas en cada período. Importe los paquetes que sean necesarios:<jupyter_code>import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd<jupyter_output><empty_output><jupyter_text>Escriba su código en la celda siguiente:<jupyter_code>class DrunkenRobot:
    ''' 
        Recibe la cantidad de casillas n de la cuadrícula y 
        posiciona aleatoriamente al robot.
    '''
    def __init__(self, n):
        pass
    
    '''
        Lleva a cabo un paso del robot y marca la nueva casilla 
        como visitada. El robot debe llevar un registro de todos
        los pasos que ha tomado y en qué período lo ha hecho.
    '''
    def takeStep(self):
        pass
    
    '''
        Utiliza el método `takeStep` para mover el robot hasta 
        visitar toda la cuadrícula.
    '''
    def conquerAll(self):
        pass
    
    '''
        Realiza una gráfica de la posición del robot (número de casilla)
        en cada período. La opción booleana `savePlot` permite
        escoger si guardar la gráfica en un formato de alta calidad.
    '''
    def plotSteps(self, savePlot=False):
        pass
    
    '''
        Devuelve un `DataFrame` de pandas con la posición del 
        robot en cada período.
    '''
    def getTrajectory(self):
        pass
    
    '''
        EXTRA.
        Devuelve un `DataFrame` de pandas con el número de 
        casillas visitadas en cada período.
    '''
    def getCumulativeTrajectory(self):
        pass<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.049074074074074076, 'fraction_numerical': 0.001851851851851852, 'mean_word_length': 3.626338329764454, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '331053', 'license': 'MIT', 'n_tokens_mistral': 1313, 'n_tokens_neox': 1329, 'n_words': 595, 'path': 'ejercicios-tareas-proyectos/proyectos-final/proyecto-final/grid-robot/grid-robot.ipynb', 'repo_name': 'r2cp/PES-Programacion-I', 'size': '4320'}