解救公主

其中有一关的规则是这样的

公主被困在梦境里,梦境里的空间无限大,公主靠自己是走不出来的。

系统会随机很多条行动指令,玩家必须帮公主选出正确的指令,公主按照玩家选择的指令,重复执行若干次后就能走出困境。

指令有三个字符组成 S,R,L

S: 前进一步
R: 向右转
L: 向左转
如果公主重复执行错误的指令,她就会一直在绕圈子,走不出梦境。

所谓“绕圈子”是指:无论公主重复执行多少次指令,她始终都在一个以出发点为圆心,以R为半径的圆里,永远走不出这个圆,更走不出梦境。

阿宅已经卡在这一关很久了。他很痛苦不能早日拯救公主脱离苦海,于是向聪明的你求助,让你写段代码判断哪些指令是正确的,哪些指令是错误的。

输入:

第一行 一个整数n

之后共有n行,每行为一个指令串

输入约束:

n位于区间[1,50]

从第二行开始,每行指令串长度为1-50,且仅包含字母 S,L,R

输出:

仅有一个单词。

指令串错误 打印 no

指令串正确 打印 yes

举例1:

输入

1
SLSR
输出

yes
解释:假设公主初始状态向北,公主的行动序列依次为前进,左转,前进,右转,此时公主仍然向北,但位置已经移动了。只要时间足够长,公主会一直向这个方向前进,所以公主没有在绕圈子。她能走出梦境,指令是正确的

举例2:

输入

2
SSSS
R
输出

no
解释: 公主一直在沿着一个边长为4步的小正方形绕圈子,指令是错误的

local strategy = {"SLSR"} --对应题目中的n行指令串
--{"SSSS","R"}代表2行指令,第一行为"SLSR",第二行为"S"

local table = {}
local rCount = 0 --"R"出现的次数
local lCount = 0 --"L"出现的次数
local sFlag = false --"S"是否出现

for i = 1, #strategy do
    if #strategy[i] == 1 then
        local s = string.upper(strategy[i])
        sFlag = string.find(s, "S", 1, true)
        if s == "R" then
            rCount = rCount + 1
        elseif s == "L" then
            lCount = lCount + 1 
        end
    elseif #strategy[i] > 1 then
        sFlag = string.find(strategy[i], "S", 1, true)
        for j = 1, #strategy[i] - 1 do
            local s = string.upper(string.sub(strategy[i], j, j + 1))
            if s == "R" then
                rCount = rCount + 1
            elseif s == "L" then
                lCount = lCount + 1 
            end
        end
    end
end

--当R和L个数相等时,可认为扭转方向的次数相互抵消,即没有转向
if rCount == rCount and sFlag then
    print("yes")
else
    print("no")
end

结果

输入:"SSSS, R"
输出:"no"
输入:"SLSR"
输出:"yes"
输入:"SLSR", "SSSS", "R"
输出:"no"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值