Skip to content

Instantly share code, notes, and snippets.

@sr-vazkez
Created July 9, 2023 05:29
Show Gist options
  • Save sr-vazkez/aac90fd58f6156b1acb87a62c240c6ec to your computer and use it in GitHub Desktop.
Save sr-vazkez/aac90fd58f6156b1acb87a62c240c6ec to your computer and use it in GitHub Desktop.
Prueba tecnica real
"""Enunciado del problema
Reto de programación. Peces Linterna (Ficticio)
Un grupo de científicos viaja a bordo de un submarino que cuenta con equipo especializado para estudiar las profundidades del océano. Después de días de exploración, llama la atención de los científicos una comunidad de peces linterna. Uno de los científicos se pregunta acerca de la velocidad de reproducción de la comunidad de los peces ¿Crecerá de manera exponencial...? Su compañero le dice que debería modelar la tasa de crecimiento de la comunidad de peces para estar seguro.
Entonces el científico se plantea el siguiente modelo:
• Cada pez da origen a 1 nuevo pez cada 7 días.
• Sin embargo, este proceso no necesariamente está sincronizado entre los peces, un pez
podría estar a 2 días de originar un nuevo pez, mientras que otro puede estar a 4 días.
• De esta manera cada pez se puede representar como un número entero que representan los
días que faltan para que el pez de origen a un nuevo pez, a este número lo llamaremos
temporizador interno y cada pez tiene su propio temporizador.
• Además, un pez nuevo no es capaz de generar peces desde el inicio, requiere de 2 días
para iniciar su primer ciclo.
Entonces, suponiendo que un pez tiene un temporizador interno de valor 3:
• Después de un día, su temporizador tendrá el valor 2.
• Después de otro día, su valor será 1.
• Después de otro día, su valor será 0.
• Después de otro día, su temporizador se reiniciará a 6, y creará un nuevo pez con un
temporizador interno de valor 8.
• Después de otro día, el temporizador del primer pez tendrá el valor 5, y el segundo pez
tendrá el temporizador en valor 7.
Los peces que generan nuevos peces reinician su temporizador a 6 (0 es válido como valor del temporizador). Los nuevos peces comienzan con un temporizador interno de 8 (por los dos días que requieren para iniciar su primer ciclo) y comienzan a decrementar su valor al día siguiente.
Entonces, mediante los aparatos de medición que llevan en el submarino, el científico genera un listado de los temporizadores internos de algunos peces linterna de los alrededores (entrada del programa).
EJEMPLO
Asuma que tiene la siguiente lista de temporizadores de peces:
3,4,3,1,2
Esta lista indica que el primer pez tiene un temporizador con valor 3, el segundo tiene un valor de 4, etc. Y así hasta el quinto pez, que tiene un temporizador con valor 2. Simulando el comportamiento de los peces por varios días tendríamos los siguientes resultados.
Estado Inicial: 3,4,3,1,2
Después de 1 día : 2,3,2,0,1
Después de 2 días: 1,2,1,6,0,8
Después de 3 días: 0,1,0,5,6,7,8
Después de 4 días: 6,0,6,4,5,6,7,8,8
Después de 5 días: 5,6,5,3,4,5,6,7,7,8
Después de 6 días: 4,5,4,2,3,4,5,6,6,7
Después de 7 días: 3,4,3,1,2,3,4,5,5,6
Después de 8 días: 2,3,2,0,1,2,3,4,4,5
Después de 9 días: 1,2,1,6,0,1,2,3,3,4,8
Después de 10 días: 0,1,0,5,6,0,1,2,2,3,7,8
Después de 11 días: 6,0,6,4,5,6,0,1,1,2,6,7,8,8,8
Después de 12 días: 5,6,5,3,4,5,6,0,0,1,5,6,7,7,7,8,8
Después de 13 días: 4,5,4,2,3,4,5,6,6,0,4,5,6,6,6,7,7,8,8
Después de 14 días: 3,4,3,1,2,3,4,5,5,6,3,4,5,5,5,6,6,7,7,8
Después de 15 días: 2,3,2,0,1,2,3,4,4,5,2,3,4,4,4,5,5,6,6,7
Después de 16 días: 1,2,1,6,0,1,2,3,3,4,1,2,3,3,3,4,4,5,5,6,8
Después de 17 días: 0,1,0,5,6,0,1,2,2,3,0,1,2,2,2,3,3,4,4,5,7,8
Después de 18 días: 6,0,6,4,5,6,0,1,1,2,6,0,1,1,1,2,2,3,3,4,6,7,8,8,8,8
Cada día que un 0 se convierte en un 6 se agrega un nuevo 8 al final de la lista, el resto de los números disminuye en 1.
En este ejemplo, después de 18 días, hay un total de 26 peces, y después de 80 días, habría un total de 5934.
RETO
Sin usar librerías externas de Python, simule el comportamiento de reproducción para la siguiente
comunidad de peces inicial:
3,1,4,2,1,1,1,1,1,1,1,4,1,4,1,2,1,1,2,1,3,4,5,1,1,4,1,3,3,1,1,1,1,3,3,1,3,3,1,5, 5,1,1,3,1,1,2,1,1,1,3,1,4,3,2,1,4,3,3,1,1,1,1,5,1,4,1,1,1,4,1,4,4,1,5,1,1,4,5,1, 1,2,1,1,1,4,1,2,1,1,1,1,1,1,5,1,3,1,1,4,4,1,1,5,1,2,1,1,1,1,5,1,3,1,1,1,2,2,1,4, 1,3,1,4,1,2,1,1,1,1,1,3,2,5,4,4,1,3,2,1,4,1,3,1,1,1,2,1,1,5,1,2,1,1,1,2,1,4,3,1, 1,1,4,1,1,1,1,1,2,2,1,1,5,1,1,3,1,2,5,5,1,4,1,1,1,1,1,2,1,1,1,1,4,5,1,1,1,1,1,1, 1,1,1,3,4,4,1,1,4,1,3,4,1,5,4,2,5,1,2,1,1,1,1,1,1,4,3,2,1,1,3,2,5,2,5,5,1,3,1,2, 1,1,1,1,1,1,1,1,1,3,1,1,1,3,1,4,1,4,2,1,3,4,1,1,1,2,3,1,1,1,4,1,2,5,1,2,1,5,1,1, 2,1,2,1,1,1,1,4,3,4,1,5,5,4,1,1,5,2,1,3
y calcule cuantos peces habrá en los siguientes periodos: 18 días:
80 días:
256 días:
"""
def calcular_temporizadores(temporizadores_iniciales, dias):
temporizadores = temporizadores_iniciales.copy()
total_peces = len(temporizadores)
nuevos_peces = []
for dia in range(1, dias+1):
# print(f"Día {dia}: {temporizadores}")
for i in range(len(temporizadores)):
temporizadores[i] -= 1
if temporizadores[i] == -1:
if dia >= 2:
nuevos_peces.append(8)
temporizadores[i] = 6
total_peces += len(nuevos_peces)
temporizadores.extend(nuevos_peces)
nuevos_peces = []
return temporizadores, total_peces
if __name__ == "__main__":
# Ejemplo de uso
temporizadores_iniciales = [3,1,4,2,1,1,1,1,1,1,1,4,1,4,1,2,1,1,2,1,3,4,5,1,1,4,1,3,3,1,1,1,1,3,3,1,3,3,1,5, 5,1,1,3,1,1,2,1,1,1,3,1,4,3,2,1,4,3,3,1,1,1,1,5,1,4,1,1,1,4,1,4,4,1,5,1,1,4,5,1, 1,2,1,1,1,4,1,2,1,1,1,1,1,1,5,1,3,1,1,4,4,1,1,5,1,2,1,1,1,1,5,1,3,1,1,1,2,2,1,4, 1,3,1,4,1,2,1,1,1,1,1,3,2,5,4,4,1,3,2,1,4,1,3,1,1,1,2,1,1,5,1,2,1,1,1,2,1,4,3,1, 1,1,4,1,1,1,1,1,2,2,1,1,5,1,1,3,1,2,5,5,1,4,1,1,1,1,1,2,1,1,1,1,4,5,1,1,1,1,1,1, 1,1,1,3,4,4,1,1,4,1,3,4,1,5,4,2,5,1,2,1,1,1,1,1,1,4,3,2,1,1,3,2,5,2,5,5,1,3,1,2, 1,1,1,1,1,1,1,1,1,3,1,1,1,3,1,4,1,4,2,1,3,4,1,1,1,2,3,1,1,1,4,1,2,5,1,2,1,5,1,1, 2,1,2,1,1,1,1,4,3,4,1,5,5,4,1,1,5,2,1,3]
dias = 256
resultado_temporizadores, resultado_total_peces = calcular_temporizadores(temporizadores_iniciales, dias)
print("Temporizadores:", resultado_temporizadores)
print("Total de peces:", resultado_total_peces)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment