Guest User

StackOverflow Challenge #13 Python Wrapper

a guest
Nov 16th, 2025
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.32 KB | None | 0 0
  1.  
  2. data = [[54, 95, 98, 26, 3, 39, 77, 30, 83, 62, 20, 92, 61, 59, 26, 63, 92, 49, 38, 51, 99, 64, 65, 52, 98, 18, 90, 97, 96, 13, 74, 3, 88, 88, 67, 10],
  3. [49, 13, 73, 54, 4, 98, 36, 33, 12, 22, 35, 18, 39, 83, 92, 77, 50, 77, 57, 64, 0, 35, 86, 98, 28, 1, 53, 59, 28, 33, 56, 37, 98, 26, 81, 13],
  4. [95, 84, 44, 16, 42, 73, 0, 53, 14, 63, 81, 91, 42, 14, 13, 59, 91, 24, 99, 71, 73, 34, 60, 65, 82, 55, 16, 75, 7, 18, 68, 6, 61, 6, 80, 41],
  5. [27, 63, 35, 81, 56, 24, 70, 27, 59, 13, 36, 62, 73, 6, 61, 86, 48, 40, 88, 71, 52, 1, 9, 57, 50, 40, 20, 10, 3, 29, 19, 94, 99, 8, 74, 83],
  6. [46, 75, 78, 14, 89, 76, 37, 26, 85, 78, 81, 27, 99, 41, 96, 52, 21, 65, 71, 48, 60, 32, 48, 31, 85, 35, 88, 5, 78, 22, 31, 97, 43, 80, 52, 45],
  7. [0, 98, 50, 12, 0, 83, 46, 66, 67, 23, 52, 55, 41, 95, 5, 17, 78, 98, 74, 45, 97, 98, 96, 54, 48, 79, 29, 0, 73, 6, 16, 33, 20, 88, 9, 23],
  8. [9, 2, 10, 57, 79, 65, 65, 0, 19, 64, 3, 18, 20, 93, 10, 30, 9, 0, 40, 51, 87, 34, 52, 71, 28, 23, 73, 61, 77, 60, 66, 91, 57, 58, 2, 9],
  9. [27, 63, 51, 6, 3, 10, 7, 36, 80, 51, 93, 71, 73, 25, 3, 77, 35, 56, 36, 36, 77, 97, 14, 1, 78, 83, 5, 51, 99, 5, 93, 90, 1, 36, 83, 4],
  10. [89, 94, 67, 64, 31, 66, 59, 16, 80, 22, 78, 72, 56, 83, 98, 10, 9, 57, 23, 4, 80, 37, 65, 30, 71, 55, 42, 9, 60, 18, 39, 58, 44, 79, 48, 29],
  11. [79, 51, 3, 82, 81, 58, 99, 88, 54, 88, 81, 5, 63, 79, 52, 64, 48, 64, 68, 11, 50, 66, 35, 71, 9, 86, 11, 97, 42, 41, 0, 2, 56, 38, 15, 63],
  12. [94, 35, 12, 94, 79, 40, 91, 45, 37, 98, 43, 30, 80, 81, 87, 19, 74, 87, 93, 35, 88, 89, 79, 44, 6, 87, 27, 49, 98, 44, 68, 39, 42, 87, 61, 84],
  13. [5, 37, 89, 80, 31, 40, 1, 10, 54, 67, 23, 1, 75, 43, 49, 27, 29, 69, 43, 41, 7, 16, 63, 70, 5, 61, 74, 87, 2, 61, 50, 72, 91, 56, 12, 99],
  14. [43, 35, 83, 94, 69, 45, 76, 73, 83, 60, 80, 31, 59, 34, 39, 63, 35, 13, 94, 78, 2, 24, 87, 21, 36, 38, 55, 19, 10, 82, 13, 95, 88, 54, 94, 75],
  15. [66, 10, 58, 21, 82, 10, 32, 91, 66, 65, 3, 12, 4, 38, 12, 96, 55, 54, 73, 16, 74, 41, 28, 49, 19, 98, 16, 90, 93, 82, 56, 68, 14, 70, 31, 19],
  16. [13, 79, 47, 31, 79, 31, 56, 65, 94, 73, 57, 35, 74, 85, 84, 39, 24, 26, 12, 56, 46, 46, 71, 0, 57, 61, 77, 32, 14, 1, 81, 71, 69, 66, 57, 69],
  17. [8, 39, 23, 14, 88, 44, 81, 46, 5, 26, 50, 11, 71, 19, 86, 33, 88, 62, 81, 13, 60, 96, 7, 78, 6, 88, 77, 94, 74, 63, 48, 40, 29, 47, 64, 6],
  18. [95, 36, 61, 3, 75, 84, 95, 8, 57, 42, 43, 77, 27, 65, 56, 78, 34, 96, 18, 23, 46, 17, 86, 17, 89, 28, 96, 18, 24, 90, 93, 49, 47, 69, 91, 48],
  19. [76, 95, 10, 10, 58, 67, 25, 41, 0, 49, 13, 40, 59, 29, 62, 64, 97, 47, 22, 42, 39, 44, 16, 95, 23, 91, 14, 48, 90, 39, 16, 92, 46, 38, 49, 16],
  20. [60, 42, 28, 28, 61, 10, 37, 90, 99, 9, 45, 15, 61, 20, 6, 89, 99, 5, 34, 28, 58, 45, 10, 43, 73, 5, 45, 78, 68, 48, 44, 56, 78, 69, 52, 99],
  21. [99, 92, 63, 87, 23, 73, 25, 25, 31, 97, 14, 12, 77, 96, 73, 80, 86, 15, 63, 71, 44, 34, 51, 28, 77, 24, 19, 74, 87, 34, 59, 40, 82, 13, 25, 15],
  22. [48, 59, 63, 45, 51, 64, 88, 99, 81, 29, 69, 27, 7, 28, 9, 77, 50, 80, 7, 64, 3, 24, 6, 22, 31, 69, 92, 66, 13, 3, 70, 81, 73, 50, 45, 42],
  23. [0, 49, 29, 50, 38, 38, 24, 71, 8, 5, 56, 6, 90, 2, 3, 35, 40, 89, 24, 27, 74, 77, 54, 7, 1, 76, 92, 16, 55, 23, 47, 62, 33, 1, 80, 47],
  24. [1, 61, 12, 89, 56, 47, 88, 63, 73, 49, 9, 78, 68, 69, 19, 53, 76, 39, 49, 83, 38, 70, 62, 79, 19, 7, 70, 4, 90, 57, 90, 20, 52, 37, 64, 17],
  25. [0, 99, 18, 20, 0, 5, 93, 66, 87, 4, 62, 47, 94, 27, 73, 82, 12, 37, 39, 63, 59, 71, 71, 36, 84, 53, 90, 93, 9, 21, 94, 76, 80, 4, 40, 30],
  26. [57, 17, 99, 26, 7, 0, 81, 29, 95, 51, 46, 8, 16, 19, 15, 48, 89, 65, 69, 14, 94, 9, 3, 78, 59, 20, 41, 45, 97, 99, 57, 52, 94, 12, 55, 28],
  27. [19, 49, 58, 20, 73, 65, 0, 72, 82, 12, 64, 43, 34, 58, 11, 74, 20, 75, 0, 23, 6, 25, 81, 39, 44, 65, 54, 57, 72, 72, 10, 69, 31, 10, 45, 20],
  28. [68, 46, 13, 68, 81, 62, 28, 75, 66, 91, 27, 31, 20, 38, 1, 45, 76, 79, 14, 62, 58, 66, 17, 79, 61, 91, 86, 33, 57, 95, 74, 7, 31, 85, 97, 80],
  29. [67, 31, 55, 44, 11, 39, 50, 79, 64, 75, 97, 13, 22, 19, 42, 58, 55, 10, 51, 37, 73, 55, 22, 40, 35, 97, 77, 92, 43, 24, 69, 25, 64, 61, 48, 77],
  30. [7, 17, 84, 29, 87, 12, 85, 22, 65, 70, 73, 14, 32, 9, 27, 3, 11, 42, 88, 20, 37, 10, 88, 77, 68, 92, 71, 80, 83, 32, 35, 85, 91, 52, 26, 73],
  31. [62, 24, 97, 27, 49, 2, 50, 36, 14, 59, 63, 1, 45, 98, 80, 64, 59, 80, 55, 96, 87, 89, 19, 81, 40, 31, 73, 48, 29, 34, 63, 11, 12, 7, 84, 28],
  32. [23, 82, 3, 66, 59, 65, 49, 80, 16, 73, 39, 69, 45, 15, 6, 14, 4, 97, 76, 57, 34, 13, 77, 72, 98, 24, 34, 54, 23, 41, 67, 6, 80, 19, 30, 92],
  33. [20, 35, 58, 63, 21, 75, 58, 8, 30, 44, 97, 21, 3, 86, 78, 89, 93, 42, 29, 89, 53, 17, 89, 6, 8, 14, 48, 98, 15, 58, 28, 46, 51, 55, 17, 78],
  34. [42, 41, 8, 12, 37, 81, 33, 58, 59, 31, 3, 67, 77, 90, 6, 2, 14, 45, 49, 28, 79, 93, 7, 75, 52, 52, 46, 86, 98, 77, 66, 38, 41, 11, 41, 2],
  35. [8, 45, 28, 85, 58, 99, 18, 86, 95, 16, 59, 45, 26, 35, 36, 96, 61, 82, 32, 20, 62, 47, 93, 3, 44, 71, 11, 11, 31, 28, 42, 7, 18, 58, 40, 89],
  36. [87, 4, 99, 46, 73, 27, 7, 44, 26, 62, 15, 10, 14, 77, 97, 70, 58, 23, 85, 73, 76, 97, 6, 92, 52, 51, 9, 84, 29, 56, 15, 38, 41, 7, 88, 76],
  37. [30, 0, 80, 70, 10, 78, 91, 80, 3, 42, 24, 70, 39, 7, 7, 43, 9, 2, 23, 96, 76, 87, 19, 11, 5, 10, 74, 10, 49, 16, 34, 54, 40, 55, 75, 93],
  38. [92, 54, 58, 53, 99, 84, 53, 50, 56, 65, 10, 89, 19, 2, 6, 94, 44, 69, 67, 60, 79, 5, 30, 23, 15, 8, 48, 26, 32, 31, 43, 59, 81, 9, 67, 93],
  39. [7, 58, 97, 4, 22, 36, 5, 83, 32, 69, 83, 54, 18, 48, 49, 43, 36, 37, 96, 0, 28, 18, 64, 56, 52, 97, 43, 95, 36, 8, 48, 35, 60, 41, 48, 81],
  40. [50, 78, 66, 51, 45, 80, 65, 87, 0, 5, 87, 91, 34, 78, 47, 89, 51, 32, 88, 64, 52, 8, 86, 59, 11, 5, 1, 12, 57, 87, 75, 83, 17, 69, 96, 61],
  41. [74, 18, 35, 33, 97, 4, 22, 39, 41, 10, 66, 59, 11, 71, 90, 28, 78, 66, 51, 25, 48, 89, 74, 62, 13, 19, 67, 99, 19, 88, 15, 83, 26, 86, 31, 93],
  42. [93, 32, 27, 13, 61, 53, 49, 35, 59, 13, 54, 68, 75, 31, 18, 79, 33, 59, 87, 86, 14, 26, 21, 19, 12, 59, 75, 36, 7, 71, 25, 25, 6, 85, 29, 99],
  43. [94, 78, 11, 70, 49, 22, 25, 67, 34, 65, 85, 58, 76, 10, 44, 22, 75, 72, 65, 54, 68, 60, 84, 52, 19, 26, 61, 69, 88, 76, 37, 41, 81, 1, 23, 57],
  44. [15, 72, 24, 37, 95, 16, 76, 61, 34, 47, 68, 93, 18, 92, 32, 17, 20, 66, 51, 33, 65, 38, 71, 45, 81, 59, 34, 35, 84, 37, 14, 6, 41, 60, 57, 54],
  45. [83, 86, 73, 77, 75, 67, 5, 92, 43, 13, 98, 92, 69, 80, 50, 25, 64, 0, 64, 25, 98, 40, 66, 77, 4, 18, 52, 50, 28, 36, 17, 54, 5, 83, 2, 40],
  46. [25, 68, 57, 61, 55, 81, 56, 71, 95, 72, 37, 21, 91, 8, 23, 26, 38, 44, 45, 84, 37, 51, 13, 42, 90, 12, 67, 21, 96, 31, 99, 97, 2, 90, 99, 56],
  47. [47, 90, 19, 59, 82, 32, 52, 99, 74, 8, 93, 18, 79, 22, 24, 63, 84, 50, 55, 86, 94, 23, 83, 65, 67, 48, 16, 15, 81, 78, 7, 43, 12, 52, 58, 28],
  48. [54, 39, 86, 53, 24, 55, 72, 2, 6, 15, 78, 8, 35, 70, 59, 80, 74, 99, 95, 32, 44, 26, 47, 49, 48, 14, 95, 66, 54, 76, 37, 81, 85, 37, 45, 7],
  49. [19, 38, 6, 31, 71, 53, 40, 85, 71, 52, 56, 25, 78, 32, 17, 85, 42, 24, 61, 42, 3, 54, 98, 68, 48, 39, 59, 59, 12, 25, 96, 98, 15, 88, 44, 45],
  50. [62, 70, 19, 57, 56, 68, 7, 13, 53, 87, 68, 69, 77, 39, 23, 94, 42, 10, 1, 28, 43, 31, 42, 48, 75, 95, 28, 10, 44, 50, 72, 47, 64, 96, 5, 63],
  51. [92, 85, 77, 92, 90, 27, 39, 57, 51, 41, 99, 78, 78, 53, 88, 59, 30, 65, 15, 25, 32, 32, 99, 64, 90, 40, 13, 45, 41, 73, 98, 12, 44, 73, 33, 32],
  52. [97, 36, 97, 58, 74, 56, 70, 80, 92, 84, 93, 16, 0, 34, 96, 85, 84, 16, 29, 22, 27, 42, 26, 40, 27, 80, 1, 40, 82, 25, 54, 31, 77, 25, 67, 73],
  53. [46, 91, 13, 50, 65, 68, 44, 15, 65, 58, 77, 21, 92, 70, 69, 95, 9, 84, 69, 71, 53, 65, 0, 33, 95, 4, 1, 28, 62, 27, 39, 38, 47, 39, 61, 81],
  54. [37, 0, 70, 66, 14, 20, 50, 68, 8, 0, 62, 41, 68, 35, 14, 69, 94, 62, 53, 84, 32, 22, 80, 81, 22, 66, 36, 65, 40, 53, 93, 0, 0, 33, 32, 7],
  55. [68, 73, 37, 13, 86, 20, 22, 97, 27, 10, 32, 57, 27, 11, 52, 7, 7, 48, 23, 14, 98, 25, 41, 6, 78, 63, 80, 38, 24, 75, 2, 61, 45, 93, 18, 94],
  56. [20, 14, 76, 73, 80, 30, 56, 33, 80, 18, 79, 66, 39, 3, 88, 25, 28, 24, 63, 88, 68, 28, 67, 49, 6, 18, 4, 49, 0, 96, 11, 22, 6, 41, 17, 50],
  57. [9, 61, 45, 7, 25, 86, 99, 39, 79, 13, 46, 74, 44, 3, 90, 43, 25, 9, 2, 27, 13, 15, 38, 98, 2, 88, 13, 51, 44, 80, 67, 85, 84, 40, 2, 68],
  58. [22, 48, 11, 46, 99, 88, 75, 32, 69, 66, 73, 10, 3, 31, 13, 44, 11, 17, 68, 0, 37, 86, 40, 92, 13, 61, 24, 69, 22, 11, 53, 1, 14, 53, 96, 29],
  59. [65, 27, 91, 56, 76, 11, 86, 34, 3, 15, 97, 42, 19, 98, 38, 78, 90, 37, 76, 55, 46, 18, 72, 92, 3, 38, 55, 54, 5, 0, 58, 24, 77, 70, 65, 55],
  60. [33, 48, 21, 34, 42, 60, 82, 33, 98, 27, 51, 33, 74, 55, 59, 96, 44, 35, 23, 28, 13, 52, 72, 9, 39, 52, 8, 30, 40, 8, 97, 43, 79, 89, 38, 80],
  61. [1, 29, 67, 37, 13, 29, 33, 96, 91, 24, 4, 67, 20, 71, 75, 95, 2, 63, 39, 14, 88, 2, 5, 17, 38, 40, 74, 79, 39, 62, 38, 58, 74, 4, 27, 97],
  62. [86, 8, 5, 54, 58, 78, 70, 51, 89, 94, 51, 55, 27, 6, 56, 44, 14, 72, 5, 27, 19, 50, 72, 58, 66, 24, 49, 28, 15, 12, 12, 37, 85, 89, 53, 38],
  63. [54, 1, 82, 23, 72, 55, 6, 96, 54, 22, 19, 63, 83, 50, 39, 75, 33, 29, 83, 14, 60, 92, 62, 83, 11, 34, 53, 77, 57, 63, 18, 17, 50, 9, 90, 36],
  64. [60, 78, 25, 81, 18, 1, 96, 39, 36, 82, 23, 78, 70, 80, 19, 55, 74, 38, 99, 37, 3, 87, 21, 26, 93, 89, 44, 13, 95, 92, 11, 71, 77, 10, 49, 90],
  65. [68, 68, 45, 82, 67, 7, 97, 49, 87, 83, 73, 70, 70, 87, 14, 37, 10, 21, 82, 71, 75, 13, 89, 93, 63, 11, 40, 18, 32, 69, 38, 53, 81, 63, 51, 76],
  66. [25, 36, 27, 62, 4, 51, 50, 74, 19, 10, 78, 94, 15, 49, 11, 26, 91, 80, 61, 80, 84, 87, 80, 52, 35, 28, 64, 91, 39, 58, 15, 55, 26, 72, 68, 35],
  67. [42, 66, 36, 17, 5, 31, 38, 90, 61, 8, 24, 0, 7, 40, 65, 67, 54, 61, 53, 16, 49, 76, 21, 63, 23, 72, 20, 9, 42, 34, 10, 6, 63, 25, 61, 28],
  68. [9, 98, 52, 95, 85, 61, 87, 96, 64, 98, 98, 83, 88, 4, 73, 29, 26, 67, 59, 34, 89, 49, 6, 16, 0, 61, 55, 76, 73, 64, 26, 63, 56, 64, 66, 86],
  69. [98, 2, 10, 34, 9, 10, 8, 46, 2, 95, 89, 65, 49, 1, 38, 15, 8, 22, 66, 80, 7, 77, 77, 70, 1, 7, 60, 59, 93, 7, 2, 98, 31, 95, 87, 18],
  70. [47, 20, 77, 92, 92, 78, 81, 7, 34, 20, 30, 40, 56, 79, 86, 84, 81, 40, 19, 28, 72, 35, 20, 85, 3, 68, 18, 4, 63, 83, 20, 12, 41, 63, 19, 58],
  71. [55, 10, 67, 18, 31, 16, 76, 57, 79, 64, 68, 37, 78, 60, 60, 46, 49, 32, 32, 3, 65, 74, 22, 79, 26, 29, 28, 86, 20, 99, 27, 99, 28, 30, 54, 20],
  72. [73, 87, 66, 32, 10, 75, 40, 94, 30, 99, 52, 10, 33, 33, 52, 36, 16, 90, 68, 62, 19, 33, 50, 22, 78, 47, 91, 22, 84, 83, 41, 17, 32, 83, 38, 23],
  73. [82, 26, 41, 53, 71, 22, 95, 55, 60, 14, 40, 42, 36, 43, 91, 50, 16, 93, 62, 72, 3, 14, 55, 48, 20, 17, 56, 38, 64, 87, 86, 92, 82, 75, 73, 76],
  74. [70, 18, 42, 41, 19, 44, 8, 90, 10, 73, 41, 39, 23, 69, 64, 55, 39, 80, 88, 13, 5, 29, 71, 53, 84, 71, 91, 97, 60, 67, 10, 15, 53, 37, 68, 91],
  75. [12, 99, 93, 43, 63, 51, 54, 89, 39, 8, 19, 27, 70, 94, 0, 70, 76, 1, 51, 30, 60, 88, 24, 69, 35, 36, 97, 43, 0, 70, 21, 84, 19, 6, 93, 92],
  76. [15, 83, 14, 61, 0, 18, 77, 34, 95, 92, 22, 76, 54, 9, 22, 43, 96, 91, 24, 12, 30, 22, 88, 72, 82, 38, 27, 10, 41, 2, 78, 25, 36, 20, 70, 55],
  77. [83, 6, 84, 58, 57, 42, 76, 75, 36, 39, 98, 55, 72, 72, 84, 81, 36, 9, 3, 44, 1, 50, 63, 1, 93, 24, 26, 20, 30, 68, 0, 24, 90, 26, 6, 88],
  78. [58, 38, 65, 42, 40, 25, 32, 39, 19, 31, 74, 36, 85, 74, 23, 20, 37, 41, 41, 63, 61, 9, 27, 39, 22, 0, 36, 34, 53, 53, 6, 40, 81, 18, 86, 8],
  79. [34, 1, 53, 24, 53, 46, 21, 59, 74, 75, 10, 49, 79, 74, 29, 68, 82, 75, 49, 62, 8, 58, 54, 34, 87, 4, 84, 34, 10, 82, 70, 35, 62, 9, 33, 77],
  80. [28, 49, 3, 98, 69, 36, 80, 53, 72, 68, 89, 22, 40, 52, 5, 66, 39, 38, 41, 45, 13, 12, 70, 12, 7, 86, 95, 83, 66, 92, 43, 13, 53, 80, 75, 33],
  81. [98, 98, 88, 3, 11, 32, 83, 24, 91, 79, 3, 55, 50, 95, 41, 69, 30, 89, 68, 47, 13, 35, 0, 86, 57, 8, 10, 31, 1, 40, 81, 2, 87, 10, 73, 0],
  82. [36, 8, 65, 86, 88, 65, 19, 33, 62, 24, 98, 34, 0, 80, 45, 53, 16, 28, 41, 65, 93, 34, 64, 85, 48, 98, 15, 51, 41, 65, 5, 9, 51, 17, 17, 91],
  83. [21, 49, 80, 99, 8, 32, 11, 36, 82, 59, 64, 59, 55, 73, 1, 23, 82, 59, 19, 16, 58, 18, 62, 36, 74, 30, 72, 79, 26, 31, 16, 40, 2, 27, 65, 26],
  84. [86, 24, 59, 75, 93, 17, 20, 42, 21, 4, 80, 0, 57, 91, 81, 84, 95, 13, 65, 85, 9, 15, 26, 90, 66, 20, 13, 98, 67, 27, 85, 49, 45, 65, 10, 84],
  85. [17, 16, 99, 46, 21, 66, 57, 69, 29, 42, 50, 92, 9, 11, 56, 62, 32, 15, 55, 25, 55, 90, 81, 74, 62, 98, 58, 65, 46, 77, 53, 10, 0, 59, 70, 91],
  86. [76, 89, 89, 89, 87, 87, 11, 51, 11, 44, 11, 50, 29, 88, 93, 31, 6, 26, 74, 34, 24, 30, 14, 74, 9, 47, 20, 17, 88, 14, 49, 87, 3, 65, 27, 73],
  87. [18, 18, 68, 23, 13, 98, 52, 92, 72, 75, 8, 8, 2, 33, 69, 23, 22, 16, 95, 76, 43, 83, 86, 27, 4, 58, 57, 97, 64, 22, 43, 32, 41, 2, 88, 26],
  88. [21, 20, 85, 29, 56, 31, 65, 45, 58, 26, 62, 21, 71, 31, 5, 57, 88, 42, 51, 39, 79, 83, 47, 99, 25, 31, 9, 24, 13, 63, 95, 78, 80, 74, 78, 89],
  89. [39, 90, 68, 22, 85, 14, 4, 20, 41, 51, 67, 75, 20, 48, 91, 65, 61, 44, 66, 3, 83, 30, 93, 23, 19, 99, 46, 88, 87, 35, 3, 88, 35, 67, 88, 28],
  90. [63, 21, 64, 10, 7, 38, 25, 17, 32, 36, 7, 99, 46, 65, 74, 71, 63, 42, 30, 72, 29, 80, 42, 65, 27, 24, 16, 16, 70, 2, 54, 60, 35, 79, 88, 39],
  91. [10, 75, 23, 44, 33, 33, 11, 13, 23, 3, 44, 37, 64, 66, 35, 32, 34, 22, 18, 15, 6, 37, 25, 36, 20, 4, 49, 58, 59, 21, 80, 95, 0, 31, 93, 28],
  92. [54, 30, 99, 86, 7, 38, 8, 18, 26, 83, 15, 83, 45, 5, 24, 67, 6, 39, 65, 67, 83, 99, 29, 41, 64, 62, 25, 53, 54, 34, 24, 41, 99, 28, 8, 29],
  93. [30, 60, 67, 20, 43, 56, 79, 43, 92, 85, 69, 9, 62, 22, 62, 24, 68, 33, 18, 61, 25, 14, 21, 59, 86, 59, 53, 26, 1, 80, 9, 36, 4, 5, 85, 47],
  94. [57, 64, 8, 17, 69, 23, 77, 29, 69, 52, 80, 86, 18, 93, 78, 17, 36, 60, 94, 25, 80, 90, 87, 86, 64, 23, 87, 95, 19, 69, 91, 82, 37, 27, 27, 46],
  95. [52, 19, 54, 87, 1, 4, 41, 68, 93, 56, 36, 13, 32, 25, 83, 48, 59, 5, 37, 58, 83, 93, 53, 77, 44, 63, 49, 1, 94, 4, 28, 30, 85, 15, 85, 90],
  96. [75, 72, 89, 33, 98, 23, 81, 41, 35, 17, 4, 1, 46, 60, 83, 69, 27, 35, 33, 83, 61, 61, 21, 72, 82, 72, 82, 6, 59, 51, 60, 37, 82, 20, 88, 54],
  97. [20, 37, 13, 75, 81, 78, 36, 75, 22, 45, 81, 63, 58, 72, 81, 7, 9, 39, 49, 8, 84, 66, 71, 58, 41, 56, 5, 2, 83, 47, 16, 3, 93, 95, 97, 10],
  98. [94, 83, 74, 92, 8, 10, 12, 92, 28, 28, 31, 98, 10, 33, 62, 70, 85, 53, 8, 31, 75, 67, 38, 2, 5, 85, 44, 25, 54, 69, 33, 61, 75, 57, 79, 82],
  99. [60, 34, 79, 9, 2, 28, 80, 24, 2, 76, 26, 34, 61, 22, 40, 31, 52, 14, 30, 2, 88, 54, 41, 73, 6, 45, 13, 22, 70, 51, 74, 69, 19, 66, 33, 78],
  100. [3, 11, 50, 41, 23, 41, 45, 2, 62, 95, 55, 73, 1, 98, 33, 68, 82, 96, 24, 81, 1, 58, 59, 41, 45, 9, 99, 49, 16, 97, 54, 75, 92, 14, 71, 63],
  101. [18, 73, 63, 61, 88, 15, 27, 49, 82, 95, 0, 54, 71, 76, 64, 65, 84, 39, 61, 56, 52, 60, 88, 92, 75, 83, 94, 61, 76, 76, 14, 11, 5, 95, 71, 68],]
  102.  
  103. template = """
  104. decdef Idx as {0..5}.
  105. decdef Num as {<NUMBERS>}.
  106. declare grid: Idx, Idx -> Num.
  107.  
  108. declare multiplicity: Num -> {1..<MAXMULT>}.
  109. define multiplicity as {<MULT>} default 1.
  110.  
  111. // Each number has exactly its multiplicity in the grid
  112. forall n where Num(n):
  113. count [grid(r,c)=n for r,c where Idx(r) and Idx(c)] = multiplicity(n).
  114.  
  115. // Each row is descendingly sorted
  116. forall r where Idx(r):
  117. forall c where Idx(c) and c<5:
  118. grid(r,c) > grid(r,c+1).
  119.  
  120. // Each column is descendingly sorted
  121. forall c where Idx(c):
  122. forall r where Idx(r) and r<5:
  123. grid(r,c) > grid(r+1,c).
  124. """
  125.  
  126. from collections import Counter
  127. import subprocess
  128.  
  129. def checkgrid(sequence, grid):
  130. nums = sorted([x for row in grid for x in row])
  131. if nums != sorted(sequence):
  132. return False
  133. for row in grid:
  134. if row != sorted(row, reverse=True):
  135. return False
  136. for i in range(0, 6):
  137. col = [row[i] for row in grid]
  138. if col != sorted(col, reverse=True):
  139. return False
  140. return True
  141.  
  142.  
  143. total_impossible = 0
  144. for idx,sequence in enumerate(data):
  145. # Create the ManyWorlds program
  146. counts = Counter(sequence)
  147. spec = template
  148. spec = spec.replace("<NUMBERS>", ", ".join(str(k) for k in counts.keys()))
  149. spec = spec.replace("<MAXMULT>", str(max(counts.values())))
  150. spec = spec.replace(
  151. "<MULT>", ", ".join(f"({k},{v})" for k, v in counts.items() if v > 1)
  152. )
  153.  
  154. # Run the ManyWorlds program
  155. res = subprocess.run(
  156. ["./ManyWorlds", "--stream-input", "find"],
  157. input=spec,
  158. text=True,
  159. capture_output=True,
  160. )
  161.  
  162. # Parse the output and print in desired format
  163. if "FOUND UNSATISFIABILITY" in res.stdout:
  164. print(idx,"impossible")
  165. total_impossible += 1
  166. else:
  167. grid = []
  168. for i in range(0, 6):
  169. grid.append([-1] * 6)
  170. for line in res.stdout.splitlines():
  171. if not line.startswith("define grid as"):
  172. continue
  173. for tup in line.split("{(")[1].split(")}")[0].split("),("):
  174. t = tuple(int(x) for x in tup.split(","))
  175. grid[t[0]][t[1]] = t[2]
  176. assert checkgrid(sequence, grid) # Always good to run a check ;)
  177. print(idx,grid)
  178.  
  179. print("total impossible:", total_impossible)
  180.  
Advertisement
Add Comment
Please, Sign In to add comment