Author Topic: Find the result n1 m1 n2 m2  (Read 3009 times)

0 Members and 1 Guest are viewing this topic.

well20152016

  • Newt
  • Posts: 130
Re: Find the result n1 m1 n2 m2
« Reply #15 on: December 22, 2021, 11:19:36 PM »
Here is a faster version (faster than my previous one)

Code - Auto/Visual Lisp: [Select]
  1. (defun decomp (n l / fact sol res)
  2.  
  3.   (defun fact (n / l)
  4.     (repeat (1+ n)
  5.       (setq l (cons n l)
  6.             n (1- n)
  7.       )
  8.     )
  9.     l
  10.   )
  11.  
  12.   (defun sol (n l r)
  13.     (cond
  14.       (l
  15.         (foreach x (if
  16.                      (cadr l)
  17.                      (fact (fix (/ n (car l))))
  18.                      (if
  19.                        (zerop (rem n (car l)))
  20.                        (list (fix (/ n (car l))))
  21.                      )
  22.                    )
  23.           (sol (- n (* x (car l))) (cdr l) (cons x r))
  24.         )
  25.       )
  26.       ((zerop n)
  27.        (setq res (cons (reverse r) res))
  28.        nil
  29.       )
  30.     )
  31.   )
  32.  
  33.   (sol n l nil)
  34.  
  35.   res
  36. )

@ LeeMac, this looks similar to your "give change" challenge. I wonder if we can use here some of the ideas.

How fast is ARX?

well20152016

  • Newt
  • Posts: 130
