dsap-cli 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dsap/__init__.py +21 -0
- dsap/__main__.py +9 -0
- dsap/cli.py +618 -0
- dsap/config.py +158 -0
- dsap/data/blind75.yaml +405 -0
- dsap/data/grind75.yaml +401 -0
- dsap/data/neetcode150.yaml +796 -0
- dsap/database.py +774 -0
- dsap/models.py +225 -0
- dsap/problem_sets.py +195 -0
- dsap/py.typed +0 -0
- dsap/sm2.py +521 -0
- dsap/ui.py +445 -0
- dsap_cli-0.1.0.dist-info/METADATA +287 -0
- dsap_cli-0.1.0.dist-info/RECORD +18 -0
- dsap_cli-0.1.0.dist-info/WHEEL +4 -0
- dsap_cli-0.1.0.dist-info/entry_points.txt +2 -0
- dsap_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dsap-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A CLI for mastering Data Structures & Algorithms using spaced repetition (SM-2).
|
|
5
|
+
Project-URL: Homepage, https://github.com/alquatra/dsap
|
|
6
|
+
Project-URL: Documentation, https://github.com/alquatra/dsap#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/alquatra/dsap.git
|
|
8
|
+
Project-URL: Issues, https://github.com/alquatra/dsap/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/alquatra/dsap/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: "Juma R. Paul" <jumarobertpaul@gmail.com>
|
|
11
|
+
Maintainer-email: "Juma R. Paul" <jumarobertpaul@gmail.com>
|
|
12
|
+
License-Expression: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: algorithms,cli,coding-interview,data-structures,dsa,leetcode,sm2,spaced-repetition,study
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Environment :: Console
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: Intended Audience :: Education
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Natural Language :: English
|
|
21
|
+
Classifier: Operating System :: OS Independent
|
|
22
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Topic :: Education
|
|
28
|
+
Classifier: Topic :: Software Development
|
|
29
|
+
Classifier: Typing :: Typed
|
|
30
|
+
Requires-Python: >=3.10
|
|
31
|
+
Requires-Dist: click<9,>=8.1
|
|
32
|
+
Requires-Dist: pydantic<3,>=2
|
|
33
|
+
Requires-Dist: pyyaml<7,>=6
|
|
34
|
+
Requires-Dist: rich<14,>=13
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: mypy<2,>=1; extra == 'dev'
|
|
37
|
+
Requires-Dist: pre-commit<4,>=3; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest-cov<5,>=4; extra == 'dev'
|
|
39
|
+
Requires-Dist: pytest<9,>=8; extra == 'dev'
|
|
40
|
+
Requires-Dist: ruff<1,>=0.4; extra == 'dev'
|
|
41
|
+
Requires-Dist: types-pyyaml<7,>=6; extra == 'dev'
|
|
42
|
+
Description-Content-Type: text/markdown
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Data Structures and Algorithms Practice (DSAP)
|
|
47
|
+
|
|
48
|
+
[](https://pypi.org/project/dsap-cli/)
|
|
49
|
+
[](https://pypi.org/project/dsap-cli/)
|
|
50
|
+
[](https://www.python.org/downloads/)
|
|
51
|
+
[](https://opensource.org/licenses/MIT)
|
|
52
|
+
|
|
53
|
+
DSAP is a terminal-first CLI that schedules coding interview problems using the **SM-2 spaced repetition algorithm**, helping you retain patterns long-term instead of forgetting them after solving once.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
# Why DSAP?
|
|
58
|
+
|
|
59
|
+
Most developers preparing for technical interviews solve algorithm problems once and never revisit them.
|
|
60
|
+
|
|
61
|
+
As a result, they forget patterns they previously learned.
|
|
62
|
+
|
|
63
|
+
DSAP solves this by scheduling problems using **spaced repetition**, a learning technique proven to improve long-term memory.
|
|
64
|
+
|
|
65
|
+
Benefits:
|
|
66
|
+
|
|
67
|
+
- Retain algorithm patterns long-term
|
|
68
|
+
- Structured daily practice
|
|
69
|
+
- Automatic scheduling of reviews
|
|
70
|
+
- Focus on problems you’re about to forget
|
|
71
|
+
|
|
72
|
+
Instead of guessing what to practice next, **DSAP tells you exactly what to review**.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
# Installation
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Recommended
|
|
80
|
+
uv tool install dsap-cli
|
|
81
|
+
|
|
82
|
+
# Alternatives
|
|
83
|
+
pipx install dsap-cli
|
|
84
|
+
pip install dsap-cli
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Verify installation:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
dsap --version
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
# Quick Start
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Load problems and set focus
|
|
99
|
+
dsap load blind75
|
|
100
|
+
dsap config preferred_set blind75
|
|
101
|
+
|
|
102
|
+
# Start practicing
|
|
103
|
+
dsap next
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
For the full workflow see:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
USER_GUIDE.md
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
# Example Session
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
$ dsap next
|
|
118
|
+
|
|
119
|
+
📌 Next Problem
|
|
120
|
+
Two Sum (Easy)
|
|
121
|
+
|
|
122
|
+
Category: Arrays
|
|
123
|
+
Set: Blind 75
|
|
124
|
+
|
|
125
|
+
Open problem in browser? [y/N]
|
|
126
|
+
|
|
127
|
+
After solving, rate your recall:
|
|
128
|
+
|
|
129
|
+
5 - Perfect
|
|
130
|
+
4 - Good
|
|
131
|
+
3 - Hard
|
|
132
|
+
2 - Incorrect but remembered idea
|
|
133
|
+
1 - Incorrect
|
|
134
|
+
0 - Complete blackout
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
DSAP then schedules the next review automatically.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
# Commands
|
|
142
|
+
|
|
143
|
+
| Command | Description |
|
|
144
|
+
|--------|-------------|
|
|
145
|
+
| `dsap next` | Get next recommended problem |
|
|
146
|
+
| `dsap review` | Review due problems in a session |
|
|
147
|
+
| `dsap list` | List problems with filters |
|
|
148
|
+
| `dsap stats` | View progress and statistics |
|
|
149
|
+
| `dsap load` | Load curated problem sets |
|
|
150
|
+
| `dsap config` | Manage configuration |
|
|
151
|
+
| `dsap reset` | Reset problems and/or progress |
|
|
152
|
+
| `dsap add` | Add a custom problem |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
# Examples
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Filter by problem set
|
|
160
|
+
dsap next --set blind75
|
|
161
|
+
dsap review --set neetcode150
|
|
162
|
+
|
|
163
|
+
# Filter by difficulty
|
|
164
|
+
dsap next --difficulty Easy
|
|
165
|
+
dsap list --difficulty Hard
|
|
166
|
+
|
|
167
|
+
# Filter by category
|
|
168
|
+
dsap list --category "Dynamic Programming"
|
|
169
|
+
|
|
170
|
+
# Other options
|
|
171
|
+
dsap review --limit 5
|
|
172
|
+
dsap next --new-only
|
|
173
|
+
dsap list --due
|
|
174
|
+
|
|
175
|
+
# Reset progress
|
|
176
|
+
dsap reset --progress
|
|
177
|
+
|
|
178
|
+
# Reset a specific set
|
|
179
|
+
dsap reset --set blind75 --all
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
# Problem Sets
|
|
185
|
+
|
|
186
|
+
| Set | Problems | Description |
|
|
187
|
+
|----|----|----|
|
|
188
|
+
| `blind75` | 75 | Core interview essentials |
|
|
189
|
+
| `neetcode150` | 150 | Comprehensive curriculum |
|
|
190
|
+
| `grind75` | 75 | Flexible study roadmap |
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
dsap load --list
|
|
194
|
+
dsap load blind75
|
|
195
|
+
dsap load ./custom.yaml
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
# Configuration
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
dsap config --list
|
|
204
|
+
dsap config preferred_set blind75
|
|
205
|
+
dsap config daily_goal 5
|
|
206
|
+
dsap config preferred_difficulty Medium
|
|
207
|
+
dsap config auto_open_browser false
|
|
208
|
+
dsap config --reset
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
| Setting | Default | Description |
|
|
212
|
+
|----|----|----|
|
|
213
|
+
| `preferred_set` | None | Default problem set |
|
|
214
|
+
| `daily_goal` | 5 | Target problems per day |
|
|
215
|
+
| `preferred_difficulty` | None | Filter by difficulty |
|
|
216
|
+
| `show_hints` | true | Show problem hints |
|
|
217
|
+
| `auto_open_browser` | true | Open problems in browser |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
# How It Works
|
|
222
|
+
|
|
223
|
+
DSAP implements the **SM-2 (SuperMemo 2)** spaced repetition algorithm.
|
|
224
|
+
|
|
225
|
+
After solving each problem, rate your recall from **0–5**.
|
|
226
|
+
|
|
227
|
+
| Rating | Meaning | Effect |
|
|
228
|
+
|----|----|----|
|
|
229
|
+
| 5 | Perfect | Interval grows |
|
|
230
|
+
| 4 | Good | Interval grows |
|
|
231
|
+
| 3 | Hard | Interval grows slowly |
|
|
232
|
+
| 0-2 | Forgot | Interval resets |
|
|
233
|
+
|
|
234
|
+
Typical interval progression:
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
1 day → 6 days → 15 days → 38 days → 95 days
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
After several successful reviews, problems reappear only every few months.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
# Data Storage
|
|
245
|
+
|
|
246
|
+
DSAP stores all data locally:
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
~/.dsap/
|
|
250
|
+
├── dsap.db
|
|
251
|
+
└── config.json
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
To completely uninstall:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
uv tool uninstall dsap-cli
|
|
258
|
+
rm -rf ~/.dsap
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
# Development
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
git clone https://github.com/juma-paul/dsap-cli.git
|
|
267
|
+
cd dsap-cli
|
|
268
|
+
|
|
269
|
+
uv sync --all-extras
|
|
270
|
+
uv run pytest
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
# Changelog
|
|
276
|
+
|
|
277
|
+
See the full release history in:
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
CHANGELOG.md
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
# License
|
|
286
|
+
|
|
287
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
dsap/__init__.py,sha256=5XgE49uJFttFU9TWfcb0rIqzvwtuUuWAiaHZhx2ossU,618
|
|
2
|
+
dsap/__main__.py,sha256=GwLikf--QR1WA0rvXyJjF1pDO6-DHf74s8XcVC3z4VQ,122
|
|
3
|
+
dsap/cli.py,sha256=_fwbdCIHB-jf2zDYqhwk9-Gq5S4MN7ZLeAWGil0g8Nw,17886
|
|
4
|
+
dsap/config.py,sha256=Sx2kMclYGrwMz3RaC4LDy5h4bPWoHfqiFm7tuaGBOrs,4648
|
|
5
|
+
dsap/database.py,sha256=nzFvKuy4AITvicOTmici66yaFxnUcQHQXQu3NhyKRR4,27217
|
|
6
|
+
dsap/models.py,sha256=ekQvBxkf0vCRI-58sWPajuIzOTiHVq8HZ_kpIvwP0sE,7009
|
|
7
|
+
dsap/problem_sets.py,sha256=ZZvAr4kHlXqnQbCVQT5N7HW2EznZTENDZWd2KYKXHZw,5427
|
|
8
|
+
dsap/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
dsap/sm2.py,sha256=oVW0BSCIvCR8T-WZuSUkmXCXX0vQSuFSB1UshQlisHQ,17129
|
|
10
|
+
dsap/ui.py,sha256=yD7-AE_SiHiSWI-haBKyUTK6X35TlEaICwmhx_HPqNc,13288
|
|
11
|
+
dsap/data/blind75.yaml,sha256=ZiIZlySgIJUwiBz2qQW9oYE15MjIVVpo-sT9iJtC4aw,14375
|
|
12
|
+
dsap/data/grind75.yaml,sha256=DepmLsHYhSOgRlRg2CCu7JZG7bk2zxUz5gIt1-Q5-og,14078
|
|
13
|
+
dsap/data/neetcode150.yaml,sha256=aKjMy79ZVyl71CLD_fKkkZJx6oACeLId7trSb2bSuDo,28040
|
|
14
|
+
dsap_cli-0.1.0.dist-info/METADATA,sha256=VfrFXCXxfibuQC2XfXJSrTX-tNytTO4a8GtbVld0_io,6383
|
|
15
|
+
dsap_cli-0.1.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
16
|
+
dsap_cli-0.1.0.dist-info/entry_points.txt,sha256=VVbhRF2SvefP5ILXgmDe0DxsGu6Vl26tntajkIERPJY,39
|
|
17
|
+
dsap_cli-0.1.0.dist-info/licenses/LICENSE,sha256=BwtbR5kJlaACk5LKNYgGtMraQK5t9wyAgCUw1eV9Src,1069
|
|
18
|
+
dsap_cli-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Juma R. Paul
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|