Skip to content

Instantly share code, notes, and snippets.

@AlfonsoVenancio
Last active March 28, 2019 16:45
Show Gist options
  • Save AlfonsoVenancio/acc59977ba9d514034e23a75027c82e9 to your computer and use it in GitHub Desktop.
Save AlfonsoVenancio/acc59977ba9d514034e23a75027c82e9 to your computer and use it in GitHub Desktop.
Explicación de la solución para el problema "Facilitándole la vida al caracol", presentado en Coding Rush 15.1

Facilitándole la vida al caracol

Explicación de la solución para el problema "Facilitándole la vida al caracol" presentado en el concurso de la primera sesión del Coding Rush 15, en la plataforma omegaUp.com.

Problema

Descripción del problema

Un caracol trepa cada día X centímetros a lo largo de una pared que mide L centímetros. Al caer la noche, el caracol se queda dormido y se resbala Y centímetros. Deberás crear un programa que te diga cuántos días va a tardar el caracol en trepar la pared.

Entrada del problema

  • L: la longitud de la pared
  • X: el número de centímetros que sube el caracol cada día
  • Y: el número de centímetros que resbala el caracol durante la noche

Salida del problema

El número de días que el caracol tarda en trepar hasta el borde superior de la pared.

NOTA: en caso de que el caracol no pueda alcanzar el borde deberás imprimir -1.

Ejemplos de ejecución

Entrada Salida
600
25
75
-1
100
50
10
3

¿Cómo atacar el problema?

El problema en primera parte parece sencillo, pero se debe de tener en cuenta los casos límites que se pueden presentar en el problema:

  • Cuando el caracol cae más de lo que puede subir (X<=Y), el caracol nunca alcanzará la parte superior de la pared
  • Cuando el caracol puede subir toda la pared de un solo jalón, (X>=L) esto quiere decir que el primer día subirá toda la pared, sin que llegue la noche y por lo tanto sin caer

Cuando ninguno de esos dos casos se presenta, podemos asegurar que el caracol se tardará mas de un día en subir la pared, ahora solamente falta darnos cuenta que que último día, cuando el caracol alcanza la parte superior de la pared, ya no caerá durante la noche, entonces el último día no se debe de considerar la caída Y centimetros.

Después de darnos cuenta de todas estas consideraciones, podemos simular la subida con un while, cada día el caracol subirá y caerá hasta alcanzar la cima de la pared.

Solución del problema

# -*- coding: UTF-8 -*-
#Facilitándole la vida al caracol

#Lectura de los datos
L = int(raw_input()) #Alto pared
X = int(raw_input()) #Centimetros que sube un día
Y = int(raw_input()) #Centimetros que cae durante la noche

#Si el caracol cae más por día de lo que puede subir
if X <= Y:
    #Si el caracol sube menos en un día de lo que mide la pared
    if X < L:
        print "-1"
    #Si X > L el caracol puede subir toda la pared de un jalón, en un solo día
    else:
        print "1"
#El caracol puede subir más de lo que cae en la noche, entonces va a poder subir la pared
else:
    #La cantidad de centimetros que el caracol puede subir en un día y una noche
    subidaDiaria = X -Y
    #Esta es la parte más importante, cuando el caracol llegue a la cima de la pared ya no va a caer, porque
    #ya esta hasta arriba, por eso le ponemos que la altura inicial va a ser X
    alturaRecorrida = X
    #El caracol empieza a subir en el día 1, por lo mismo de la instrucción anterior
    dias = 1
    #Mientras el caracol no haya completado subir la pared, que siga subiendo
    while alturaRecorrida < L:
        alturaRecorrida = alturaRecorrida + subidaDiaria
        dias = dias + 1
    #Ya subió toda la pared, por lo que mostramos los días
    print dias

Autores

  • Diseño del problema: Javier Rivera
  • Alta del problema en la plataforma: Alexander Obeid
  • Explicación del problema: Alfonso Venancio

Enlace al problema

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment