只有代码:

#shiyanbar:ppc 括号表达式
# list = [4,5,6,6,6,6] 	每个右括号之前的左括号数序列
# (((()()()))) 		根据list生成的括号表达式
# 111456 		?求解每个右括号所在的括号内包含的括号数


list = [4,6,6,6,6,8,9,9,9]
exp = ""	#存放生成的括号表达式
list.each do |num|
	if exp.empty?
		exp += '('*num+')'  
	else
		exp += '('*(num-exp.count('('))+')'
	end
end
puts exp 	# (((()(())))(()()))

result = []  #存放统计完的每个右括号所在的括号内包含的括号数的序列
exp.chars.each_with_index do |item,idx| #将生成的括号表达式字符串转为字符数组并带下标遍历
	if item == ')'	#遇到右括号
		stack = [] 
		left = 0 	#记录该右括号匹配的左括号
		idx.downto(0)do |i|		#从右括号所在下标遍历至字符数组首位
			exp[i]==')'?stack<<')':stack.pop    #遇右括号,')'压栈 遇左括号,')'弹栈
			if stack.empty?	    #栈为空即找到对应的左括号 left记之并break
				left = i 		
				break
			end
		end
		count = 0 	#统计括号数
		tmp = exp[left..idx] #该右括号和与其匹配的左括号之间的字符串(包含自身) 形如:                                          # (()())
		until tmp.empty?     #不为空时进入   until condition => while !(condition)
			tmp.sub!("()","")	# 替换字符串中的()
			count += 1		# 并统计
		end
		result << count #加入统计数组
	end
end
puts result.join

Flag:

温馨提示: 此处内容需要评论本文后刷新才能查看,支付2元即可直接查看所有Flag。

小广告:关于获取西普实验吧所有Writeup请点击这里查看索引

查看所有Flag需要付费,需要获取所有Flag的童鞋请访问这里成为付费用户,可以自助把自己的注册邮箱加入网站白名单,即可免回复看到本站所有Flag

Flag大全地址:所有Flag

PS:本站不是实验吧的官方站点,纯粹是个人博客,收取Flag费用仅是维持服务器费用,做站不易,且行窃珍惜,如果喜欢我的博客,愿意捐赠的,可以扫描下面的二维码

微信二维码:
支付宝二维码: