sorting_algorithms_patience_sort.sf 579 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Sorting_algorithms/Patience_sort
  4. #
  5. func patience(deck) {
  6. var stacks = [];
  7. deck.each { |card|
  8. given (stacks.first { card < .last }) { |stack|
  9. case (defined stack) {
  10. stack << card
  11. }
  12. default {
  13. stacks << [card]
  14. }
  15. }
  16. }
  17. gather {
  18. while (stacks) {
  19. take stacks.min_by { .last }.pop
  20. stacks.grep!{ !.is_empty }
  21. }
  22. }
  23. }
  24. var numbers = [7,6,5,9,8,4,3,1,2,0];
  25. say patience(numbers);
  26. var strs = ["John", "Kate", "Zerg", "Alice", "Joe", "Jane"];
  27. say patience(strs);