perfect_shuffle.sf 513 B

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Perfect_shuffle
  4. #
  5. func perfect_shuffle(deck) {
  6. var mid = deck.len/2;
  7. [deck.part(mid)].zip.flatten
  8. }
  9. [8, 24, 52, 100].each { |size|
  10. var deck = size.of { _ };
  11. var shuffled = deck;
  12. var n = 0;
  13. loop {
  14. ++n;
  15. shuffled = perfect_shuffle(shuffled);
  16. shuffled.each_index { |i|
  17. shuffled[i] == deck[i] || goto :NEXT;
  18. }
  19. break;
  20. @:NEXT;
  21. }
  22. printf("%5d cards: %4d\n", size, n);
  23. }