guess_the_number_with_feedback_player.sf 951 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Guess_the_number/With_feedback_(player)
  4. #
  5. var min = 1;
  6. var max = 99;
  7. var tries = 0;
  8. var guess = max.rand(min).int;
  9.  
  10. print <<"EOT".chomp;
  11. \n=>> Think of a number between #{min} and #{max} and I'll guess it!\n
  12. Press <ENTER> when are you ready...
  13. EOT
  14.  
  15. STDIN.readline;
  16.  
  17. loop {
  18. print <<-EOT.chomp
  19. \n=>> My guess is: #{guess} Is your number higher, lower, or equal? (h/l/e)
  20. >#{' '}
  21. EOT
  22.  
  23. ++tries;
  24. given (STDIN.readline) {
  25. case(max <= min) {
  26. say "\nI give up...";
  27. break;
  28. }
  29. when(/^h/i) {
  30. min = guess+1;
  31. }
  32. when(/^l/i) {
  33. max = guess;
  34. }
  35. when(/^e/i) {
  36. say "\nI knew it! It took me only #{tries} tries.";
  37. break;
  38. }
  39. default {
  40. say "error: invalid score";
  41. next;
  42. }
  43. }
  44.  
  45. guess = (min+max / 2 -> int);
  46. }