gpt4 book ai didi

algorithm - Racket - 切割 din Ax 的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:23:05 26 4
gpt4 key购买 nike

我正在开发一个迷你游戏,如果我将 DIN-Ax 作为输入,我需要找出可以在 DIN-A0 纸上画多少行。例如:

;car horizontal and cdr vertical lines
(define A1 (list 0 1))
(define A2 (list 1 1))
(define A3 (list 1 3))
(define A4 (list 3 3))
(define A5 (list 3 7))
(define A6 (list 7 7))
(define A7 (list 7 15))
(define A8 (list 15 15))
(define A9 (list 15 31))
(define A10(list 31 31))

如果我输入 A1,我可以绘制 0 条水平线和 1 条垂直线,依此类推。我手工计算了它们,但我想知道是否有更优雅的算法来自动获取它,因为我无法开发一个。以下是有关 DIn 的更多信息: http://en.wikipedia.org/wiki/ISO_216

谢谢

编辑:这说明了我的意思。

http://www.prepressure.com/library/paper-size/din-a4

使用 A1,您可以绘制 (0 1),表示 1 条垂直线。使用 A2,您可以绘制 (1 1) 表示 1 条水平线和 1 条垂直线,因为 A0 工作表中有四个 A2。依此类推 A3 (1 3)...

编辑:几乎完成,我只需要弄清楚如何处理第一次迭代,因为如果我写 (get-cuts 1 0 0 0) 我得到 DIN Ax-1 削减。当我有更多时间时,我会解决它。

(define (get-cuts DIN-A count vl hl)
(cond
((= DIN-A count) (list vl hl))
((not(= (modulo count 2) 0)) (get-cuts DIN-A (+ count 1) hl (+(* hl 2) 1))) ; DIN-A impares
((= (modulo count 2) 0) (get-cuts DIN-A (+ count 1) hl hl )) ; DIN-A pares
)
)

最佳答案

你想要的是一种算法,所以我做了一个:

假设您可以为 A0 绘制 0 水平线(我们称之为 A0.hl)和 0 垂直线行(我们称之为 A0.vl)。

然后对于A1你可以分别绘制A0.vl(A0.vl*2)+1水平线和垂直线。

与 A2 类似,您可以绘制 A1.vl(A1 的垂直线数)水平线和完全相同数量的垂直线(这是因为我们正在检查一对数字 [2] ).

因此,对于任何 x>1x%2 != 0:对于 Ax,您可以绘制 A x-1.vl 水平线和 (A*x-2.vl* * 2) + 1 垂直线。

并且对于任何 x>1x%2 == 0:对于 Ax,您可以绘制 Ax -1.vl 水平线和 Ax-1.vl 垂直线。

你可以用尾递归来做到这一点;也许保留对数和奇数(4 个变量)的水平和垂直线的数量,但也许有一种简单的方法不必保留所有这些变量。我会再考虑一下,但我现在得走了。

希望这可以帮助您获得更好的主意!

如有任何疑问,请告诉我们 ;)

关于algorithm - Racket - 切割 din Ax 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com