连小学生都开始学编程了

确实没有想到,一个小学生的思考题居然会有336种解法,不会编程,人力几乎是不可能完成的啊!

最开始是在朋友圈刷到了这样的一道小学生思考题,如下所示:

10481613403804_.pic_hd

但是呢,朋友圈那个小伙伴写的代码实在是让我不敢恭维,如下所示:

10491613403805_.pic

各式各样的循环和嵌套,我当时就觉得不太好,所以转发了这个习题到我们各个生物信息学交流群,以及2019和2020的学员群,让大家试试看,写一个漂亮的代码。

但是等了半个多小时,12点的钟声都敲响了,仍然是没有回复。我实在是睡不着,爬起来,三下五除二写了一个代码,如下所示:

10541613405950_.pic

首先从代码量看起来就简单很多,得到的结果也是一致的:

10531613405949_.pic_hd

这样的1-9的数字不重复的组合其实是一个排列问题,有362880种形式,这个 combinat::permn 轮子超级好用:

> combinat::permn(1:2)
[[1]]
[1] 1 2

[[2]]
[1] 2 1

但是我也确实没有想到,这个小学生思考题居然是有如此多解法。

如果没有编程语言的辅助,大家该如何完成呢?

x=sample(1:9,9)
x
check <- function(x){ 
 if (sum(c(100,10,1,100,10,1,-100,-10,-1)*x) == 0) {
 return(paste0(x[1],x[2],x[3],"+",x[4],x[5],x[6],"=",x[7],x[8],x[9]))
 }
}
check(x)
# BiocManager::install('combinat')
library(combinat) 
unlist(lapply(combinat::permn(1:9),check))

编程能力其实是解决问题的能力!

对生物信息学从业者来说,尤其如此。再怎么强调生物信息学数据分析学习过程的计算机基础知识的打磨都不为过,我把它粗略的分成基于R语言的统计可视化,以及基于Linux的NGS数据处理

把R的知识点路线图搞定,如下:

  • 了解常量和变量概念
  • 加减乘除等运算(计算器)
  • 多种数据类型(数值,字符,逻辑,因子)
  • 多种数据结构(向量,矩阵,数组,数据框,列表)
  • 文件读取和写出
  • 简单统计可视化
  • 无限量函数学习

Linux的6个阶段也跨越过去 ,一般来说,每个阶段都需要至少一天以上的学习:

  • 第1阶段:把linux系统玩得跟Windows或者MacOS那样的桌面操作系统一样顺畅,主要目的就是去可视化,熟悉黑白命令行界面,可以仅仅以键盘交互模式完成常规文件夹及文件管理工作。
  • 第2阶段:做到文本文件的表格化处理,类似于以键盘交互模式完成Excel表格的排序、计数、筛选、去冗余,查找,切割,替换,合并,补齐,熟练掌握awk,sed,grep这文本处理的三驾马车。
  • 第3阶段:元字符,通配符及shell中的各种扩展,从此linux操作不再神秘!
  • 第4阶段:高级目录管理:软硬链接,绝对路径和相对路径,环境变量。
  • 第5阶段:任务提交及批处理,脚本编写解放你的双手。
  • 第6阶段:软件安装及conda管理,让linux系统实用性放飞自我。

Comments are closed.