Coding Challenge

Autor: Ingrid Pamela Ruiz Puga
26 Septiembre 2020

Ejercicio 1

Usted tiene un algoritmo que estima, dado un instante de tiempo ??t1, la variación de precio que tendrá una acción en la bolsa en los instantes ??t siguientes. 
Una vez que corre el algoritmo recibe una sucesión de variaciones de precio. Un valor de +3 significa que el precio tendrá un incremento de 3 unidades monetarias, un valor de -5 significa que el precio decrece en 5 unidades monetarias. Empezando con un precio de $0, ¿cuál será el precio resultante de la acción después de que ocurran todas las variaciones?
## [1] 1328.894

Ejercicio 2

Usted recuerda que un supuesto fuerte del análisis técnico de acciones es, palabras más palabras menos, que la historia siempre se repite. Por lo cual como parte de su estrategia, y esperando tener cierta ventaja sobre el resto del mercado, se ve interesado en encontrar el primer precio que ocurre dos veces si las variaciones que obtuvo se repiten todo el tiempo.

Por ejemplo si las variaciones fueran c(+1,-2,+3,+1), se tendría:

Precio actual: 0; variación de +1; precio resultante: 1

Precio actual: 1; variación de -2; precio resultante: -1

Precio actual: -1; variación de +3; precio resultante: 2

Precio actual: 2; variación de +1; precio resultante: 3

aquí se vuelve a iniciar con la lista de variaciones (la historia siempre se repite)

Precio actual: 3; variación de +1; precio resultante: 4

Precio actual: 4; variación de -2; precio resultante: 2

aquí se detiene el algoritmo pues el precio resultante igual a 2 ya fue observado

¿Cuál es primer precio que ocurre dos veces dada esta lista de variaciones?

Note que la lista de variaciones puede repetirse a si misma muchas veces antes de encontrar el precio duplicado; además, el precio duplicado debe ser encontrado en medio del proceso de búsqueda y detenerlo.

El resultado es: 124645

Ejercicio 3

Si hacemos una lista de los números naturales menores a 10 que son multiplos de 3 o 5 obtendremos  c(3, 5, 6, 9), la suma de esos multiplos es 23.

Encuentre la suma de todos los multiplos de 3 o 5 menores a 1000.
## [1] 234168

Ejercicio 4

Usted trabaja en un casino donde existe el siguiente juego: un jugador lanza tres dados y gana 20 pesos por cada 6 que aparece, el costo de jugar es de 10 pesos.

Escriba una función que simule el juego y regrese la cantidad que se gana en cada juego i.e. ganancia - costo. Calcule la media y varianza al simular 100, 1000 y 10000 juegos. Explique sus hallazgos al dueño del casino.

Adapte su función para que tome los argumentos: numero de juegos, dinero inicial,  costo del juego, apuesta del juego y que devuelva una lista con:

Un data frame que tenga como columnas: la ganancia del i-ésimo juego y la ganancia acumulada hasta el juego i

Un grafico de la ganancia acumulada

Explore y explique las siguientes combinaciones para dinero inicial, costo del juego,  apuesta del juego: (10,10,10), (10,2,5), (100, 10, 20), (1000, 5, 10). Explique.

Ejercicio 5

El algoritmo de Luhn es muy popular en la validación de números de tarjetas de crédito/débito y funciona de la siguiente manera:

Empezando por la derecha, duplicar el valor de cada dígito cuya posición sea par.

Si al duplicar un número del paso anterior obtenemos un número de dos dígitos entonces sumamos esos digitos para obtener un número de un digito (12 -> 1+2 -> 3)

Sumamos todos los dígitos

Si el resultado es multiplo de 10 entonces el número es válido.

Implemente el algorítmo en una función y verifique la validéz de estos números de tarjeta.

¿Qué validaciones considera necesarias hacer al número antes de aplicar el algorítmo de Luhn? Implementelas en su función.

Nota: Los número válidos corresponden a tarjetas que el servició de desarrollo de paypal provee para pruebas.

Ejercicio 6

Un banco ha decidido poner a prueba su sistema de atención en sucursal.

Cuando los clientes llegan a la sucursal registran en un dispositivo electrónico la actividad que van a realizar, este dispositivo asigna a cada cliente el tiempo necesario para completarla.

Escriba una función que calcule el tiempo necesario para atender a todos los clientes de una fila dada.

La función debe recibir un vector de tiempos (representando la fila) y un entero representando la cantidad de cajas abiertas para atender la fila.

Considere que solo hay una fila y la persona de adelante se dirije a la caja tan pronto esta se desocupa.

Si por ejemplo tenemos la fila 5, 3, 4, es decir, una fila de tres clientes donde el primero tarda cinco minutos, el segundo tres y el tercero cuatro; y en ese momento hay una sola caja abierta entonces el tiempo requerido para atender la fila es de 12.

