Lisp 实验作业(数独) 学号: 姓名:
作业描述:请根据提示完成三个函数的设计和调试,使这三 个函数分别达到解开数独的一部分功能。
– 使用Clisp开发
– 数独将会在 9*9 的方格内完成
Copyright By PowCoder代写 加微信 powcoder
– 将以上 81 个格子分成 9 个 3*3 规格的格子 – 请满足以下条件并填充数字
每个水平线和垂直线都有 1-9 这 9 个数字,并且不能出现重复
3*3 规格的格子内都有 1-9 这 9 个数字,并且不能出现重复
空的格子内将会暂时以 0 代替。
调用解题函数(solveBoard‘((035… (7 8 2 …
在空白中填充随机数字,并确保其正确无 重复。(checkBoard ‘((1 3 5 …
(7 8 2 …
如果正确,则继续对数独板进行递归 (solveBoard ‘((1 3 5 …
(7 8 2 …
完成全部遍历后输出结果值
(printBoard ‘((1 3 5 … (7 8 2 …
题目 1:printBoard 函数(5 分)
– 语法: (printBoard [sudokuBoard]) – 功能:输出给定的数独板
输入:表示要输出的数独的列表 假设仅输入正确的数独盘
输出:返回为数独板字符串,包含 9 个 3×3(请参阅示例格式)
(printBoard‘((000000000)(000000000)(00000000
0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0
0 0 0 0 0) (0 0 0 0 0 0 0 0 0) (0 0 0 0 0 0 0 0 0)))
Concatenate函数
(concatenate (dataType) (data1) (data2)) 功能:合并两个给定数据。用于合并字符串 例子:
(concatenate ‘string “aa” “AA”) “aaAA” (concatenate ‘list ‘(1 2) ‘(3 4)) (1 2 3 4)
format函数
~%: 换行符(类似于 C 语言中的\n):
(format nil “aa~%aa”)
~a: 输出元素
(format nil “~a” 1) “1”
(formatnil“~a”7) “7”
(formatnil“~a”7) “7”
(format nil “~a ~a” “Hello” “World”) “Hello World”
请复制并使用┌, ─, ┬, ┐, │, ├, ┼, ┤,
└, ┴, ┘作为边框
题目 2: checkBoard 函数(5 分)
– 语法:(checkBoard [sudokuBoard] [xIndex] [yIndex])
– 功能:确保给定数独板的 (x, y) 数字正确 – I/O
输入:表示数独的列表和要检查的数字的 x 坐标、y 坐标 假设仅输入正常数独
版,则 x 和 y 坐标的数字为 0(列表的开头)到 8(结束)
输出:检查结果(左、右、上、下)(如果相同数字在上下左右9个空格内出
现,输出 NIL;没有出现,则输出 T)。
创建包含要检查的数字的 x 轴、y 轴和 3×3 盘上的数字列表 递归确定列表中是否有要检查的数字和重复的数字
(and (booleanValue) (booleanValue) …)
功能:对于所有给定的 T/nil 值,全为 T 时返回 T,否则返回 NIL 例:
(andT(eq11)(eq3(+12))) T (and nil) nil
(floor (floatValue))
题目 3:solveBoard 函数(10 分)
– 语法:(solveBoard [sudokuBoard])
– 功能:输出给定数独板经完成后的版本。 – I/O
输入:表示数独的列表 假定仅输入正常数独版本,空格标记为零
输出:返回为数独板字符串,包含 9 个 3×3 输出到与题目 1 相同的窗体,每个
(solveBoard‘((035469278)(782105609)(06027813
5) (3 2 1 0 4 6 8 9 7) (8 0 4 9 1 3 5 0 6) (5 9 6 8 2 0 4 1 3) (9 1 7 6
5 2 0 8 0) (6 0 3 7 0 1 9 5 2) (2 5 8 3 9 4 7 6 0)))
正确答案计算算法请参见作业描述中的图片程序流。
递归填充给定板的格
选择空域 (0) 后,填充 1 到 9 的数字,并在该板上调用 checkBoard 函数 递归剩余导航进度(如果已填充)
通过printBoard为成品进行输出
你也可以使用其他算法和函数来构建本作作业
评分不包括时间复杂度、内存等,将仅在无法操作或未找到适当答案时进行减分 不评估正确答案过多的示例(例如,如果所有空格都为空)
– 使用循环语句,所有函数都以递归方式调用 (loop, while, do, dotimes,
– 禁用除函数参数以外的变量 (defparameter、defvar、let 等)
– 所有输出值都是函数的返回值
程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com