24 KiB
24 KiB
TSL Agent Prompt Set (ZH)
本文件只包含发送给被测 agent 的题面。
Runner Setup
You are in this repository. The documentation entry point is docs/index.md.
When asked to write TSL, start from docs/index.md and follow its routing to the
relevant TSL pages. Do not infer syntax from Pascal, TypeScript, JavaScript,
Python, or SQL.
Answer Rules
每个 case 独立作答。
除非题面明确要求输出 .tsf,否则默认输出可执行 .tsl 文件内容。
题面模拟普通用户的需求,不要复制文档中的样例代码。
请按题面里的名称、数据和业务动作重新编写。
如果输出 .tsl,请在题面要求的业务输出全部完成后,用 TSL 输出语句最后输出一行 __TSL__AGENT__OK__。
如果输出 .tsf,必须是 TSL 能从 funcext 加载的有效函数扩展或 unit 文件;
不要在 .tsf 中加入成功标记,成功标记由验证脚本输出。
只输出代码,不要解释。
Prompts
TSL-001: 订单折后金额
请写一份 .tsl 代码:
一个订单里,单价是 19,数量是 6,优惠金额是 14。
请算出这行订单最后要收多少钱,并输出结果。
TSL-002: 分页信息
请写一份 .tsl 代码:
一共有 47 条记录,每页放 10 条。
请输出能装满的页数,以及最后一页还剩多少条。
TSL-003: 订单编号
请写一份 .tsl 代码:
把文字 "Order" 和编号 "42" 合成一个订单编号,然后输出它。
TSL-004: 简单扣费
请写一份 .tsl 代码:
账户余额是 12,本次扣费是 3。
请输出扣费后的余额。不要提前列出额外的变量清单。
TSL-005: 固定单价
请写一份 .tsl 代码:
某个商品固定单价是 9,本次买了 4 个。
请把固定单价作为常量保存,再输出总价。
TSL-006: 严格模式库存
请写一份 .tsl 代码:
这份脚本要开启显式变量模式。
请准备一个库存数 stock,把它设为 18,然后输出它。
TSL-007: 读取分数
请写一份 .tsl 代码:
有一组分数:15、30、45。
请输出第一项和最后一项。
TSL-008: 读取编码字符
请写一份 .tsl 代码:
编码是 "ZX9"。
请输出第一个字符和第三个字符。
TSL-009: 空列表检查
请写一份 .tsl 代码:
准备一个空列表 bucket。
请检查 bucket 的第一个位置是不是 nil,并输出检查结果。
TSL-010: 文本数字参与计算
请写一份 .tsl 代码:
有一个文本形式的数字 "58"。
请先把它变成整数,再减去 8,并输出结果。
TSL-011: 温度标签
请写一份 .tsl 代码:
temperature 是 32。
如果温度大于等于 30,level 就是 "hot";否则 level 是 "normal"。
请最后输出 level。
TSL-012: 余额审核
请写一份 .tsl 代码:
balance 是 80。
如果 balance 大于 50,请先输出 "allow",再扣掉 10;
否则输出 "deny"。最后输出 balance。
TSL-013: 偶数累加
请写一份 .tsl 代码:
请把 2、4、6、8 加起来并输出。
要求用带步长的循环完成。
TSL-014: 权重检查
请写一份 .tsl 代码:
weights 里有 3、5、9。
请逐个处理,每行输出“当前位置”和“这个位置的值”的乘积。
TSL-015: 累加到上限
请写一份 .tsl 代码:
从 n = 1 开始累加。
当 n 大于 4 时停止,最后输出累计结果。
TSL-016: 跳过指定数字
请写一份 .tsl 代码:
处理 1 到 5。
遇到 3 时跳过它,只累加其他数字,最后输出结果。
TSL-017: 倒计时
请写一份 .tsl 代码:
从 countdown = 4 开始倒数,一直到 0 停止。
请使用 repeat until,并输出最后的 countdown。
TSL-018: 状态码
请写一份 .tsl 代码:
status_code 是 2。
如果是 1,输出 "new";如果是 2 或 3,输出 "active";
其他情况输出 "closed"。
TSL-019: 等级文字
请写一份 .tsl 代码:
grade 是 3。
请用 case 表达式得到一段等级文字:1 是 "low",2 到 4 是 "mid",其他是 "high"。
最后输出这段等级文字。
TSL-020: 捕获错误信息
请写一份 .tsl 代码:
故意抛出 "network" 这个错误。
捕获它后,请输出错误对象里的错误信息。
TSL-021: 清理动作
请写一份 .tsl 代码:
先输出 "open"。
无论前面是否正常结束,最后都要输出 "close"。
请用 try/finally 完成。
TSL-022: 计算数量乘积
请写一份 .tsl 代码:
请做一个“计算两个整数乘积”的功能,名字由你自己取。
脚本里请用 6 和 8 调用它,并输出结果。
TSL-023: 调整额度
请写一份 .tsl 代码:
请做一个“把额度增加 5”的动作,名字由你自己取。
脚本里 quota 一开始是 10,调用后输出 quota。
TSL-024: 默认手续费
请写一份 .tsl 代码:
请做一个“计算手续费后金额”的功能,名字由你自己取。
如果没有传金额,就按 100 处理;最后结果是金额加 6。
请分别输出不传金额和传 20 时的结果。
TSL-025: 下一批编号
请写一份 .tsl 代码:
请做一个“取得下一批编号”的功能,名字由你自己取。
起始编号是整数,默认是 10,结果也是整数。
它要返回起始编号加 1。请输出默认情况下的结果。
TSL-026: 区间组装
请写一份 .tsl 代码:
请做一个“组装左右边界”的功能,名字由你自己取,把两个边界值组成一个两项列表。
调用时请用命名方式传入:right 是 90,left 是 40。
最后输出这两项。
TSL-027: 跳过中间值
请写一份 .tsl 代码:
请做一个“检查中间位置”的功能,名字由你自己取,里面要输出第二个位置 b 是不是 nil。
调用时只给第一个和第三个位置传值,故意跳过 b。
TSL-028: 按名字调用功能
请写一份 .tsl 代码:
请做一个“三位数字编码”的功能,名字由你自己取。
它把三个输入算成 a * 100 + b * 10 + c。
脚本里请通过 call 按这个名字调用它,并输出结果。
TSL-029: 多个数字相乘
请写一份 .tsl 代码:
请做一个“多个数字相乘”的功能,名字由你自己取。
它可以接收任意多个数字,并把它们全部相乘。
请用 2、3、4 调用,并输出结果。
TSL-030: 看到多少输入
请写一份 .tsl 代码:
请做一个“统计收到多少输入”的功能,名字由你自己取。
前两个位置是固定的,后面还能继续接收更多值。
它要输出 ParamCount * 100 + RealParamCount 的结果。
请用 5、6、7 调用。
TSL-031: 保存一个小计算
请写一份 .tsl 代码:
把一个“小计算”保存到你自己命名的变量里。这个小计算接收两个值,结果是两者相乘。
请通过 call 调用这个变量,并用 4 和 9 输出结果。
TSL-032: 把计算交给别人执行
请写一份 .tsl 代码:
请做一个“执行后再翻倍”的功能,名字由你自己取,它接收另一个计算。
这个功能要先用 3 调用收到的计算,再把得到的结果乘以 2。
调用它时,直接给它一个“把输入加 5”的匿名计算,并输出结果。
TSL-033: 查找已有功能
请写一份 .tsl 代码:
请做一个“把输入乘以 3”的功能,名字由你自己取。
脚本里找到这个名字对应的函数值,再用支持的函数值调用方式处理 7,并输出结果。
TSL-034: 传递当前功能
请写一份 .tsl 代码:
请做一个“把输入平方”的功能,名字由你自己取。
再做一个“调用传入计算”的功能,名字也由你自己取,它接收一个计算和一个值,并通过 call 执行。
脚本里取得平方功能的函数值,并输出调用结果。
TSL-035: 函数里使用规则包
请写一份 .tsl 代码:
请做一个“读取远程费率”的功能,名字由你自己取。
这个功能一进入函数体就要使用一个费率相关的 unit,然后返回该 unit 中读取费率动作的结果。
TSL-036: 脚本开头使用规则包
请写一份 .tsl 代码:
脚本需要先使用两个你自己命名的规则包:一个处理价格,一个处理税费。
之后调用一个“计算最终金额”的动作,并输出结果。
TSL-037: 手续费扩展
请写一份 .tsf 代码:
提供一个“计算服务费”的功能,名字由你自己取,接收金额。
金额大于 1000 时,费用是 amount div 20;否则费用是 30。
不要写可直接运行的脚本入口。
TSL-038: 发票规则包
请写一份 .tsf 代码:
请做一个“发票规则”unit,unit 名由你自己取。
外部只需要能调用一个“默认额度”功能,并得到 500。
请写成完整的 unit 文件。
TSL-039: 运费规则包
请写一份 .tsf 代码:
请做一个“运费规则”unit,unit 名由你自己取。
外部只能调用一个“计算可计费重量”的功能。
内部可以有一个不对外公开的小工具,用来把负数修正为 0。
可计费重量要返回修正后的毛重减去皮重。
TSL-040: 会员积分规则包
请写一份 .tsf 代码:
请做一个“会员积分规则”unit,unit 名由你自己取。
外部可以调用“基础分”和“最终积分”两个功能。
level 大于等于 3 时基础分是 20,否则是 5。
最终积分的结果是金额 div 10 加上基础分。
TSL-041: 商品信息表
请写一份 .tsl 代码:
准备一条商品信息,里面有 sku = "B17",qty = 12。
请输出 sku 和 qty。
TSL-042: 只取第一个成绩
请写一份 .tsl 代码:
有一组成绩 88、99、100。
请只取第一个值放到 first_mark,然后输出 first_mark。
TSL-043: 读取两行数据
请写一份 .tsl 代码:
有两行数据:(8, 1) 和 (9, 2)。
请把两行分别取出来,再输出每行的两个值。
TSL-044: 检查是否存在
请写一份 .tsl 代码:
先检查 5 是否在 2、5、8 这一组数字里,并输出结果。
再检查整行 (2, 5) 是否在两行数据 (1, 1)、(2, 5) 里面,并输出结果。
TSL-045: 两组行数据对比
请写一份 .tsl 代码:
left_rows 是 (1, "a")、(2, "b")。
right_rows 是 (2, "b")、(3, "c")。
请分别算出合并、交集、左边独有、两边不重叠的结果,并输出每个结果的大小。
TSL-046: 只保留允许状态
请写一份 .tsl 代码:
有一批订单,每行包含订单号和状态。
再准备一份允许状态列表。
请只保留状态命中的订单,并输出保留下来的行数。
TSL-047: 排除禁止状态
请写一份 .tsl 代码:
有一批任务,每行包含任务号和状态。
再准备一份禁止状态列表。
请排除命中的任务,并输出剩余行数。
TSL-048: 查询商品数量
请写一份 .tsl 代码:
有一批商品数据,每行包含商品编号和数量。
请用 TS-SQL 只取数量大于 3 的行,并输出结果行数。
TSL-049: 筛选并排序成绩
请写一份 .tsl 代码:
有一批姓名和分数。
请用 TS-SQL 只保留分数大于等于 60 的人,并按分数从高到低排序。
最后输出第一行的姓名。
TSL-050: 部门金额汇总
请写一份 .tsl 代码:
有一批部门和金额数据。
请用 TS-SQL 按部门汇总金额,并输出汇总后的行数。
TSL-051: 客户订单关联
请写一份 .tsl 代码:
有一组客户数据和一组订单数据,它们通过客户编号关联。
请用 TS-SQL 得到客户名称和订单金额,并输出关联后的行数。
TSL-052: 多种数字写法
请写一份 .tsl 代码:
有几个配置值:0x2A、0b1010、0o12、200L、6E2。
请分别输出它们对应的类型判断结果。
TSL-053: 日期和时间
请写一份 .tsl 代码:
有一个日期 20240618T,还有一个带时间的值 20240618.1530T。
请分别输出日期字符串和时间字符串。
TSL-054: 数字真假判断
请写一份 .tsl 代码:
先输出 true 和 false。
再分别判断 4、0、-2 在 if 里会走哪个分支,并输出分支标记。
TSL-055: Nil 参与计算
请写一份 .tsl 代码:
请输出 ifNil(nil) 的结果。
再输出 nil + 5、5 + nil,并检查 nil + nil 是不是 nil。
TSL-056: 复数信息
请写一份 .tsl 代码:
准备两个复数:8 + 6j 和 complex(3, -4)。
请输出第一个复数的实部、虚部,并输出第二个值是不是复数。
TSL-057: 批次报告
请写一份 .tsl 代码:
一批货有 17 件,每箱装 5 件;优先级是 3;距离是 9,基准是 4;ratio_base 是 7。
请输出完整箱数、剩余件数、优先级的四次方、距离与基准的按位关系结果,
以及 ratio_base 与 3 的左除计算结果。
TSL-058: 补货数量
请写一份 .tsl 代码:
最低库存是 20,当前库存是 14。
如果库存不足,reorder_count 就是最低库存减当前库存;否则是 0。
请用条件表达式得到 reorder_count,并输出它。
TSL-059: 候补分数
请写一份 .tsl 代码:
primary_score 是 12,missing_score 是 0,候补值是 99。
请用省略真值的条件表达式分别得到两个最终分数,并输出。
TSL-060: 发货判断
请写一份 .tsl 代码:
paid 是 true,blocked 是 false,amount 是 120。
请用 and、or、not 判断是否允许发货,并输出结果。
TSL-061: 权限掩码
请写一份 .tsl 代码:
read_write 是 6,audit_exec 是 3。
请输出共同权限、合并权限、差异权限,以及 read_write 取反后的结果。
TSL-062: 计数调整
请写一份 .tsl 代码:
counter 一开始是 5。
先加 4,再自增一次,最后输出 counter。
TSL-063: 安全读取订单金额
请写一份 .tsl 代码:
maybe_order 是 nil。
请安全读取 maybe_order.total,并输出读取结果是不是 nil。
TSL-064: 阈值范围
请写一份 .tsl 代码:
请判断 3、8、20 是否满足从小到大的连续比较,并输出结果。
TSL-065: 三组指标逐项比较
请写一份 .tsl 代码:
有三组指标:2、4、6;3、5、7;4、6、8。
请逐项判断第一组是否小于第二组、第二组是否小于第三组,
并输出得到的三个结果。
TSL-066: 发票号格式
请写一份 .tsl 代码:
发票号是 "INV-2024-07"。
请判断它是不是以 "INV-" 开头,并且后面包含数字,然后输出结果。
TSL-067: 带注释的小脚本
请写一份 .tsl 代码:
请包含两种 TSL 支持的注释写法。
然后把 daily_total 设为 31,并输出它。
TSL-068: 编译时模式选择
请写一份 .tsl 代码:
如果定义了 FAST_MODE,就输出 "fast";否则输出 "safe"。
请用条件编译完成。
TSL-069: 临时上下文
请写一份 .tsl 代码:
请使用运行时 with 单星块。
在临时上下文里设置一个字段,并在块内输出这个字段。
TSL-070: 嵌套上下文
请写一份 .tsl 代码:
请使用运行时 with 双星块。
在嵌套上下文里读取外层字段,并输出组合结果。
TSL-071: 带超时的远程式调用
请写一份 .tsl 代码:
准备一个“慢速评分”的功能,名字由你自己取,它返回 12。
请用网格调用方式调用它,并设置超时时间,然后输出得到的结果。
TSL-072: 全局缓存
请写一份 .tsl 代码:
把 "session_limit" 这个全局缓存设为 300。
再读取它并输出,同时输出这个缓存是否存在。
TSL-073: 调试结果
请写一份 .tsl 代码:
请做一个“检查金额”的功能,名字由你自己取。
如果输入小于 0,请用 debugReturn 返回调试值;否则返回原值。
请用 -1 调用它并输出结果。
TSL-074: 简单计时
请写一份 .tsl 代码:
请用内置计时开始和结束功能包住一个小循环,并输出计时结果。
TSL-075: 兜底跳转
请写一份 .tsl 代码:
flag 是 false。
如果 flag 为 false,就跳到 fallback 标签。
fallback 里输出 "fallback"。
TSL-076: 账户卡片
请写一份 .tsl 代码:
我需要一种“账户卡片”对象,类型名由你自己取。
它要有一个公开字段,用来保存持有人姓名,字段名也由你自己取。
脚本里创建一张卡,把持有人设为 "Lina",然后输出这个字段。
TSL-077: 仪表盒
请写一份 .tsl 代码:
我需要一种“仪表盒”对象,类型名由你自己取。
创建它时传入初始读数,保存到 reading。
它有一个“前进一步”的动作,动作名由你自己取,每次让读数增加 2,并给出新的读数。
脚本里创建一个初始读数为 10 的对象,输出调用这个动作后的结果。
TSL-078: 设备总数
请写一份 .tsl 代码:
我需要一种“设备计数器”类型,类型名由你自己取,它有一个所有对象共享的 total_count。
脚本里把 total_count 设为 77,然后输出它。
TSL-079: 汇率工具
请写一份 .tsl 代码:
我需要一种“汇率计算”类型,类型名由你自己取,上面直接提供一个“倍率相乘”的功能。
它返回 a * b。
脚本里通过类型本身调用这个功能处理 4 和 5,并输出结果。
TSL-080: 货架编码
请写一份 .tsl 代码:
我需要一种“货架盒”对象,类型名由你自己取。
它内部有一个保存货架编码的字段,字段名由你自己取。
对外通过一个属性读写这个编码,属性名也由你自己取。
脚本里创建对象,把编码设为 "S-8",然后通过属性输出编码。
TSL-081: 客户显示名
请写一份 .tsl 代码:
我需要一种“客户名称”对象,类型名由你自己取。
它内部有一个 string 类型字段,用来保存原始姓名,字段名由你自己取。
对外通过一个带类型的属性访问显示姓名,属性名也由你自己取。
脚本里设置并输出这个显示姓名属性。
TSL-082: 两种渲染方式
请写一份 .tsl 代码:
我需要一种“格式化工具”对象,类型名由你自己取。
它有两个同名动作,动作名由你自己取:一个接收一个值,一个接收两个值。
脚本里分别调用这两种动作,并输出结果。
TSL-083: 自行车对象
请写一份 .tsl 代码:
我需要一种“交通工具基础对象”,类型名由你自己取。
它有一个说明类别的动作,动作名由你自己取,结果是 "vehicle"。
再做一种“自行车对象”,类型名也由你自己取,继承前面的基础对象,
并增加一个说明轮子数量的动作,动作名由你自己取,结果是 2。
脚本里创建自行车对象,输出类别和轮子数量。
TSL-084: 折扣价格标签
请写一份 .tsl 代码:
我需要一种“价格基础对象”,类型名由你自己取。
它有一个可被子类型改写的标签动作,动作名由你自己取,默认结果是 "base"。
再做一种“折扣价格对象”,类型名也由你自己取,把这个标签动作的结果改成 "discount"。
脚本里创建折扣价格对象并输出标签。
TSL-085: 追加消息
请写一份 .tsl 代码:
我需要一种“基础消息对象”,类型名由你自己取。
它有一个给出文字的动作,动作名由你自己取,结果是 "base"。
再做一种“提醒消息对象”,类型名也由你自己取。
它的文字动作要先调用父级同名动作,再追加 "-alert"。
脚本里输出提醒消息对象的文字。
TSL-086: 类外补充方法
请写一份 .tsl 代码:
我需要一种“票据打印器”,类型名由你自己取。
类型里面只先写出一个“打印编号”动作的名字,动作名由你自己取。
请在类型外面补上这个动作的内容,让它给出 "T-100"。
脚本里创建对象并输出结果。
TSL-087: 按名称创建对象
请写一份 .tsl 代码:
我需要一种“动态盒子”对象,类型名由你自己取。
它有一个给出数值的动作,动作名由你自己取,结果是 64。
脚本里请通过字符串里的类型名创建这个对象,并输出这个数值。
TSL-088: 临时句柄清理
请写一份 .tsl 代码:
我需要一种“临时句柄”对象,类型名由你自己取。
它被销毁时要输出 "released"。
脚本里创建它,然后把引用设为 nil。
TSL-089: 外部评分函数
请写一份 .tsl 代码:
有一个外部提供的“评分”功能,TSL 中使用的名字由你自己取,它接收一个值并给出结果。
这里只需要写出它和外部功能的连接写法,不需要调用。
TSL-090: 外部日志动作
请写一份 .tsl 代码:
有一个外部提供的“写日志”动作,TSL 中使用的名字由你自己取,它接收一段文本。
这里只需要写出它和外部动作的连接写法,不需要调用。
TSL-091: 包装原生函数指针
请写一份 .tsl 代码:
假设 native_ptr 已经保存了一个原生函数指针。
请按 TSL 支持的方式把它包装成可调用对象,并演示传入两个数字调用。
TSL-092: 后台任务
请写一份 .tsl 代码:
准备一个后台任务,名字由你自己取,里面输出 "work"。
请用线程相关写法启动它,并保持代码尽量小。
TSL-093: FMArray 尺寸
请写一份 .tsl 代码:
创建一个 2 行 3 列的 FMArray。
请输出它是不是 FMArray,并输出行数、列数和总尺寸。
TSL-094: 矩阵大小
请写一份 .tsl 代码:
准备一个两行三列的数字矩阵。
请输出它的行数、列数和总尺寸。
TSL-095: 金额对象相加
请写一份 .tsl 代码:
我需要一种“金额盒子”对象,类型名由你自己取,里面有 value。
请让两个这种对象可以直接相加,相加后得到新的同类对象。
脚本里创建两个对象,并输出相加后的 value。
TSL-096: 区分局部和全局功能
请写一份 .tsl 代码:
写一个局部功能,名字故意和某个系统功能一样。
脚本里请分别调用局部功能和全局/系统功能,并输出两次结果。
TSL-097: 关闭默认写回
请写一份 .tsl 代码:
关闭默认的输入写回行为。
请做一个“双值触碰”动作,名字由你自己取:普通输入不要写回,明确标记为 var 的输入要写回。
脚本调用后输出两个变量,证明只有 var 那个改变了。
TSL-098: In 和 Out
请写一份 .tsl 代码:
关闭默认的输入写回行为。
请做一个“同步几个值”的动作,名字由你自己取,接收三个值,并只让 out 标记的值写回。
脚本调用时使用 in 和 out 前缀,然后输出三个变量。
TSL-099: 提前退出
请写一份 .tsl 代码:
请做一个“保护性计算”的功能,名字由你自己取。
如果输入小于 0,就直接退出;否则给出输入乘以 2 的结果。
脚本里分别用 -1 和 6 调用它,并输出两次结果。
TSL-100: 订单汇总
请写一份 .tsl 代码:
有一批订单行,每行包含商品名、数量、单价。
请做一个“计算单行金额”的功能,名字由你自己取。
遍历所有订单行,数量为 0 的行跳过,其他行累计金额。
如果总金额大于 100,输出 "bulk",否则输出 "normal"。
最后输出总金额。