bulls_and_cows.sf 870 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Bulls_and_cows#Sidef
  4. #
  5. var size = 4;
  6. var num = (@(1..9) -> shuffle.first(size));
  7. for (var guesses = 1; true; guesses++) {
  8. var bulls = 0;
  9. var cows = 0;
  10. var input = Sys.scanln("Input: ").split(1) \
  11. .unique \
  12. .grep {.~~/^[1-9]$/} \
  13. .map {.to_i};
  14. input.len == size || (
  15. warn "Invalid input!\n"
  16. guesses--;
  17. next;
  18. );
  19. if (input == num) {
  20. printf("You did it in %d attempts!\n", guesses);
  21. break;
  22. }
  23. num.range.each { |i|
  24. if (num[i] == input[i]) {
  25. bulls++;
  26. }
  27. elsif (num.contains(input[i])) {
  28. cows++;
  29. }
  30. }
  31. "Bulls: %d; Cows: %d\n".printf(bulls, cows);
  32. }