Si tenemos la fila 10, 2, 3, 3 y en ese momento hay 2 cajas abiertas entonces el tiempo total de atención es de 10 (como hay dos cajas la primera atiende la persona 1 al mismo tiempo que las personas 2, 3, y 4 son atendidas por la caja dos)

Si tenemos la fila 2, 3, 10 y hay 2 cajas abiertas, el tiempo total de atención es de 12.

Haremos una función que le ingresemos un vector con los tiempos que utilicen los clientes para ser atendidos y el número de cajas disponibles en la sucucrsal del banco.

Calcularemos del número de clientes que pueden ser atendidos a la vez, quien tiene un menor tiempo de ser atendido, para ser restado por ser el “tiempo transcurrido”. Dado que al restar el menor número obtendremos una caja vacia la llenaremos de nuevo.

## [1] 12

Ejercicio 7

Uno de sus amigos le ha pedido asesoría pues quiere invertir una cantidad de dinero que ha estado ahorrando sin embargo le gustaría saber cuánto tiempo tiene que dejar su dinero en el instrumento para poder alcanzar cierta suma deseada.

Escriba una función que tome como paramétros el dinero inicial, la tasa de interés, la tasa de impuestos y la suma que se desea alcanzar y que devuelva el tiempo que se necesita dejar en el instrumento.

Considere que la tasa de interés se paga anualmente y que los impuestos se pagan sobre el interés ganado.

Por ejemplo si la cantidad inicial es de $1000, la taa de interés es de 0.05, la tasa de impuestos es de 0.18 y la suma que se desea alcanzar es 1100, entonces el tiempo que su amigo debe dejar el dinero en el instrumento es 3 años.

¿Cómo modificaría esta función si su amigo le dice que además de la cantidad ahorrada está dispuesto a invertir otra cantidad variable cada año?

Reflexione en qué es lo que tendría hacer para que su amigo pueda usar su función de una forma amigable.

Condicionaremos nuestra función a que el principal invertido sea menor que el monto, ya que estamos invirtiendo anualmento obtendremos el año para el cual el cliente ya tenga el monto deseado e incluso uno mayor al no poder interrumpir la inversión en fracción de año.

## [1] 3

Para considerar el ahorro que la persona puede incrementar anualimente podemos considerar un vector donde la primer entrada es 0 puesto que ya aporto el principal y el resto de los elementos serán los horros que vaya incrementando por año. Es decir, ahorro=(0,10, 5. 6) donde incrementa 10 el primer año. 5 el posterior, etc. Por lo que cada iteación nos devolverá el principal mas su incremento total en cada año.

Se podría proponer la siguiente función

Ejercicio 8


Piense en una actividad cotidiana que potencialmente pueda automatizar o bien una para la cual quiera aplicar alguna técnica de analytics/data science.

Diseñe brevemente el plan de implementación.

-¿En que parte del proceso usaria R y para qué?

-¿Qué paquetes hay disponibles para poder llevar realizar la tarea?

-¿Qué impacto tendría el automatizar o aplicar analytics/data science a esa tarea?

-¿Quién(es) sería(n) el (los) usuario(s) final(es) de su trabajo?, ¿qué tendría que hacer para que su trabajo tenga un alcance inmediato/sencillo/amigable?

Existen profesores que al tener una gran cantidad de alumnos resulta complicado identificar el tipo de alumnos inscritos en su curso debido al amplio número de inscripciones asi como resulta complicado obtener sus datos de contacto, materias cursadas e intereses de la base de datos general de la escuela o faculad a la que pertenecen. Por lo que puede resultar una labor complicada investigar a cada alumno.

Es posible utilizar un lenguaje de programación para consultar de la base de datos la información necesaria para poder almacerarla en un archivo organizado con los datos requeridos de todos lo alumnos del profesor. Al involucrar una base de datos tan grande estariamos resolviendo un problema que involucra una cantidad masiva de datos.

Podría resultar eficaz utilizar la paqueteria library(sqldf) para realizar las consultas y algunas paqueterias de analisis para determinar el tipo de estudiantes que tiene el profesor.

Lo deseable es realizar un programa en el cual le sea posible al usuario ingresar el nombre o número de cuenta del alumno para que automaticamente busque la información y la almacne en la lista del profesor que será analizada.

Al obtener datos relevantes para analizar el tipo de alumnado con el que cuenta el profesor, le permitirá realizar actividades e incluir temas que satisfagan las necesidades e intereses del alumnado. Convirtiendo el curso más interesante para los alumnos.

El principal usuario seria el profesor quien con e conocimiento del tipo de alumnado implementara estrategias y actividades adecuadas a sus habilidades, capacidades e intereses. Quien deseablemente solo tendria que alimentar la base de datos del programa introduciendo los nombres y después comprendiendo el analisis hecho por el programa.

Este caso se puede extender a cualquier población objetivo, tal que el alumnado pueden ser clientes y el profesor un vendedor que necesita conocer las necesidades e intereses de sus clientes para proporcionarles un producto o servicio que deje completamente satisfcho al cliente.