【发布时间】:2015-05-16 18:14:30
【问题描述】:
我正在开发一个迷你游戏,如果我输入 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
)
)
【问题讨论】:
-
当您说“等等”时,我知道在 A2 中您可以绘制 1 条水平线和 2 条垂直线,但是在您提供的代码中,您将 A2 定义为
(1 1)。哪个不正确? -
对不起,我的意思是 A1 A2 列表中的等等......在 A0 中,您可以安装 4 个 A2,这就是为什么它是 1 1。
-
水平/垂直线是什么意思?你能画出“画”一条线的样子吗?举个例子……我们需要更多关于你的问题的信息,试着多解释一下自己。
-
添加了一个有插图的网站。希望现在很清楚
-
如果您不断将每个新部分分成两半,您的行数将不受限制。你想去兔子洞多远?