作者:嘉兴布奇乐乐园 | 来源:互联网 | 2023-10-13 08:21
开发背景
初次在拼题A(Pintia)上刷题是在2019年的暑假,使用的首选语言是 C++,编辑器则以 VS Code 为主。VS Code 由于其免费、轻量以及插件库丰富的特性,吸引了越来越多的开发者,当然这也是它非常适合用于刷题的原因,如刷题时常用的C/C++、Python或者Java语言都可以通过在 VS Code 上安装对应的插件以及配置其编译器得到支持。而在 VS Code 上开发 Pintia 刷题插件的起因是由于我在刷 LeetCode 题时无意间注意到在 VS Code 插件商店中发布了一款用于 LeetCode 的刷题插件,可以在 VS Code 中直接登录与提交力扣代码,并在插件中实现了网页版 LeetCode 的许多功能,如预览、收藏、提交测试等。这种将刷题和编码通过编辑器整和的创意对练习者来说是非常便利的,于是,我向@陈越姥姥询问百腾是否有做这样一款插件的计划,当时的回复大概是说“这类插件通常是社区自主开发,官方不会出这样一个插件”。因此利用暑期的这段时间,完成了第一个 Beta 版本。
代码的开源仓库:GitHub | Gitee
插件首页地址:Pintia - Visual Studio Marketplace
0. 功能介绍
- 使用微信二维码扫码登录 Pintia/PTA(暂不支持账号密码登录)
- 本地显示公共题库(需要读者验证码的题集会被标记上锁符号)
- 在 VS Code 中预览题目
- 题目中的输入/输出样例可点击复制
- 向 Pintia/PTA 提交或测试你的 Solution
- 在编辑区中快速添加多个自定义测试样例
- 自动签到 Pintia/PTA 的教育超市
1. 插件安装
在本地安装 VS Code- 在 VS Code 的插件商店中,搜索关键字
pintia
或者pta
,点击安装。或者点此进入插件主页点击安装进行跳转。
2. 使用介绍
2.1. 登录/登出
2.2. 预览问题与编码
- 点击问题,即可查看问题描述
- 点击右下角的
Code New
按键,开始编码
注:插件中默认选择的语言是C++,可以在设置中或者使用命令面板键入Pintia: Change Default Language
来快速修改默认使用的编程语言。部分题集(如教材类题集)指定了可用的编程语言,此时创建源文件则会以规定使用的语言为准,如果指定可用的编程语言有多个(如ZOJ Problem Set
题集),则会弹出提示以重新选择想用的编程语言。
⭐️ 预览区的输入输出样例点击可复制
每道题目的源文件会被创建到用户指定的工作区目录,首次创建源文件时,需要用户选择所用的工作区(默认推荐的工作区目录为 $HOME/.pintia/codes ),或者也可在 VS Code 的设置中修改pintia.workspaceFolder
配置项。
2.3. 编辑器快捷键
- Pintia 插件暂支持2个编辑器快捷键
Submit
:向 Pintia 提交你的答案Test
:用自定义的测试样例或默认样例测试你的答案
点击Test
测试代码时,会自动获取题目中可用的测试样例(并不是问题描述中的输入输出样例)作为默认测试样例,若无默认测试样例插件会予以提示。
注:默认的测试样例指的是,Pintia能提供答案的测试样例。使用自定义的测试样例测试代码时,Pintia只会返回你的代码对测试样例的输出而不会返回真实的答案。而使用默认的测试样例时,Pintia会提供正确的输出予以对照(但实际上部分题目即使提供了默认测样样例,Pintia 也不会返回正确输出)。
2.4. 自定义测试样例
自定义测试样例是为了方便快速测试自己的代码,你可以直接在代码的下方将自定义的测试样例放置在@pintia test=start
和@pintia test=end
之间(输入ptatest
可快速添加),并点击Test custom sample
来快速测试。自定义测试样例可添加多个。
注:在代码编辑区点击Submit
或者Test
提交代码时,只有包裹在@pintia code=start
与@pintia code=end
中的代码会被提交,区域外的文本内容不会被提交到Pintia,因此这有个小trick,即提交函数题时,可以在源文件中添加完整的代码供本地测试,而将所要提交的函数段代码包裹在上述标识符中。如果误删了上述标识,可在编辑区中输入ptacode
来快速添加。
2.5. View 菜单
在 Explorer 的顶部实现了5个快捷菜单,分别用于:
- 打开 Pintia 官网
- 登录/登出
- 刷新列表
- Report Issue
- 收起所有列表
3. 命令面板
为了快速使用相关功能,可以在 VS Code 中使用 Ctrl+Shift+P
(in Windows) 或 Command+Shift+P
(in Mac)打开命令面板并输入pintia
以快速使用插件的相关命令。可用的命令如下:
其中,Pintia: Clear Cache
命令用于清除缓存,由于 Pintia 中的题目集或题目信息通常是不变的,因此,为了避免发送重复的请求造成资源浪费,插件会将请求到的信息缓存在本地,如果发现本地显示的内容和官网上有冲突可以使用上述命令清除本地缓存后点击Refresh
刷新题目列表或者重启 VS Code。
4. 插件配置项
设置名称 | 描述 | 默认值 |
---|
pintia.showLocked | 指定是否显示锁定的问题(一些题目集需要验证用户的读者码后方可提交) | true |
pintia.defaultLanguage | 指定用于解题的默认语言。支持的语言有C (gcc), C++ (g++), C (clang), C++ (clang++), Java (javac), Python (python2), Python (python3), Ruby (ruby), Bash (bash), Plaintext (cat), CommonLisp (sbcl), Pascal (fpc), Go (go), Haskell (ghc), Lua (lua), Lua (luajit), C# (mcs), Javascript (node), OCaml (ocamlc), PHP (php), Perl (perl), AWK (awk), D (dmd), Racket (racket), Vala (valac), Visual Basic (vbnc), Kotlin (kotlinc), Swift (swiftc), Objective-C (gcc), Fortran95 (gfortran), Octave (octave-cli), R ®, ASM (nasm. sh), Rust (rustc), Scala (scalac), Python (pypy3), SQL (SQL) | C++ (g++) |
pintia.workspaceFolder | 指定工作区文件夹的路径,以存储代码文件 | “” |
pintia.enableStatusBar | 指定是否显示Pintia状态栏 | true |
pintia.editor.shortcuts | 指定编辑器中的自定义快捷方式。目前仅支持submit, test | [“Submit”,“Test”] |
pintia.paging.pageSize | 当问题集过大时,是否对问题列表进行分页。当pageSize为0表示不分页 | 100 |
pintia.autoCheckIn | 指定当Pintia插件被激活时,是否自动签到Pintia的教育商店 | false |
5. 维护计划
插件目前刚刚发布,仅实现了较为基础的答题功能,仍处于 Beta 版本,如果在使用过程中出现 Bug,可在 GitHub 上 New Issue。初步预想的一些功能会在后续逐步添加,如:
- 直接使用账号密码登录Pinta/PTA
- 在本地记录答题历史
- 快速搜索题解
- 题目搜索