lijiao 发表于 2023-8-7 11:32:00

(setq wse '((0 8 1) (3 5 2) (7 9)))
(setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))

(vl-remove nil (mapcar '(lambda(x)
                          (if (setq owse (vl-remove-if-not '(lambda(y)
                                                              (<= (car y) (car x) (cadr x) (cadr y))
                                                              )
                                           wse)
                                  )
                          (mapcar '(lambda(y)
                                     (append x (if (cddr y) (cddr y) '(256)))
                                     )
                                  owse)
                          )
                          )
                     gws)
)

结果:(((1 1 1)) ((3 5 1) (3 5 2)) ((8 8 1) (8 8 256)) ((2 7 1)))

`中微子 发表于 2023-8-7 11:43:41

vormittag 发表于 2023-8-7 10:59
首先要先证明这个问题的解存在,接着再证明这个解唯一,最后再考虑怎么解。
你先把满足解存在、且唯一的条 ...

是的,我还是配个图来解释一下,马上更新。

`中微子 发表于 2023-8-7 11:59:43

已有模板WSE,从乱线gws中筛选出符合要的线段并赋予模板的颜色。
javascript:;

`中微子 发表于 2023-8-7 12:13:34

lijiao 发表于 2023-8-7 11:32
(setq wse '((0 8 1) (3 5 2) (7 9)))
(setq gws '((1 1) (3 5) (6 10) (8 10) (8 8) (2 7)))



学习了,也是另一种思路。

xyp1964 发表于 2023-8-7 12:43:08


(defun c:tt (/ lst)
;; 结果: ((1 3 1) (2 4 1) (7.5 8 2) (11.2 11.7 256))
(setq wse '((0 5 1) (7 9 2) (11 12 256))
        gws '((-1 2)(1 3)(2 4)(4 6)(5.5 8)(7.5 8)(8 10)(10.5 14)(11.2 11.7))
)
(foreach a wse
    (setq co (last a))
    (foreach b gws
      (if (and (>= (car b) (car a))(<= (cadr b) (cadr a)))
        (setq lst (cons (append b (list co)) lst))
      )
    )
)
(setq lst (reverse lst))
(print lst)
(princ)
)



lijiao 发表于 2023-8-7 13:36:14

如果模板没有重叠,可以这样
(vl-remove nil (mapcar '(lambda(x)
                        (if (setq owse (vl-remove-if-not '(lambda(y)
                                                            (<= (car y) (car x) (cadr x) (cadr y))
                                                            )
                                           wse)
                                    )
                            (append x (if (caddr y) (caddr y) '(256)))
                                       )
                        )
                     gws)
)

`中微子 发表于 2023-8-7 14:59:42

xyp1964 发表于 2023-8-7 12:43


非常感谢版主,和我的思路一样,是我出了bug,现在解决了。谢谢!

e2002 发表于 2023-8-8 11:03:03

应该首先给出规则图示与说明,否则完全无法理解你的需求呀...
看了图示就简单了。
页: 1 [2]
查看完整版本: 遇到一个难题(表范图内对比选择)已经三天三夜没有解决了,忘大神能排忧解难,谢谢!