diff --git a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md index 8560f2f..5c18af8 100644 --- a/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md +++ b/3.编程思维体系构建/3.2.2手把手教你学算法——如何使用OJ(Online Judge).md @@ -2,17 +2,17 @@ 在之前的篇章中,我们向新手 acmer 推荐了两个编程网站——Luogu 与 Codeforces,下面由笔者向各位介绍一下网站的详细用法。 -# Luogu +## Luogu 进入 [https://www.luogu.com.cn/](https://www.luogu.com.cn/) ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing1.png) -## 社交模块 +### 社交模块 做为一个刷题网站,Luogu 提供了符合中文用户习惯的社交模块。体现于左侧边栏的讨论及主页的最近讨论,以及底部的“发射犇犇”系统。但是我并不建议 Acmer 使用该功能,因为 Luogu 主要面向初高中生甚至小学生等参加 NOIP 系列竞赛的用户,讨论不可避免存在一些低龄化现象。对于社交模块的使用,我推荐当且仅当一种做不出题的求助手段,这点放在之后题目模块讲解。 -## 题目模块 +### 题目模块 点开题库,我们看见以下界面 @@ -40,7 +40,7 @@ O2 优化是一种优化(废话)假如您的代码复杂度正确但 TLE,可以尝试该选项。 -## 记录模块 +### 记录模块 怎么知道自己代码的问题出在哪里呢?记录模块是帮助你的好工具。 @@ -60,7 +60,7 @@ MLE:空间超限 请检查是否递归爆栈、数组过大 OLE:输出超限 放心你见不到的 -## 题单模块 +### 题单模块 点开侧栏题单 @@ -68,11 +68,11 @@ OLE:输出超限 放心你见不到的 建议新手从官方精选题单开始,由浅入深,由简到难。等到对算法形成概念,针对漏洞补习时可以尝试用户分享题单(到那个阶段已经有很多手段去找题了,刘教练的题单就够你做了) -## 比赛模块 +### 比赛模块 点开侧栏就能看见准备举办和已结束的比赛。笔者不建议大家在 Luogu 打比赛,首先赛制不一样,其次出题风格不一样,最后对于初学者 Luogu 比赛的难度曲线过大。 -# Codeforces +## Codeforces 进入 [https://codeforces.com/?locale=en](https://codeforces.com/?locale=en) @@ -82,19 +82,19 @@ OLE:输出超限 放心你见不到的 右上角注册登录切语言(哇塞,可以选俄语,你说的对,但是 CF 是一款由俄罗斯开发的多人在线竞技游戏) -## HOME 模块 +### HOME 模块 主页显示各种数据,主要为近期比赛的一些公告。 -## TOP 模块 +### TOP 模块 热帖,如果擅长英语的话,CF 的交流氛围还是不错的,做为一个答疑解惑的论坛肯定比国内强。 -## CATALOG 模块 +### CATALOG 模块 文档目录,你可以在这学习算法竞赛入门,体系化学习算法,只要你会英语 -## CONTESTS +### CONTESTS 重中之重!CF 的比赛系统可以说是我们选择这个网站的最大原因! @@ -112,7 +112,7 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 下面以一场 Div.2 比赛为例,展示我们该如何打一场 CF。 -## VP +### VP ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing9.png) @@ -149,7 +149,7 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 ![](https://pic-hdu-cs-wiki-1307923872.cos.ap-shanghai.myqcloud.com/wenjing14.png) -## PROBLEMSET +### PROBLEMSET 同样,CF 也有题库 @@ -159,6 +159,6 @@ Div.1、Div.2、Div.3、Div.4 数字越小难度越大。 不过 CF 的题库比较鸡肋,标签筛选也不是很方便(大概是把想要的标签在右上角分隔好) -# 总结 +## 总结 笔者向读者详细介绍了两个 OJ,至于如何让 OJ 更好的辅助你的 ACM 学习,我应该在什么时间节点或训练阶段,出于什么训练目的选择哪个网站,笔者留到下一个篇章继续介绍。 diff --git a/3.编程思维体系构建/3.6.5.1CS61A食用指南 b/3.编程思维体系构建/3.6.5.1CS61A食用指南 new file mode 100644 index 0000000..6f9cda3 --- /dev/null +++ b/3.编程思维体系构建/3.6.5.1CS61A食用指南 @@ -0,0 +1,107 @@ +# CS61A 食用指南 + +## 为什么要学 CS61A? + +简单来说,学校的编程课只能教会你一些最基本的语法和代码逻辑,从学校的课程中,你很难学到一些实用的编程思想 (甚至一些老师自己也讲不明白)。一部分原因当然是老师上课完全没有想过如何渗透这些编程思想;还有一部分原因我认为是课后作业是在过于随意了,PTA 上的课后作业只是用来检测你是否掌握了一些最基础的语法,这样的题目是很难培养学生的编程思想的。 + +## 从 CS61A 中能学到什么? + +分语言来看,cs61a 讲了这三种语言: + +1. Python +2. Scheme +3. SQL + +分章节来看,cs61a 主要教了以下这些内容: + +1. 用函数构建抽象关系 + + 1. 函数与函数设计 + 2. 控制 + 3. 高级函数 + 4. 递归函数 +2. 用数据构建抽象关系 + + 1. 数据抽象 + 2. 可变数据 + 3. 面向对象编程 +3. 解释计算机程序 + + 1. 函数式编程 + 2. 异常 + 3. 解释器的开发 +4. 数据处理 + + 1. 声明式编程 + +## CS61A 好在哪里? + +~~暂且不考虑由于是伯克利大学的课程所以视频资料和教科书全是英文~~ + +每一节课程都有完备的视频资料和相对应的教科书,还有精心设计的 lab、hw、disc、proj + +所有题目都有完善的说明、例子、半自动的测试和批改,哪怕英语不是很好的同学也能理解到题目所要表达的意思 + +课程的设计目的是引导学生像计算机那样思考,在课程网站上有相当多的交互式页面来帮助你学习(不过因为我们没有伯克利大学的账号无法使用 🤪) + +课程中还推荐了一个学习 python 很好的网站,可以用来绘制环境图:[Python Tutor](http://tutor.cs61a.org/) + +~~(不像某些学校只会把学生丢进水池里,没淹死的都是学会游泳的好学生)~~ + +John Denero 教授的网课也是非常的有趣,如果你的英语够好,还能发现藏在视频里的一些小彩蛋 🤤 + +## 如何学习 CS61A? + +cs61a 绝对是一个挑战,但是我们都希望你学习并且成功,所以这里有一些可能对你的旅程有所帮助的小贴士: + +- 在 61A 中成功的方法有很多 ーー 我们发现下面的建议适用于几乎所有的学生,但是对不同的人最有效的方法是不同的,我们建议探索不同的学习和工作策略。~~如果你想和助教谈谈你的方法,我们有专门的~~~~咨询办公时间~~~~做这些事情!~~ +- 问问题 + + - 如果你遇到一些你不知道或不确定的概念或问题,_那就来问吧_~~。我们是来帮助你们学习的,如果你们提出一个问题,我们会告诉你们在哪些方面我们可以帮助你们理解这些材料。~~提出问题的过程本身也有助于你自己弄清楚你特别想问什么,从而找出你认为你可以学到更多的概念。 +- 小组学习 + + - 再次强调,这门课对于大多数学生来说都不是一门简单的课程,你可能会感到不知所措。给你的小伙伴们发送一个信息,并与班上的其他同学取得联系; 一起完成作业或一起学习准备考试,只要你不违反课程大纲中规定的诚实学习的[课程政策](https://inst.eecs.berkeley.edu/~cs61a/fa22/articles/about/#academic-misconduct)。 +- 当遇到问题时,试着组织语言来解释你遇到困难的地方。 + + - 这并不需要一个找到懂得如何解决问题的人 (或者甚至是一个人——这种做法通常被称为**橡皮鸭**,因为你可以把一只橡皮鸭当作你的练习对象) ,因为主要目标是让你弄清楚你自己的想法,弄清楚你的理解和代码到底在哪里卡住了。从那里你可以专注于那一部分,以便更好地理解。 +- 做所有的 hw(或者至少认真地尝试)。我们没有给出很多 hw 问题,但那些我们给你的可能会发现是具有挑战性、耗时且有回报的。 +- 做所有的 lab。其中大部分的设计更多的是作为一个课程材料的介绍,并可能需要半个小时左右的时间。这是一个熟悉新的知识点的好时机。 + +因为伯克利大学有着非常好的软硬件设施,所以在他们的课程体系中有助教和专门的论坛来辅助学习。杭电实在是没有这样的资源 🥲,所以在遇到问题的时候请先尝试独立解决,然后再和小伙伴们一起讨论,如果遇到实在解决不了的难题就来参考前人的 [GitHub](https://github.com/E1PsyCongroo/CS61A-FA22) 吧 + +## 如何使用 ok 进行代码测试? + +在 61a 中,我们使用一个名为 ok 的程序对 lab,hw 和 proj 进行自动评分。在你下载的每一份代码文件中,都应该找到 ok 程序。 + +确保在终端打开的路径下,包含 ok 和要测试的代码。 + +要使用 Ok 来运行指定函数的 doctests,请运行以下命令 + +```python3 ok -q #会和你要补充的代码一起给出``` + +默认情况下,只有没有通过的测试才会出现。你可以使用-v 选项来显示所有的测试,包括你已经通过的测试 + +```python3 ok -v``` + +有时我们会看到类似这样的 ok 指令 + +```python3 ok -q control -u``` + +在终端中输入后,需要按照要求回答问题,有些时候会做为某些函数测试的前置条件 + +一般情况下,执行上述 ok 指令后,都会在终端里提示输入 Berkeley 账号进行提交,这时候输入 `Ctrl+C` 退出即可;不过我们可以在代码后面加上 `--local` 进行本地测试;所有的测试都可以本地完成,不需要联网 + +![图片丢失](static/ok01.jpg) + +关于使用 Ok 命令的更多信息,请在[此处](https://inst.eecs.berkeley.edu/~cs61a/fa22/articles/using-ok/)了解更多 + +## 在学习过程中,你可以能会遇到的问题和解决方法 + +1. 在 CS61A 的学习过程中,你可能会找不到 61A 的每一个 lab、hw、disc、proj 的答案,这是因为 61A 说不断更新并进行授课的,所以每过一个季度 61A 是会进行换季的,所以为了避免这个问题,请尽早将 61A 主页的每一个答案保存下来。如果你已经遇到了这种问题,那么向已经学习了这门课的学长学姐求助是个不错的选择。 +2. 如果出现以下情况,这说明你的并没有在测试对象的目录进行测试,最简单解决办法就是在你对应位置的目录进行鼠标右键点击“在终端中打开”进行输入测试。 + +![图片丢失](static/02.png) + +1. 如果输入了命令后回车没有任何反应,请试试将测试代码的 python3 变为 python 或者 py 进行操作,如果还没有解决请仔细阅读 61A hw 部分的 Using ok,链接一般位于 HW 01 的开头。 + +英文学习的痛苦比不上接触国外优秀课程带来的快乐,请保持初心,砥砺前进,祝愿同学们都能有一个有趣的学习体验 🥰 diff --git a/3.编程思维体系构建/3.6.5关于CS61A.md b/3.编程思维体系构建/3.6.5关于CS61A.md index 0d6e800..579c74a 100644 --- a/3.编程思维体系构建/3.6.5关于CS61A.md +++ b/3.编程思维体系构建/3.6.5关于CS61A.md @@ -17,3 +17,5 @@ ps:哪怕是 cs61a 这样优秀的课程,给出的解决方案里也会有 pps:如果你找到了 sol 里不是那么正确的代码,请联系我们,我们将新建一个文档来记录 sol 中这些“错误”的代码 ppps:当然存在“错误”的代码的概率很小,你发现它们的概率就更小了 + +pppps:不只是在 sol 文件中,youtube 上的视频中的代码也可能会出现一些小问题 diff --git a/3.编程思维体系构建/static/ok01.jpg b/3.编程思维体系构建/static/ok01.jpg new file mode 100644 index 0000000..5b0d2f3 Binary files /dev/null and b/3.编程思维体系构建/static/ok01.jpg differ diff --git a/3.编程思维体系构建/static/ok02.png b/3.编程思维体系构建/static/ok02.png new file mode 100644 index 0000000..6939594 Binary files /dev/null and b/3.编程思维体系构建/static/ok02.png differ