Re: Find the result n1 m1 n2 m2
« Reply #16 on: December 26, 2021, 12:05:41 AM »
Code - HTML5: [Select]
  1. (8 3 5.5 4.5 2.5 1.5) x (3 0 0 0 1 1) = 28.0 -1
  2. (8 3 5.5 4.5 2.5 1.5) x (2 3 0 0 0 2) = 28.0 -2
  3. (8 3 5.5 4.5 2.5 1.5) x (2 2 0 1 0 1) = 28.0 -3
  4. (8 3 5.5 4.5 2.5 1.5) x (2 2 0 0 0 4) = 28.0 -4
  5. (8 3 5.5 4.5 2.5 1.5) x (2 1 0 2 0 0) = 28.0 -5
  6. (8 3 5.5 4.5 2.5 1.5) x (2 1 0 1 0 3) = 28.0 -6
  7. (8 3 5.5 4.5 2.5 1.5) x (2 1 0 0 3 1) = 28.0 -7
  8. (8 3 5.5 4.5 2.5 1.5) x (2 1 0 0 0 6) = 28.0 -8
  9. (8 3 5.5 4.5 2.5 1.5) x (2 0 1 0 2 1) = 28.0 -9
  10. (8 3 5.5 4.5 2.5 1.5) x (2 0 0 2 0 2) = 28.0 -10
  11. (8 3 5.5 4.5 2.5 1.5) x (2 0 0 1 3 0) = 28.0 -11
  12. (8 3 5.5 4.5 2.5 1.5) x (2 0 0 1 0 5) = 28.0 -12
  13. (8 3 5.5 4.5 2.5 1.5) x (2 0 0 0 3 3) = 28.0 -13
  14. (8 3 5.5 4.5 2.5 1.5) x (2 0 0 0 0 8) = 28.0 -14
  15. (8 3 5.5 4.5 2.5 1.5) x (1 4 1 0 1 0) = 28.0 -15
  16. (8 3 5.5 4.5 2.5 1.5) x (1 4 0 0 2 2) = 28.0 -16
  17. (8 3 5.5 4.5 2.5 1.5) x (1 3 2 0 0 0) = 28.0 -17
  18. (8 3 5.5 4.5 2.5 1.5) x (1 3 1 0 1 2) = 28.0 -18
  19. (8 3 5.5 4.5 2.5 1.5) x (1 3 0 1 2 1) = 28.0 -19
  20. (8 3 5.5 4.5 2.5 1.5) x (1 3 0 0 2 4) = 28.0 -20
  21. (8 3 5.5 4.5 2.5 1.5) x (1 2 2 0 0 2) = 28.0 -21
  22. (8 3 5.5 4.5 2.5 1.5) x (1 2 1 1 1 1) = 28.0 -22
  23. (8 3 5.5 4.5 2.5 1.5) x (1 2 1 0 1 4) = 28.0 -23
  24. (8 3 5.5 4.5 2.5 1.5) x (1 2 0 2 2 0) = 28.0 -24
  25. (8 3 5.5 4.5 2.5 1.5) x (1 2 0 1 2 3) = 28.0 -25
  26. (8 3 5.5 4.5 2.5 1.5) x (1 2 0 0 5 1) = 28.0 -26
  27. (8 3 5.5 4.5 2.5 1.5) x (1 2 0 0 2 6) = 28.0 -27
  28. (8 3 5.5 4.5 2.5 1.5) x (1 1 2 1 0 1) = 28.0 -28
  29. (8 3 5.5 4.5 2.5 1.5) x (1 1 2 0 0 4) = 28.0 -29
  30. (8 3 5.5 4.5 2.5 1.5) x (1 1 1 2 1 0) = 28.0 -30
  31. (8 3 5.5 4.5 2.5 1.5) x (1 1 1 1 1 3) = 28.0 -31
  32. (8 3 5.5 4.5 2.5 1.5) x (1 1 1 0 4 1) = 28.0 -32
  33. (8 3 5.5 4.5 2.5 1.5) x (1 1 1 0 1 6) = 28.0 -33
  34. (8 3 5.5 4.5 2.5 1.5) x (1 1 0 2 2 2) = 28.0 -34
  35. (8 3 5.5 4.5 2.5 1.5) x (1 1 0 1 5 0) = 28.0 -35
  36. (8 3 5.5 4.5 2.5 1.5) x (1 1 0 1 2 5) = 28.0 -36
  37. (8 3 5.5 4.5 2.5 1.5) x (1 1 0 0 5 3) = 28.0 -37
  38. (8 3 5.5 4.5 2.5 1.5) x (1 0 2 2 0 0) = 28.0 -38
  39. (8 3 5.5 4.5 2.5 1.5) x (1 0 2 1 0 3) = 28.0 -39
  40. (8 3 5.5 4.5 2.5 1.5) x (1 0 2 0 3 1) = 28.0 -40
  41. (8 3 5.5 4.5 2.5 1.5) x (1 0 2 0 0 6) = 28.0 -41
  42. (8 3 5.5 4.5 2.5 1.5) x (1 0 1 2 1 2) = 28.0 -42
  43. (8 3 5.5 4.5 2.5 1.5) x (1 0 1 1 4 0) = 28.0 -43
  44. (8 3 5.5 4.5 2.5 1.5) x (1 0 1 1 1 5) = 28.0 -44
  45. (8 3 5.5 4.5 2.5 1.5) x (1 0 1 0 4 3) = 28.0 -45
  46. (8 3 5.5 4.5 2.5 1.5) x (1 0 1 0 1 8) = 28.0 -46
  47. (8 3 5.5 4.5 2.5 1.5) x (1 0 0 3 2 1) = 28.0 -47
  48. (8 3 5.5 4.5 2.5 1.5) x (1 0 0 2 2 4) = 28.0 -48
  49. (8 3 5.5 4.5 2.5 1.5) x (1 0 0 1 5 2) = 28.0 -49
  50. (8 3 5.5 4.5 2.5 1.5) x (1 0 0 1 2 7) = 28.0 -50
  51. (8 3 5.5 4.5 2.5 1.5) x (1 0 0 0 8 0) = 28.0 -51
  52. (8 3 5.5 4.5 2.5 1.5) x (0 5 1 1 0 2) = 28.0 -52
  53. (8 3 5.5 4.5 2.5 1.5) x (0 5 1 0 3 0) = 28.0 -53
  54. (8 3 5.5 4.5 2.5 1.5) x (0 5 1 0 0 5) = 28.0 -54
  55. (8 3 5.5 4.5 2.5 1.5) x (0 5 0 2 1 1) = 28.0 -55
  56. (8 3 5.5 4.5 2.5 1.5) x (0 5 0 1 1 4) = 28.0 -56
  57. (8 3 5.5 4.5 2.5 1.5) x (0 5 0 0 4 2) = 28.0 -57
  58. (8 3 5.5 4.5 2.5 1.5) x (0 5 0 0 1 7) = 28.0 -58
  59. (8 3 5.5 4.5 2.5 1.5) x (0 4 2 0 2 0) = 28.0 -59
  60. (8 3 5.5 4.5 2.5 1.5) x (0 4 1 2 0 1) = 28.0 -60
  61. (8 3 5.5 4.5 2.5 1.5) x (0 4 1 1 0 4) = 28.0 -61
  62. (8 3 5.5 4.5 2.5 1.5) x (0 4 1 0 3 2) = 28.0 -62
  63. (8 3 5.5 4.5 2.5 1.5) x (0 4 1 0 0 7) = 28.0 -63
  64. (8 3 5.5 4.5 2.5 1.5) x (0 4 0 3 1 0) = 28.0 -64
  65. (8 3 5.5 4.5 2.5 1.5) x (0 4 0 2 1 3) = 28.0 -65
  66. (8 3 5.5 4.5 2.5 1.5) x (0 4 0 1 4 1) = 28.0 -66
  67. (8 3 5.5 4.5 2.5 1.5) x (0 4 0 1 1 6) = 28.0 -67
  68. (8 3 5.5 4.5 2.5 1.5) x (0 4 0 0 4 4) = 28.0 -68
  69. (8 3 5.5 4.5 2.5 1.5) x (0 3 3 0 1 0) = 28.0 -69
  70. (8 3 5.5 4.5 2.5 1.5) x (0 3 2 0 2 2) = 28.0 -70
  71. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 3 0 0) = 28.0 -71
  72. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 2 0 3) = 28.0 -72
  73. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 1 3 1) = 28.0 -73
  74. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 1 0 6) = 28.0 -74
  75. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 0 3 4) = 28.0 -75
  76. (8 3 5.5 4.5 2.5 1.5) x (0 3 1 0 0 9) = 28.0 -76
  77. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 3 1 2) = 28.0 -77
  78. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 2 4 0) = 28.0 -78
  79. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 2 1 5) = 28.0 -79
  80. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 1 4 3) = 28.0 -80
  81. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 1 1 8) = 28.0 -81
  82. (8 3 5.5 4.5 2.5 1.5) x (0 3 0 0 7 1) = 28.0 -82
  83. (8 3 5.5 4.5 2.5 1.5) x (0 2 4 0 0 0) = 28.0 -83
  84. (8 3 5.5 4.5 2.5 1.5) x (0 2 3 0 1 2) = 28.0 -84
  85. (8 3 5.5 4.5 2.5 1.5) x (0 2 2 1 2 1) = 28.0 -85
  86. (8 3 5.5 4.5 2.5 1.5) x (0 2 2 0 2 4) = 28.0 -86
  87. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 3 0 2) = 28.0 -87
  88. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 2 3 0) = 28.0 -88
  89. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 2 0 5) = 28.0 -89
  90. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 1 3 3) = 28.0 -90
  91. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 1 0 8) = 28.0 -91
  92. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 0 6 1) = 28.0 -92
  93. (8 3 5.5 4.5 2.5 1.5) x (0 2 1 0 3 6) = 28.0 -93
  94. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 4 1 1) = 28.0 -94
  95. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 3 1 4) = 28.0 -95
  96. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 2 4 2) = 28.0 -96
  97. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 2 1 7) = 28.0 -97
  98. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 1 7 0) = 28.0 -98
  99. (8 3 5.5 4.5 2.5 1.5) x (0 2 0 1 4 5) = 28.0 -99
  100. (8 3 5.5 4.5 2.5 1.5) x (0 1 4 0 0 2) = 28.0 -100
  101. (8 3 5.5 4.5 2.5 1.5) x (0 1 3 1 1 1) = 28.0 -101
  102. (8 3 5.5 4.5 2.5 1.5) x (0 1 3 0 1 4) = 28.0 -102
  103. (8 3 5.5 4.5 2.5 1.5) x (0 1 2 2 2 0) = 28.0 -103
  104. (8 3 5.5 4.5 2.5 1.5) x (0 1 2 1 2 3) = 28.0 -104
  105. (8 3 5.5 4.5 2.5 1.5) x (0 1 2 0 5 1) = 28.0 -105
  106. (8 3 5.5 4.5 2.5 1.5) x (0 1 2 0 2 6) = 28.0 -106
  107. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 4 0 1) = 28.0 -107
  108. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 3 0 4) = 28.0 -108
  109. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 2 3 2) = 28.0 -109
  110. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 2 0 7) = 28.0 -110
  111. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 1 6 0) = 28.0 -111
  112. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 1 3 5) = 28.0 -112
  113. (8 3 5.5 4.5 2.5 1.5) x (0 1 1 0 6 3) = 28.0 -113
  114. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 5 1 0) = 28.0 -114
  115. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 4 1 3) = 28.0 -115
  116. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 3 4 1) = 28.0 -116
  117. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 3 1 6) = 28.0 -117
  118. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 2 4 4) = 28.0 -118
  119. (8 3 5.5 4.5 2.5 1.5) x (0 1 0 1 7 2) = 28.0 -119
  120. (8 3 5.5 4.5 2.5 1.5) x (0 0 4 1 0 1) = 28.0 -120
  121. (8 3 5.5 4.5 2.5 1.5) x (0 0 4 0 0 4) = 28.0 -121
  122. (8 3 5.5 4.5 2.5 1.5) x (0 0 3 2 1 0) = 28.0 -122
  123. (8 3 5.5 4.5 2.5 1.5) x (0 0 3 1 1 3) = 28.0 -123
  124. (8 3 5.5 4.5 2.5 1.5) x (0 0 3 0 4 1) = 28.0 -124
  125. (8 3 5.5 4.5 2.5 1.5) x (0 0 3 0 1 6) = 28.0 -125
  126. (8 3 5.5 4.5 2.5 1.5) x (0 0 2 2 2 2) = 28.0 -126
  127. (8 3 5.5 4.5 2.5 1.5) x (0 0 2 1 5 0) = 28.0 -127
  128. (8 3 5.5 4.5 2.5 1.5) x (0 0 2 1 2 5) = 28.0 -128
  129. (8 3 5.5 4.5 2.5 1.5) x (0 0 2 0 5 3) = 28.0 -129
  130. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 5 0 0) = 28.0 -130
  131. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 4 0 3) = 28.0 -131
  132. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 3 3 1) = 28.0 -132
  133. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 3 0 6) = 28.0 -133
  134. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 2 3 4) = 28.0 -134
  135. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 2 0 9) = 28.0 -135
  136. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 1 6 2) = 28.0 -136
  137. (8 3 5.5 4.5 2.5 1.5) x (0 0 1 0 9 0) = 28.0 -137
  138. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 5 1 2) = 28.0 -138
  139. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 4 4 0) = 28.0 -139
  140. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 4 1 5) = 28.0 -140
  141. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 3 4 3) = 28.0 -141
  142. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 3 1 8) = 28.0 -142
  143. (8 3 5.5 4.5 2.5 1.5) x (0 0 0 2 7 1) = 28.0 -143
  144. Completion time :0.46seconds

