| 
积分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本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |