fork download
  1. def input = [107,47,102,64,50,100,28,91,27,5,22,114,23,42,13,3,93,8,92,79,53,83,63,7,15,66,105,57,14,65,58,113,112,1,62,103,120,72,111,51,9,36,119,99,30,20,25,84,16,116,98,18,37,108,10,80,101,35,75,39,109,17,38,117,60,46,85,31,41,12,29,26,74,77,21,4,70,61,88,44,49,94,122,2,97,73,69,71,86,45,96,104,89,68,40,6,87,115,54,123,125,90,32,118,52,11,33,106,95,76,19,82,56,121,55,34,24,43,124,81,48,110,78,67,59]
  2.  
  3.  
  4. raceCount = 0
  5.  
  6.  
  7. def horseSort(inp) {
  8. def races = []
  9. def rounds = Math.ceil(inp.size() / 5)
  10. rounds.times{ idx ->
  11. races << raceEm(inp[(idx*5)..Math.min(inp.size()-1,idx*5+5-1)])
  12. }
  13. if (rounds > 1) {
  14. races = horseSort(races.collect{ [horse:takeWinner(it).horse, race:it] })
  15. } else {
  16. def sorted = []
  17. def race = races[0]
  18. while (race.size() > 0) {
  19. def winner = takeWinner(race)
  20. sorted << winner.horse
  21. }
  22. return sorted
  23. }
  24. races
  25. }
  26.  
  27. def takeWinner(race) {
  28. def winner = race.poll()
  29. if (winner.race) {
  30. def promo = takeWinner(winner.race)
  31. promo.race = winner.race
  32. race << promo
  33. raceEm(race)
  34. }
  35. winner
  36. }
  37.  
  38. def raceEm(race) {
  39. if (race.size() < 2) return race
  40. def before = "${race.horse}"
  41. raceCount++
  42. race.sort{it.horse}
  43. println "race: ${before}${' '*(27-before.length())} --> ${race.horse}"
  44. race as Queue
  45. }
  46.  
  47. def result = horseSort(input.collect { [horse:it, race:null] })
  48. println "\n$raceCount races"
  49. println "result == input.sort() --> ${result == input.sort()}"
  50. println "result:"
  51. println result
