明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 670|回复: 13

[基础] 报数分组,这个很简单,幼儿园就开始报数了不是?

[复制链接]
发表于 2024-12-30 10:44:53 | 显示全部楼层 |阅读模式
本帖最后由 llsheng_73 于 2024-12-30 13:11 编辑
  1. (defun tt(lst n / i a b l);;;大家都报1、2、3、...、n,1、2、3、...、n......,最后所有报数相同的组成一组,共n组
  2.   (setq i 0 l(list(list 0(car lst)))lst(cdr lst))
  3.   (while lst
  4.     (setq i(rem(1+ i)n)
  5.           a(car lst)lst(cdr lst)
  6.           b(assoc i l)
  7.           l(if b(subst(vl-list* i a(cdr b))b l)
  8.              (cons(list i a)l))))
  9.   (mapcar(function(lambda(x)(reverse(cdr x))))(reverse l))
  10.   )


点评

我给解释下;就是;报2分两组;报3分三组,报4分四组.... (tt '(1 2 3 4 5 6 1 2 3 4 5 6 2 5 2 4 2) 5)-->>((1 6 5 4) (2 1 6 2) (3 2 2) (4 3 5) (5 4 2))  发表于 2024-12-30 10:59

评分

参与人数 1明经币 +1 收起 理由
zm880928 + 1 不明觉厉

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2024-12-30 11:54:01 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2024-12-30 11:58 编辑

据说nth较慢,当lst很大小,73这个就慢了。
又听说,cadddr这个函数最多以4到,lst 用repeat 4 处理,就快了。
  1. (defun XD-List-Nth++ (L s n)
  2.   (repeat (/ s 4) (setq L (cddddr L)))
  3.   (repeat (rem s 4) (setq L (cdr L)))
  4.   (setq s nil)
  5.   (if (and L n)
  6.     (cond ((>= n (length L)) L)
  7.     ((< n (- (length L) n))
  8.      (repeat (/ n 4)
  9.        (setq s (cons (cadddr L)
  10.          (cons (caddr L) (cons (cadr L) (cons (car L) s)))
  11.          )
  12.        L (cddddr L)
  13.        )
  14.      )
  15.      (repeat (rem n 4)
  16.        (setq s (cons (car L) s)
  17.        L (cdr L)
  18.        )
  19.      )
  20.      (reverse s)
  21.     )
  22.     (t
  23.      (setq L (reverse L)
  24.      s (- (length L) n)
  25.      )
  26.      (repeat (/ s 4) (setq L (cddddr L)))
  27.      (repeat (rem s 4) (setq L (cdr L)))
  28.      (reverse L)
  29.     )
  30.     )
  31.     L
  32.   )
  33. )

回复 支持 反对

使用道具 举报

发表于 2024-12-30 14:32:01 | 显示全部楼层
本帖最后由 菜卷鱼 于 2024-12-30 15:37 编辑


  1. 按顺序分组

  2. (defun tt1 (lst n / a xl nl)
  3.   (while lst
  4.     (setq a (car lst))
  5.     (setq lst (cdr lst))
  6.     (if  (= (length nl) n)
  7.       (setq xl (cons (reverse nl) xl)
  8.       nl nil
  9.       )
  10.     )
  11.     (setq nl (cons a nl))
  12.   )
  13.   (if nl
  14.     (setq xl (cons (reverse nl) xl))
  15.   )
  16.   (reverse xl)
  17. )
  18. 题目要求分组
  19. (defun tt2 (lst n / xl a x)
  20. ;;;组变量
  21.   (setq i 0)
  22.   (repeat n
  23.     (setq xl (cons (read (strcat "x" (itoa i))) xl))
  24.     (setq i (1+ i))
  25.   )
  26. ;;;变量初始化
  27.   (foreach x xl
  28.     (set x nil)
  29.   )
  30. ;;;变量赋值
  31.   (while lst
  32.     (foreach x xl
  33.       (setq a (car lst))
  34.       (setq lst (cdr lst))
  35.       (if a
  36.   (set x (cons a (eval x)))
  37.       )
  38.     )
  39.     lst
  40.   )
  41.   (mapcar 'reverse (mapcar 'eval xl))
  42. )


回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-30 13:13:51 | 显示全部楼层
自贡黄明儒 发表于 2024-12-30 11:54
据说nth较慢,当lst很大小,73这个就慢了。
又听说,cadddr这个函数最多以4到,lst 用repeat 4 处理,就快 ...

NTH确实是个问题,然后增加了索引项用ASSOC去取值来避免这个尴尬
回复 支持 反对

使用道具 举报

发表于 2024-12-30 11:38:42 | 显示全部楼层
感谢大佬的代码。我好好学习一下~
回复 支持 反对

使用道具 举报

发表于 2024-12-30 15:07:48 | 显示全部楼层
菜卷鱼 发表于 2024-12-30 14:32
看错了题目,等下再来

点兵点将,凡是点到2的站出来
回复 支持 反对

使用道具 举报

发表于 2024-12-30 15:26:10 | 显示全部楼层
表中数量非N倍 ,可行?
回复 支持 反对

使用道具 举报

发表于 2024-12-30 15:39:16 | 显示全部楼层
自贡黄明儒 发表于 2024-12-30 15:07
点兵点将,凡是点到2的站出来

搞定了,,,一开始既然错了,代码也写了,一并贴出来啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-30 15:51:01 | 显示全部楼层
chslwj521 发表于 2024-12-30 15:26
表中数量非N倍 ,可行?

(tt '(1 2 3 4 5 6 7 8 9 10)3)=>((1 4 7 10) (2 5 8) (3 6 9))
(tt '(1 2 3 4 5 6 7 8 9 10)4)=>((1 5 9) (2 6 10) (3 7) (4 8))
回复 支持 反对

使用道具 举报

发表于 2024-12-30 16:11:46 | 显示全部楼层
llsheng_73 发表于 2024-12-30 15:51
(tt '(1 2 3 4 5 6 7 8 9 10)3)=>((1 4 7 10) (2 5 8) (3 6 9))
(tt '(1 2 3 4 5 6 7 8 9 10)4)=>((1 5  ...

不错,不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-22 19:10 , Processed in 0.267148 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表