美文网首页
用脚本整理Leetcode

用脚本整理Leetcode

作者: ACoolBlog | 来源:发表于2018-10-20 16:44 被阅读0次

    原文地址:https://blogof33.com/post/17/

    前序

    Leetcode 做了很多道了,没怎么整理,只是每道题对应一个markdown题解文件,Leetcode项目仓库里面呈现方式是这样的:

    文件仓库结构

    可以看出结构很混乱,所以 ACool 想做一个索引放在 README 里面。像这样:

    index

    按照题号排序,中间是题目名称和题目的 Leetcode 链接,最后是题解语言和链接。按照这样的结构来手动一条一条整理,实在是太花时间了,所以 ACool 写了一个索引生成 shell script 来整理。

    索引生成脚本

    脚本的代码如下:

    #! /bin/bash
    ls | grep '^[0-9]'|sort -n|while read line
    do
        title=`echo ${line}|cut -d . -f 2`
        declare -l url=${title}
        echo "|${line%%.*}|[$title](https://leetcode.com/problems/algorithms/url//' '/'-'}/description/)|[C++](https://github.com/starFalll/LeetCode/blob/master/algorithms/${line//' '/'%20'})|" >>README.md 
    done
    

    解释一下,如第一张图所示,所有题解文件都是(题号.题名.md)的形式,所以第一行代码按照题号对其进行排序,从小到大,将排序的结果按行取出。一行一行处理。
    然后是一个循环,每行(即每个题解文件)先取中间的题名保存在 title 变量里,再将其所有字母小写的内容保存在 url 中,注意这里 declare -l varible=*** 意思是字符串全部转为小写赋值给变量。
    最后分别有三列,对应第二张图中的三列:

    1. 第一列取题号,${varible%%string*} 表示从右向左截取变量中最后一个 string 后的字符串,这里便是取 题号.题名.md 中的 题号 ,代码如下:

      ${line%%.*}
      
    2. 第二列由题名得到 leetcode 中对应的题目描述的地址,例如 Leetcode第一道题名为 Two Sum ,对应的 url 为 https://leetcode.com/problems/two-sum/description/ ,即将题名中间空格换为 '-' 即可,代码如下:

      [$title](https://leetcode.com/problems/algorithms/url//' '/'-'}/description/)
      
    3. 第三列表示题解地址,因为 url 会将空格转换成 %20 ,所以这里将空格换成 %20 即可,代码如下:

      [C++](https://github.com/starFalll/LeetCode/blob/master/algorithms/${line//' '/'%20'})
      

    然后将这一行索引重定向到 README.md 文件里面便完成了索引的生成。

    结果和第二张图一样:

    index

    更新索引脚本

    虽然整理好了索引,但是因为剩下的题不是按照顺序刷的,新题的索引如何插入解决呢?手动也很麻烦,可以将之前的索引生成脚本更改一下,变成更新索引脚本。代码如下:

    #! /bin/bash
    for num in $*
    do
        all=$(ls algorithms|sort -n)
        line=$(echo "${all}"|grep -n "^${num}\..*")
        echo "${line}"
        title=`echo ${line}|cut -d . -f 2`
        declare -l url=${title}
        newline=$(echo ${line}| cut -d : -f 2)
        declare -i num=$(echo ${line}|cut -d : -f 1)
        res=$(echo "|${newline%%.*}|[$title](https://leetcode.com/problems/${url//' '/'-'}/description/)|[C++](https://github.com/starFalll/LeetCode/blob/master/algorithms/${newline//' '/'%20'})|")
        num=num+6
        sed -i ''${num}'i\'"${res}"'' README.md
    done
    

    传入的参数为新题的题号,用循环一个一个处理,将新题加入排序中找到其顺序,然后插入之前的索引即可。最后一行代码:

    sed -i ''${num}'i\'"${res}"'' README.md
    

    其中 sed 是流编辑器,按行处理,将结果插入索引中。

    脚本使用的方式如下,即图中的 newindex.sh

    脚本使用

    用脚本整理文件真的很方便,各位读者也可以尝试一下。

    附上 ACool 的 Leetcode 题解地址:https://github.com/starFalll/LeetCode

    相关文章

      网友评论

          本文标题:用脚本整理Leetcode

          本文链接:https://www.haomeiwen.com/subject/lasmzftx.html