Success #stdin #stdout 1.22s 4456448KB
stdin
Standard input is empty
stdout
race: [107, 47, 102, 64, 50]      --> [47, 50, 64, 102, 107]
race: [100, 28, 91, 27, 5]        --> [5, 27, 28, 91, 100]
race: [22, 114, 23, 42, 13]       --> [13, 22, 23, 42, 114]
race: [3, 93, 8, 92, 79]          --> [3, 8, 79, 92, 93]
race: [53, 83, 63, 7, 15]         --> [7, 15, 53, 63, 83]
race: [66, 105, 57, 14, 65]       --> [14, 57, 65, 66, 105]
race: [58, 113, 112, 1, 62]       --> [1, 58, 62, 112, 113]
race: [103, 120, 72, 111, 51]     --> [51, 72, 103, 111, 120]
race: [9, 36, 119, 99, 30]        --> [9, 30, 36, 99, 119]
race: [20, 25, 84, 16, 116]       --> [16, 20, 25, 84, 116]
race: [98, 18, 37, 108, 10]       --> [10, 18, 37, 98, 108]
race: [80, 101, 35, 75, 39]       --> [35, 39, 75, 80, 101]
race: [109, 17, 38, 117, 60]      --> [17, 38, 60, 109, 117]
race: [46, 85, 31, 41, 12]        --> [12, 31, 41, 46, 85]
race: [29, 26, 74, 77, 21]        --> [21, 26, 29, 74, 77]
race: [4, 70, 61, 88, 44]         --> [4, 44, 61, 70, 88]
race: [49, 94, 122, 2, 97]        --> [2, 49, 94, 97, 122]
race: [73, 69, 71, 86, 45]        --> [45, 69, 71, 73, 86]
race: [96, 104, 89, 68, 40]       --> [40, 68, 89, 96, 104]
race: [6, 87, 115, 54, 123]       --> [6, 54, 87, 115, 123]
race: [125, 90, 32, 118, 52]      --> [32, 52, 90, 118, 125]
race: [11, 33, 106, 95, 76]       --> [11, 33, 76, 95, 106]
race: [19, 82, 56, 121, 55]       --> [19, 55, 56, 82, 121]
race: [34, 24, 43, 124, 81]       --> [24, 34, 43, 81, 124]
race: [48, 110, 78, 67, 59]       --> [48, 59, 67, 78, 110]
race: [47, 5, 13, 3, 7]           --> [3, 5, 7, 13, 47]
race: [14, 1, 51, 9, 16]          --> [1, 9, 14, 16, 51]
race: [10, 35, 17, 12, 21]        --> [10, 12, 17, 21, 35]
race: [4, 2, 45, 40, 6]           --> [2, 4, 6, 40, 45]
race: [32, 11, 19, 24, 48]        --> [11, 19, 24, 32, 48]
race: [5, 7, 13, 47, 8]           --> [5, 7, 8, 13, 47]
race: [9, 14, 16, 51, 58]         --> [9, 14, 16, 51, 58]
race: [12, 17, 21, 35, 18]        --> [12, 17, 18, 21, 35]
race: [4, 6, 40, 45, 49]          --> [4, 6, 40, 45, 49]
race: [19, 24, 32, 48, 33]        --> [19, 24, 32, 33, 48]
race: [3, 1, 10, 2, 11]           --> [1, 2, 3, 10, 11]
race: [14, 16, 51, 58, 30]        --> [14, 16, 30, 51, 58]
race: [2, 3, 10, 11, 9]           --> [2, 3, 9, 10, 11]
race: [6, 40, 45, 49, 44]         --> [6, 40, 44, 45, 49]
race: [3, 9, 10, 11, 4]           --> [3, 4, 9, 10, 11]
race: [7, 8, 13, 47, 27]          --> [7, 8, 13, 27, 47]
race: [4, 9, 10, 11, 5]           --> [4, 5, 9, 10, 11]
race: [40, 44, 45, 49, 54]        --> [40, 44, 45, 49, 54]
race: [5, 9, 10, 11, 6]           --> [5, 6, 9, 10, 11]
race: [8, 13, 27, 47, 15]         --> [8, 13, 15, 27, 47]
race: [6, 9, 10, 11, 7]           --> [6, 7, 9, 10, 11]
race: [44, 45, 49, 54, 68]        --> [44, 45, 49, 54, 68]
race: [7, 9, 10, 11, 40]          --> [7, 9, 10, 11, 40]
race: [13, 15, 27, 47, 79]        --> [13, 15, 27, 47, 79]
race: [9, 10, 11, 40, 8]          --> [8, 9, 10, 11, 40]
race: [15, 27, 47, 79, 22]        --> [15, 22, 27, 47, 79]
race: [9, 10, 11, 40, 13]         --> [9, 10, 11, 13, 40]
race: [16, 30, 51, 58, 57]        --> [16, 30, 51, 57, 58]
race: [10, 11, 13, 40, 14]        --> [10, 11, 13, 14, 40]
race: [17, 18, 21, 35, 31]        --> [17, 18, 21, 31, 35]
race: [11, 13, 14, 40, 12]        --> [11, 12, 13, 14, 40]
race: [24, 32, 33, 48, 55]        --> [24, 32, 33, 48, 55]
race: [12, 13, 14, 40, 19]        --> [12, 13, 14, 19, 40]
race: [18, 21, 31, 35, 38]        --> [18, 21, 31, 35, 38]
race: [13, 14, 19, 40, 17]        --> [13, 14, 17, 19, 40]
race: [22, 27, 47, 79, 53]        --> [22, 27, 47, 53, 79]
race: [14, 17, 19, 40, 15]        --> [14, 15, 17, 19, 40]
race: [30, 51, 57, 58, 20]        --> [20, 30, 51, 57, 58]
race: [15, 17, 19, 40, 16]        --> [15, 16, 17, 19, 40]
race: [27, 47, 53, 79, 23]        --> [23, 27, 47, 53, 79]
race: [16, 17, 19, 40, 22]        --> [16, 17, 19, 22, 40]
race: [30, 51, 57, 58, 25]        --> [25, 30, 51, 57, 58]
race: [17, 19, 22, 40, 20]        --> [17, 19, 20, 22, 40]
race: [21, 31, 35, 38, 37]        --> [21, 31, 35, 37, 38]
race: [19, 20, 22, 40, 18]        --> [18, 19, 20, 22, 40]
race: [31, 35, 37, 38, 26]        --> [26, 31, 35, 37, 38]
race: [19, 20, 22, 40, 21]        --> [19, 20, 21, 22, 40]
race: [32, 33, 48, 55, 34]        --> [32, 33, 34, 48, 55]
race: [20, 21, 22, 40, 24]        --> [20, 21, 22, 24, 40]
race: [30, 51, 57, 58, 84]        --> [30, 51, 57, 58, 84]
race: [21, 22, 24, 40, 25]        --> [21, 22, 24, 25, 40]
race: [31, 35, 37, 38, 29]        --> [29, 31, 35, 37, 38]
race: [22, 24, 25, 40, 26]        --> [22, 24, 25, 26, 40]
race: [27, 47, 53, 79, 42]        --> [27, 42, 47, 53, 79]
race: [24, 25, 26, 40, 23]        --> [23, 24, 25, 26, 40]
race: [42, 47, 53, 79, 28]        --> [28, 42, 47, 53, 79]
race: [24, 25, 26, 40, 27]        --> [24, 25, 26, 27, 40]
race: [33, 34, 48, 55, 52]        --> [33, 34, 48, 52, 55]
race: [25, 26, 27, 40, 32]        --> [25, 26, 27, 32, 40]
race: [51, 57, 58, 84, 36]        --> [36, 51, 57, 58, 84]
race: [26, 27, 32, 40, 30]        --> [26, 27, 30, 32, 40]
race: [31, 35, 37, 38, 74]        --> [31, 35, 37, 38, 74]
race: [27, 30, 32, 40, 29]        --> [27, 29, 30, 32, 40]
race: [42, 47, 53, 79, 91]        --> [42, 47, 53, 79, 91]
race: [29, 30, 32, 40, 28]        --> [28, 29, 30, 32, 40]
race: [47, 53, 79, 91, 114]       --> [47, 53, 79, 91, 114]
race: [29, 30, 32, 40, 42]        --> [29, 30, 32, 40, 42]
race: [35, 37, 38, 74, 41]        --> [35, 37, 38, 41, 74]
race: [30, 32, 40, 42, 31]        --> [30, 31, 32, 40, 42]
race: [51, 57, 58, 84, 99]        --> [51, 57, 58, 84, 99]
race: [31, 32, 40, 42, 36]        --> [31, 32, 36, 40, 42]
race: [37, 38, 41, 74, 39]        --> [37, 38, 39, 41, 74]
race: [32, 36, 40, 42, 35]        --> [32, 35, 36, 40, 42]
race: [34, 48, 52, 55, 76]        --> [34, 48, 52, 55, 76]
race: [35, 36, 40, 42, 33]        --> [33, 35, 36, 40, 42]
race: [48, 52, 55, 76, 43]        --> [43, 48, 52, 55, 76]
race: [35, 36, 40, 42, 34]        --> [34, 35, 36, 40, 42]
race: [48, 52, 55, 76, 81]        --> [48, 52, 55, 76, 81]
race: [35, 36, 40, 42, 43]        --> [35, 36, 40, 42, 43]
race: [38, 39, 41, 74, 98]        --> [38, 39, 41, 74, 98]
race: [36, 40, 42, 43, 37]        --> [36, 37, 40, 42, 43]
race: [57, 58, 84, 99, 72]        --> [57, 58, 72, 84, 99]
race: [37, 40, 42, 43, 51]        --> [37, 40, 42, 43, 51]
race: [39, 41, 74, 98, 60]        --> [39, 41, 60, 74, 98]
race: [40, 42, 43, 51, 38]        --> [38, 40, 42, 43, 51]
race: [41, 60, 74, 98, 75]        --> [41, 60, 74, 75, 98]
race: [40, 42, 43, 51, 39]        --> [39, 40, 42, 43, 51]
race: [60, 74, 75, 98, 46]        --> [46, 60, 74, 75, 98]
race: [40, 42, 43, 51, 41]        --> [40, 41, 42, 43, 51]
race: [45, 49, 54, 68, 61]        --> [45, 49, 54, 61, 68]
race: [41, 42, 43, 51, 44]        --> [41, 42, 43, 44, 51]
race: [60, 74, 75, 98, 85]        --> [60, 74, 75, 85, 98]
race: [42, 43, 44, 51, 46]        --> [42, 43, 44, 46, 51]
race: [53, 79, 91, 114, 50]       --> [50, 53, 79, 91, 114]
race: [43, 44, 46, 51, 47]        --> [43, 44, 46, 47, 51]
race: [52, 55, 76, 81, 59]        --> [52, 55, 59, 76, 81]
race: [44, 46, 47, 51, 48]        --> [44, 46, 47, 48, 51]
race: [49, 54, 61, 68, 69]        --> [49, 54, 61, 68, 69]
race: [46, 47, 48, 51, 45]        --> [45, 46, 47, 48, 51]
race: [54, 61, 68, 69, 94]        --> [54, 61, 68, 69, 94]
race: [46, 47, 48, 51, 49]        --> [46, 47, 48, 49, 51]
race: [74, 75, 85, 98, 109]       --> [74, 75, 85, 98, 109]
race: [47, 48, 49, 51, 60]        --> [47, 48, 49, 51, 60]
race: [53, 79, 91, 114, 64]       --> [53, 64, 79, 91, 114]
race: [48, 49, 51, 60, 50]        --> [48, 49, 50, 51, 60]
race: [55, 59, 76, 81, 90]        --> [55, 59, 76, 81, 90]
race: [49, 50, 51, 60, 52]        --> [49, 50, 51, 52, 60]
race: [61, 68, 69, 94, 87]        --> [61, 68, 69, 87, 94]
race: [50, 51, 52, 60, 54]        --> [50, 51, 52, 54, 60]
race: [64, 79, 91, 114, 63]       --> [63, 64, 79, 91, 114]
race: [51, 52, 54, 60, 53]        --> [51, 52, 53, 54, 60]
race: [58, 72, 84, 99, 65]        --> [58, 65, 72, 84, 99]
race: [52, 53, 54, 60, 57]        --> [52, 53, 54, 57, 60]
race: [59, 76, 81, 90, 56]        --> [56, 59, 76, 81, 90]
race: [53, 54, 57, 60, 55]        --> [53, 54, 55, 57, 60]
race: [64, 79, 91, 114, 83]       --> [64, 79, 83, 91, 114]
race: [54, 55, 57, 60, 63]        --> [54, 55, 57, 60, 63]
race: [68, 69, 87, 94, 70]        --> [68, 69, 70, 87, 94]
race: [55, 57, 60, 63, 61]        --> [55, 57, 60, 61, 63]
race: [59, 76, 81, 90, 82]        --> [59, 76, 81, 82, 90]
race: [57, 60, 61, 63, 56]        --> [56, 57, 60, 61, 63]
race: [76, 81, 82, 90, 67]        --> [67, 76, 81, 82, 90]
race: [57, 60, 61, 63, 59]        --> [57, 59, 60, 61, 63]
race: [65, 72, 84, 99, 62]        --> [62, 65, 72, 84, 99]
race: [59, 60, 61, 63, 58]        --> [58, 59, 60, 61, 63]
race: [65, 72, 84, 99, 112]       --> [65, 72, 84, 99, 112]
race: [59, 60, 61, 63, 62]        --> [59, 60, 61, 62, 63]
race: [76, 81, 82, 90, 78]        --> [76, 78, 81, 82, 90]
race: [60, 61, 62, 63, 67]        --> [60, 61, 62, 63, 67]
race: [75, 85, 98, 109, 77]       --> [75, 77, 85, 98, 109]
race: [61, 62, 63, 67, 74]        --> [61, 62, 63, 67, 74]
race: [69, 70, 87, 94, 89]        --> [69, 70, 87, 89, 94]
race: [62, 63, 67, 74, 68]        --> [62, 63, 67, 68, 74]
race: [72, 84, 99, 112, 66]       --> [66, 72, 84, 99, 112]
race: [63, 67, 68, 74, 65]        --> [63, 65, 67, 68, 74]
race: [79, 83, 91, 114, 102]      --> [79, 83, 91, 102, 114]
race: [65, 67, 68, 74, 64]        --> [64, 65, 67, 68, 74]
race: [83, 91, 102, 114, 92]      --> [83, 91, 92, 102, 114]
race: [65, 67, 68, 74, 79]        --> [65, 67, 68, 74, 79]
race: [72, 84, 99, 112, 105]      --> [72, 84, 99, 105, 112]
race: [67, 68, 74, 79, 66]        --> [66, 67, 68, 74, 79]
race: [84, 99, 105, 112, 103]     --> [84, 99, 103, 105, 112]
race: [67, 68, 74, 79, 72]        --> [67, 68, 72, 74, 79]
race: [78, 81, 82, 90, 95]        --> [78, 81, 82, 90, 95]
race: [68, 72, 74, 79, 76]        --> [68, 72, 74, 76, 79]
race: [70, 87, 89, 94, 71]        --> [70, 71, 87, 89, 94]
race: [72, 74, 76, 79, 69]        --> [69, 72, 74, 76, 79]
race: [71, 87, 89, 94, 88]        --> [71, 87, 88, 89, 94]
race: [72, 74, 76, 79, 70]        --> [70, 72, 74, 76, 79]
race: [87, 88, 89, 94, 73]        --> [73, 87, 88, 89, 94]
race: [72, 74, 76, 79, 71]        --> [71, 72, 74, 76, 79]
race: [87, 88, 89, 94, 86]        --> [86, 87, 88, 89, 94]
race: [72, 74, 76, 79, 73]        --> [72, 73, 74, 76, 79]
race: [99, 103, 105, 112, 116]    --> [99, 103, 105, 112, 116]
race: [73, 74, 76, 79, 84]        --> [73, 74, 76, 79, 84]
race: [74, 76, 79, 84, 86]        --> [74, 76, 79, 84, 86]
race: [77, 85, 98, 109, 80]       --> [77, 80, 85, 98, 109]
race: [76, 79, 84, 86, 75]        --> [75, 76, 79, 84, 86]
race: [76, 79, 84, 86, 77]        --> [76, 77, 79, 84, 86]
race: [81, 82, 90, 95, 110]       --> [81, 82, 90, 95, 110]
race: [77, 79, 84, 86, 78]        --> [77, 78, 79, 84, 86]
race: [85, 98, 109, 101]          --> [85, 98, 101, 109]
race: [78, 79, 84, 86, 80]        --> [78, 79, 80, 84, 86]
race: [82, 90, 95, 110, 124]      --> [82, 90, 95, 110, 124]
race: [79, 80, 84, 86, 81]        --> [79, 80, 81, 84, 86]
race: [80, 81, 84, 86, 83]        --> [80, 81, 83, 84, 86]
race: [81, 83, 84, 86, 85]        --> [81, 83, 84, 85, 86]
race: [90, 95, 110, 124, 121]     --> [90, 95, 110, 121, 124]
race: [83, 84, 85, 86, 82]        --> [82, 83, 84, 85, 86]
race: [95, 110, 121, 124, 118]    --> [95, 110, 118, 121, 124]
race: [83, 84, 85, 86, 90]        --> [83, 84, 85, 86, 90]
race: [92, 102, 114, 100]         --> [92, 100, 102, 114]
race: [84, 85, 86, 90, 91]        --> [84, 85, 86, 90, 91]
race: [103, 105, 112, 116, 119]   --> [103, 105, 112, 116, 119]
race: [85, 86, 90, 91, 99]        --> [85, 86, 90, 91, 99]
race: [101, 109, 108]             --> [101, 108, 109]
race: [86, 90, 91, 99, 98]        --> [86, 90, 91, 98, 99]
race: [88, 89, 94, 115]           --> [88, 89, 94, 115]
race: [90, 91, 98, 99, 87]        --> [87, 90, 91, 98, 99]
race: [90, 91, 98, 99, 88]        --> [88, 90, 91, 98, 99]
race: [94, 115, 96]               --> [94, 96, 115]
race: [90, 91, 98, 99, 89]        --> [89, 90, 91, 98, 99]
race: [96, 115, 97]               --> [96, 97, 115]
race: [90, 91, 98, 99, 94]        --> [90, 91, 94, 98, 99]
race: [110, 118, 121, 124, 106]   --> [106, 110, 118, 121, 124]
race: [91, 94, 98, 99, 95]        --> [91, 94, 95, 98, 99]
race: [100, 102, 114, 93]         --> [93, 100, 102, 114]
race: [94, 95, 98, 99, 92]        --> [92, 94, 95, 98, 99]
race: [94, 95, 98, 99, 93]        --> [93, 94, 95, 98, 99]
race: [94, 95, 98, 99, 100]       --> [94, 95, 98, 99, 100]
race: [97, 115, 104]              --> [97, 104, 115]
race: [95, 98, 99, 100, 96]       --> [95, 96, 98, 99, 100]
race: [96, 98, 99, 100, 106]      --> [96, 98, 99, 100, 106]
race: [104, 115, 122]             --> [104, 115, 122]
race: [98, 99, 100, 106, 97]      --> [97, 98, 99, 100, 106]
race: [98, 99, 100, 106, 104]     --> [98, 99, 100, 104, 106]
race: [99, 100, 104, 106, 101]    --> [99, 100, 101, 104, 106]
race: [105, 112, 116, 119, 111]   --> [105, 111, 112, 116, 119]
race: [100, 101, 104, 106, 103]   --> [100, 101, 103, 104, 106]
race: [114, 107]                  --> [107, 114]
race: [101, 103, 104, 106, 102]   --> [101, 102, 103, 104, 106]
race: [102, 103, 104, 106, 108]   --> [102, 103, 104, 106, 108]
race: [103, 104, 106, 108, 107]   --> [103, 104, 106, 107, 108]
race: [104, 106, 107, 108, 105]   --> [104, 105, 106, 107, 108]
race: [122, 123]                  --> [122, 123]
race: [105, 106, 107, 108, 115]   --> [105, 106, 107, 108, 115]
race: [112, 116, 119, 120]        --> [112, 116, 119, 120]
race: [106, 107, 108, 115, 111]   --> [106, 107, 108, 111, 115]
race: [107, 108, 111, 115, 110]   --> [107, 108, 110, 111, 115]
race: [108, 110, 111, 115, 114]   --> [108, 110, 111, 114, 115]
race: [110, 111, 114, 115, 109]   --> [109, 110, 111, 114, 115]
race: [110, 111, 114, 115, 117]   --> [110, 111, 114, 115, 117]
race: [121, 124, 125]             --> [121, 124, 125]
race: [111, 114, 115, 117, 118]   --> [111, 114, 115, 117, 118]
race: [116, 119, 120, 113]        --> [113, 116, 119, 120]
race: [114, 115, 117, 118, 112]   --> [112, 114, 115, 117, 118]
race: [114, 115, 117, 118, 113]   --> [113, 114, 115, 117, 118]
race: [114, 115, 117, 118, 116]   --> [114, 115, 116, 117, 118]
race: [116, 117, 118, 122]        --> [116, 117, 118, 122]
race: [117, 118, 122, 119]        --> [117, 118, 119, 122]
race: [119, 122, 121]             --> [119, 121, 122]
race: [121, 122, 120]             --> [120, 121, 122]
race: [122, 124]                  --> [122, 124]
race: [124, 123]                  --> [123, 124]

249 races
result == input.sort() --> true
result:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125]