elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Script adivinar numero en bash
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Script adivinar numero en bash  (Leído 9,857 veces)
andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Script adivinar numero en bash
« en: 11 Noviembre 2011, 17:56 pm »

Hola a todos, he realizado un script y una vez realizado no es del todo eficiente.

El problema lo tengo con los números aleatorios de inicio y fin, aquí os dejo el script que yo he realizado haber si me pueden ayudar a resolverlo.

tiene algunos "echo" de mas porque los he ido utilizado para ayudarme.

Código
  1. # Crear un script que intente adiviar un numro que tenemos en mente. El programa debera ir
  2. #preguntando al usuario si el numero mostrado es mayor o menor.
  3.  
  4. #!/bin/bash
  5.  
  6. fin=10
  7. inicio=1
  8. cont=0
  9. intento=$(($RANDOM%fin+inicio))
  10.  
  11. echo 'El numero es: '$intento ' S/N?: '
  12. read resp
  13.  
  14. while [ $resp == 'N' ] && [ $inicio -lt $fin ]
  15. do
  16. echo 'inicio: '$inicio
  17. echo 'fin: '$fin
  18. echo 'si el numero es MAYOR (M) o menor (m)?'
  19. read resp1
  20. echo ''
  21. if [ $resp1 = 'M' ]
  22. then
  23. inicio=$(expr $intento \+ 1)
  24. #fin=$fin
  25. intento=$(($RANDOM%fin+inicio))
  26. echo ''
  27. echo 'intento2: '$intento
  28. echo ''
  29. else
  30. if [ $resp1 = 'm' ]
  31. then
  32. #inicio=$inicio
  33. fin=$(expr $intento \- 1)
  34. intento=$(($RANDOM%fin+inicio))
  35. echo ''
  36. echo 'intento3: '$intento
  37. echo ''
  38. fi
  39. fi
  40. echo 'El numero es: '$intento ' S/N?: '
  41. read resp
  42. done
  43. echo 'Numero encontrado: '$intento
  44.  


« Última modificación: 13 Noviembre 2011, 15:57 pm por andaluz » En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero
« Respuesta #1 en: 12 Noviembre 2011, 17:15 pm »

Nadie consigue solucionar el ejercicio?? yo es que estoy probando de varias maneras pero no consigo solucionar el ejercicio.

Espero que me puedan ayudar, Saludos


En línea

hervasiop12345

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Script adivinar numero
« Respuesta #2 en: 12 Noviembre 2011, 19:06 pm »

Código:
#! /bin/bash
# La estrategia será proponer siempre el número mitad entre el tope superior y
# el inferior. Por conveniencia, partimos del intervalo [0,11], para que ambos
# extremos se consideren siempre como "ya probados"

myguess=`date +%N | cut -c2`
myguess=$(( $myguess+1 ))  # Aleatorio entre 1 y 10 a través de los nanosegundos
bottom=0
top=11

while true
do
    while true
    do
      echo -n "¿ El número es el $myguess ? "
      read respuesta
      case $respuesta in
          correcto)
              echo "¡¡ El número era el $myguess !!"
              exit
              ;;
          mayor)
              bottom=$myguess
              break
              ;;
          menor)
              top=$myguess
              break
              ;;
          *)
              echo "Conteste (correcto|mayor|menor)"
              continue
              ;;
      esac
    done
    antguess=$myguess
    myguess=$(( ($top+$bottom)/2 ))
    echo top=$top bottom=$bottom myguess=$myguess antguess=$antguess
    if [ $(( $bottom+1 )) -eq $top ]
    then
        echo "Tramposo: dijiste que el número era mayor que $bottom y menor que $top"
        break;
    fi
done


Aquí te dejo una buena solución , publicada por un profesor mio
En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero
« Respuesta #3 en: 12 Noviembre 2011, 19:22 pm »

gracias!!!
En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero
« Respuesta #4 en: 13 Noviembre 2011, 12:00 pm »

la solucion facilitada por hervasiop12345 es correcta, pero me gustaria solucionar el ejercicio de la forma que yo lo puse al principio.