Code - Auto/Visual Lisp: [Select]
  1. ;;;  (list 8 3 5) :(list Value1 Value2 quantity1)
  2. ;;;   (list 5.5 4.5 8) :(list Value3 Value4 quantity2)
  3. ;;;  (list 2.5 1.5 9) :(list Value5 Value6 quantity3)
  4. (defun c:tt()
  5.   (setq t1 (getvar "TDUSRTIMER"))
  6.   (sol2 28 (list (list 8 3 5) (list 5.5 4.5 8) (list 2.5 1.5 9)))
  7.   (princ (strcat "\n""Completion time :" (rtos (* 86400(-(getvar "TDUSRTIMER")t1)) 2 2) "seconds"))
  8.  
  9. (defun sol2(n l)
  10.   (setq l1 (apply 'append (mapcar'(lambda(x) (list (car x)(cadr x))) l))
  11.         l2 (vl-remove-if-not (function(lambda (x)(apply 'and (mapcar(function(lambda(y z) (<= (apply '+ y) (caddr z)))) (List-Div x 2) l)))) (decomp n l1))
  12.         )
  13.   (setq i 1)
  14.   (foreach x l2
  15.     (print l1)
  16.     (princ "x ")
  17.     (princ x)
  18.     (princ " = ")
  19.     (princ (apply '+ (mapcar '* x l1)))
  20.     (princ " -")
  21.     (princ i)
  22.     (setq i (1+ i))
  23.   )
  24. )
  25.  
« Last Edit: December 26, 2021, 12:09:47 AM by well20152016 »