- 积分
- 2446
- 明经币
- 个
- 注册时间
- 2003-7-27
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
楼主 |
发表于 2012-6-1 03:05:38
|
显示全部楼层
本帖最后由 aroom 于 2012-6-5 00:37 编辑
TeaScript QQ群 群友问题
★~★(741378784) 21:27:52
机器人靠指令行走,如 l100r50r10 其中 l 是向左转,r 是向右转,中间的数字是行走的距离
现在要求输入 n 条指令,并求出每条指令移动后的位置与起点位置的距离。结果保留两位小数。
例:
输入
l100
l100r50r10
l5l5l5l5
输出
100.0
102.96
0.0
★~★(741378784) 21:27:58
求思路
TeaScript 编程 (Lisp 语法版)
(defun getdist( / instr x y dir lst v) ;; 定义getdist函数 / 局部变量
(while (setq instr (readLine)) ;; 循环从键盘取得输入数值
(if (== "" instr)(break)) ;; 如果输入是个空行,结束后续计算,退出
(setq x 0 y 0 dir 0) ;; 初始化坐标值, 假定机器人初始面向x轴
(setq lst (findAll /[l|L|r|R]\d+/ instr)) ;; 从输入行中找出l或r开头的数值,放入lst列表中 (字母忽略大小写)
(println lst) ;; 可以忽略,辅助显示lst列表结果
(if lst
(mapcar (fn (e)
(setq v (int (cdr e))) ;; 抛弃开头字母,转为数值
(if (startsWith e "L" 1) ;; 判别方向(字母忽略大小写)
(progn
(cond
((== (abs (% dir 4)) 0)(++ y v))
((== (abs (% dir 4)) 1)(-- x v))
((== (abs (% dir 4)) 2)(-- y v))
(true (++ x v)))
(++ dir))
(progn
(cond
((== (abs (% dir 4)) 0)(-- y v))
((== (abs (% dir 4)) 1)(++ x v))
((== (abs (% dir 4)) 2)(++ y v))
(true (-- x v)))
(-- dir))
))
lst) ;; 对lst列表中的每个元素(字符串),进行lambda分析
)
(println "ordinate, x: " x ", y: " y) ;; 可以忽略,辅助显示x y 坐标
(println "distance: " (round (sqrt (+ (* x x)(* y y))) -2)) ;; 最后输出结果 dist = x*x + y*y 的平方根
)
)
(getdist) ;; 调用函数
;; 启动TeaScript.exe(console模式), 将上面代码复制,粘贴到控制台窗口中执行
TeaScript 编程 (JavaScript 语法版)
function getdist(){ // 定义getdist函数
while (instr = readLine()){ // 循环从键盘取得输入数值
if (instr == "") break; // 如果输入是个空行,结束后续计算,退出
var x = 0, y = 0, dir = 0, lst; // 初始化坐标值, 假定机器人初始面向x轴
lst = findAll(/[l|L|r|R]\d+/, instr); // 从输入行中找出l或r开头的数值,放入lst列表中 (字母忽略大小写)
println(lst); // 可以忽略,辅助显示lst列表结果
if (not null?(lst)){
mapcar(function (e){
var v = int(cdr(e)); // 抛弃开头字母,转为数值
if (startsWith(e, "L", 1)){ // 判别方向(字母忽略大小写)
if(abs(dir%4) == 0) y += v;
else if (abs(dir%4) == 1) x -= v;
else if (abs(dir%4) == 2) y -= v;
else x += v;
dir++;
} else {
if(abs(dir%4) == 0) y -= v;
else if (abs(dir%4) == 1) x += v;
else if (abs(dir%4) == 2) y += v;
else x -= v;
dir--;
}
}, lst); // 对lst列表中的每个元素(字符串),进行lambda分析
}
println("ordinate, x: ", x, ", y: ", y); // 可以忽略,辅助显示x y 坐标
println("distance: ", round(sqrt(x*x + y*y),-2)); // 最后输出结果 dist = x*x + y*y 的平方根
}
}
getdist() // 调用函数
// 启动TeaScript.exe(console模式), 将上面代码复制,粘贴到控制台窗口中执行 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|