exercism 是一个不错的题目网站,但是它的过程并不是很方便,需要下载,构建测试才能知道,你的对错。所以有没有方便点的方式呢?
网页练习功能
这项功能是借助mdBook工具完成的,在 mdBook 生成的静态页面中,Rust 代码可以直接执行,它的工作原理是 js 底层与 Rust 游乐场 API 的交互。但是,原有的实现并不是 Rust 测试模式,所以我们要改些事情。(请往下阅读)
TODO
我们要改造的关键:
theme/book.js
改造- [x] 使用
cargo test
- [x] 合并用户输入与测试用例
- [x] 使用
修改默认主题的book.js
,如果你对这个修改过程感兴趣,请查阅使用 Cargo test
- [x] 自动化测试静态页面的代码执行。
为了对改造代码的有效性,有一定了解,我选择对页面进行自动化测试,我把它放在了github 上,不过我不建议你自行运行,因为会耗费时间与计算机资源,甚至无法完整通过测试(需要浏览器,打开 88 个网页)。其中借助 webdriver 测试项目,如有相关需求,可以自行了解,它的 API 还是很好用的。
说明
每个练习网页主要分为四个部分
-
- 说明/题目
-
- 未完成的代码(可编辑,直接运行就好)
-
- 测试代码(不可编辑)
-
- 示例答案(不可编辑,直接运行就好)
中文翻译列表
每个练习,最初来自英文人群,所以可能在某些说明上,和我国国情并不吻合,如遇到这种情况,完全可以 Issue/PR 该 github 项目,改成符合国情的问题。
测试代码与未完成代码之间,会有重叠的库导入(因我会把他俩合并,扔给 Rust 游乐场),所以需要修正。
还有,每个练习本身,都是完整的 Cargo 项目。其中自然少不了对其他非内置箱子的导入,在这时,我能做的,只是提示你们,某某项目无法通过网页测试(因,Rust 游乐场并没有该箱子):
- [x] 为中文校对,但有时出题的人,就只是搬维基百科的资料,所以,题目描述可能不是说百分百贴切。
>
为测试代码修正。no
具有非内置箱子,无法编译成功, 需要非内置的其他箱子,这时,只能说句“抱歉,要本机下载”。
易
- [x]
>
hello world - [x]
>
千兆秒 >< Gigasecond) - [x]
>
闰年 >< Leap - [x]
>
雨滴声 >< Raindrops - [x]
>
反转字符串 >< Reverse String - [x]
>
第 n 个素数 >< Nth Prime - [x]
>
迟钝孩子 >< Bob - [x]
>
啤酒之歌 >< Beer Song - [x]
>
谚语串烧 >< Proverb - [x]
>
平方差 >< Difference Of Squares - [x]
>
倍数之和 >< Sum Of Multiples - [x]
>
谷物 >< Grains - [x]
>
勾股数 >< Pythagorean Triplet - [x]
>
素数因子 >< Prime Factors - [x]
>
子串 >< Series - [x]
>
水仙花数 >< Armstrong Numbers - [x]
>
3n+1 猜想 >< Collatz Conjecture - [x]
>
迪菲-赫尔曼密钥交换 >< Diffie Hellman
中等
- [x]
>
- 鞍点 >< Saddle Points - [x]
>
等值线 >< Isogram - [x]
>
英文说数字 >< Say - [x]
>
游程编码 >< Run Length Encoding - [x]
>
图书编号 >< ISBN Verifier - [x]
>
数字也能分类 >< Perfect Numbers - [x]
>
时钟 >< Clock - [x]
no
DOT DSL - [x]
>
汉明距离 >< Hamming - [x]
>
简单链表 >< Simple Linked List - [x]
>
杨辉三角形 >< Pascal’s Triangle - [x]
>
字母的分数游戏 >< Scrabble Score - [x]
>
全字母句 >< Pangram - [x]
no
PaaS-IO-报告 >< Paasio - [x]
>
核苷酸计数 >< Nucleotide Count - [x]
>
模 10 算法 >< Luhn - [x]
>
最大数字子串乘积 >< Largest Series Product - [x]
>
单词计数 >< Word Count - [x]
>
Atbash 加密 >< Atbash Cipher - [x]
>
密码矩形 >< Crypto Square - [x]
>
旋转密码 >< Rotational Cipher - [x]
>
简单加密 >< Simple Cipher - [x]
>
栅栏密码 >< Rail Fence Cipher - [x]
>
ETL - [x]
>
集合操作 >< Accumulate - [x]
>
术语 >< Acronym - [x]
>
素数筛 >< Sieve - [x]
>
RNA 转录 >< RNA Transcription - [x]
>
三角形 - [x]
>
罗马数字 >< Roman Numerals - [x]
>
你所的基本 - [x]
>
学册 - [x]
>
二分查找 - [x]
>
机器人模拟器 - [x]
>
括号配套 - [x]
>
Luhn From - [x]
>
皇后 攻击 - [x]
>
保龄球 - [x]
>
子列表 - [x]
>
地球年 - [x]
>
Luhn Trait - [x]
>
宏 - [x]
>
过敏 - [x]
>
可变长度数量 - [x]
>
电话号码 - [x]
>
罗唆 - [x]
>
比赛 - [x]
>
自定义 set - [x]
no
字母谜题 - [x]
>
两个桶 - [x]
>
猪的拉丁文 - [x]
>
钻石 - [x]
>
螺旋矩阵 - [x]
>
回文产品 - [x]
no
扑克 - [x]
>
grep - [x]
no
音阶生成器 - [x]
no
十进制 - [x]
>
字谜 - [x]
>
蛋白质翻译 - [x]
>
机器人名称 - [x]
>
书店