el fallo me lo da al darle nuevo valor a la variable inicio y fin, por eso se van los rangos,

Espero que me puedan ayudar a encontrar la solucion a mi problema, Saludos
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Script adivinar numero en bash
« Respuesta #5 en: 13 Noviembre 2011, 18:33 pm »

Lo que siempre he usado para generar números con rango:

Código
  1. MAX=20
  2. MIN=10
  3.  
  4. while true; do
  5. echo -e "$[ ( $RANDOM % ( $[ $MAX - $MIN ] + 1 ) ) + $MIN ]";
  6. sleep 0.3
  7. done
  8.  

Un ejemplo solamente....
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero en bash
« Respuesta #6 en: 17 Noviembre 2011, 13:32 pm »

ok gracias leo
En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero en bash
« Respuesta #7 en: 17 Noviembre 2011, 14:27 pm »

esa forma de sacar aleatorio esta bien, pero la que yo tengo tambien esta bien, el problema creo que esta en la implementacion del algoritmo. aqui os dejo el nuevo ejercicios que yo he confeccionado, es igual que el anterior, pero le he añadido algunas condiciones al while.

otra forma de generar el aleatorio la he dejado comentada y utiliza la proporcionada por Leo.

espero que me puedan ayudar a resolverlo.

Código
  1. # Crear un script que intente adiviar un numro que tenemos en mente. El programa debera ir preguntando al usuario
  2. # si el numero mostrado es mayor o menor.
  3.  
  4. #!/bin/bash
  5.  
  6. fin=20
  7. inicio=1
  8. cont=0
  9. #intento=$(($RANDOM%$fin+$inicio))
  10. #valor=$(expr $RANDOM \% $fin)
  11. #intento=$(expr $valor \+ $inicio)
  12.  
  13. intento=$[ ( $RANDOM % ( $[ $fin - $inicio ] + 1 ) ) + $inicio ]
  14. echo 'El numero es: '$intento ' S/N?: '
  15. read resp
  16. #echo 'respuesta: ' $resp
  17. #echo 'inicio: '$inicio
  18. #echo 'fin: '$fin
  19.  
  20. while [ $resp == 'N' ] && [ $intento -le $fin ] && [ $intento -ge $inicio ] &&[ $inicio -lt $fin ]
  21. do
  22. echo '¿El numero es MAYOR (M) o menor (m)?'
  23. read resp1
  24.  
  25. if [ $resp1 == 'M' ]
  26. then
  27. inicio=$(expr $intento \+ 1)
  28. echo 'Nuevo valor INICIO: '$inicio
  29. echo 'FIN: '$fin
  30. else
  31. if [ $resp1 == 'm' ]
  32. then
  33. fin=$(expr $intento \- 1)
  34. echo 'INICIO: '$inicio
  35. echo 'Nuevo valor FIN: '$fin
  36. else
  37. echo 'El caracter introducido no es valido.'
  38. fi
  39. fi
  40. # valor=$(expr $RANDOM \% $fin)
  41. # intento=$(expr $valor \+ $inicio)
  42. intento=$[ ( $RANDOM % ( $[ $fin - $inicio ] + 1 ) ) + $inicio ]
  43. echo '¿El numero es: '$intento ' S/N?: '
  44. read resp
  45. done
  46. echo 'Numero encontrado: '$intento
  47. # cont=$(expr $cont \+ 1)
  48.  
« Última modificación: 17 Noviembre 2011, 14:31 pm por andaluz » En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero en bash
« Respuesta #8 en: 22 Noviembre 2011, 10:59 am »

Alguien me ayuda a solucionar este ejercicio??

el numero aleatorio me lo da bien, el problema esta en los limites de mayor y menor que no me los pone bien ya que he ejecutado el ejercicio.

Espero que me puedan ayudar,

Saludos
En línea

andaluz


Desconectado Desconectado

Mensajes: 330



Ver Perfil
Re: Script adivinar numero en bash
« Respuesta #9 en: 22 Noviembre 2011, 12:59 pm »

Ya esta solucionado!!!!

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines