24_game_solve.sf 947 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/24_game/Solve
  4. #
  5. var formats = [
  6. '((%d %s %d) %s %d) %s %d',
  7. '(%d %s (%d %s %d)) %s %d',
  8. '(%d %s %d) %s (%d %s %d)',
  9. '%d %s ((%d %s %d) %s %d)',
  10. '%d %s (%d %s (%d %s %d))',
  11. ];
  12. var op = %w( + - * / );
  13. var operators = op.map { |a| op.map {|b| op.map {|c| "#{a} #{b} #{c}" } } }.flatten;
  14. loop {
  15. var input = Sys.scanln("Enter four integers or 'q' to exit: ") \\ break;
  16. input == 'q' && break;
  17. input ~~ /^\h*[1-9]\h+[1-9]\h+[1-9]\h+[1-9]\h*$/ || (
  18. say "Invalid input!"; next;
  19. );
  20. var n = input.split.map{.to_i};
  21. var numbers = n.permutations;
  22. formats.each { |format|
  23. numbers.each { |n|
  24. operators.each { |operator|
  25. var o = operator.split;
  26. var str = (format % (n[0],o[0],n[1],o[1],n[2],o[2],n[3]));
  27. Sidef.new.execute_code(str) == 24 && say str;
  28. }
  29. }
  30. }
  31. }