【比赛随记】第三届全国高校绿色计算系列大赛-任务挑战组(OpenEuler)

深渊向深渊呼唤

前言                                      

昨天是程序员节,参加了绿色联盟(GCC)组织的一场比赛:第三届全国高校绿色计算系列大赛-任务挑战组半决赛,我主要是做的OpenEuler的Shell编程,因为昨天一直在忙,所以博客拖到了现在。那就给大家拜个晚节,祝大家没有996,1024快乐!

截止到目前,题目还可以提交,大家可以注册账号去试一下!传送门            

题目一:

题面

题解 

拓展链接

 题目二:

 题面

 题解

总结


题目一:

题面

题解 

#!/bin/bash

#将答案补充完毕
#/**********  Begin  **********/#

sed -i 's/\([a-zA-Z]\+\)\([0-9]\+\)\([a-zA-Z]\+\)/\1,\2,\3/g' test.txt
cat test.txt

#/**********  End  **********/#

拓展链接

sed命令不会修改test.txt文件,只是将里面的值拿出来,经过处理之后打印在终端上。

其实shell命令都是我大一的时候学的了,现在都忘得差不多了,所以都是网上现学的,一般看几个博客,就会了。

你需要什么内容,就在博客里把你的需求和用到知识点放一块就行。

比如“shell for循环按行读入”,右边是sed命令的介绍:Sed命令详解&正则表达式

 

 题目二:

 题面

 题解

#!/bin/bash

#将答案填写在下方空白区域
#/**********  Begin  **********/#

IFS=$'\n'
arrA=()
arrB=()

for line in $(cat b.txt)
do
    arrB[${#arrB[*]}]=$( echo $line | grep -o '^\([a-zA-Z]\+\)' )
done
#echo "" > resB.txt
for temp in ${arrB[*]}
do
    echo $temp >> resB.txt
done
for line in $(cat a.txt)
do
    line=$( echo $line | rev | grep -o '^\([a-zA-Z]\+\)' | rev )
    arrA[${#arrA[*]}]=$line
done
#echo "" > resA.txt
for temp in ${arrA[*]}
do
    echo $temp >> resA.txt
done
awk 'NR==FNR{ a[$1]=$1 } NR>FNR{ if(a[$1] == ""){ print $1}}' resB.txt resA.txt

#/**********  End  **********/#

思路比较简单:建立两个数组arrA和arrB分别去存放a.txt每行的最后一个单词和b.txt每行的第一个单词 ,读是通过for循环。然后通过>>可以将数组的内容输出到文件resA和resB,最后通过awk去取resA和resB差集,就是本题结果。

还是甩链接自己去学吧,要锻炼这种搜索能力。

shell for循环:shell for循环 按行读入

shell 数组操作:shell 数组定义和获取元素

awk得到差集:awk做差集-简书

总结

今天完成的还不错,一个多小时就完成了题目,剩下的时间疯狂优化MindSpore,把自己练成一个调参工程师!下面是比赛时候拍的图!全靠牛肉粒和饮料供能啊!

 

栏目