examshell-python 0.1.3__tar.gz → 0.1.5__tar.gz

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.
Files changed (21) hide show
  1. examshell_python-0.1.5/LICENSE +21 -0
  2. examshell_python-0.1.5/PKG-INFO +138 -0
  3. examshell_python-0.1.5/README.md +125 -0
  4. {examshell_python-0.1.3 → examshell_python-0.1.5}/pyproject.toml +1 -1
  5. examshell_python-0.1.5/src/examshell_python.egg-info/PKG-INFO +138 -0
  6. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/SOURCES.txt +1 -0
  7. examshell_python-0.1.3/PKG-INFO +0 -10
  8. examshell_python-0.1.3/README.md +0 -0
  9. examshell_python-0.1.3/src/examshell_python.egg-info/PKG-INFO +0 -10
  10. {examshell_python-0.1.3 → examshell_python-0.1.5}/setup.cfg +0 -0
  11. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/__init__.py +0 -0
  12. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/__main__.py +0 -0
  13. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/config.py +0 -0
  14. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/data/data.json +0 -0
  15. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/main.py +0 -0
  16. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/models.py +0 -0
  17. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell/task_generator.py +0 -0
  18. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/dependency_links.txt +0 -0
  19. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/entry_points.txt +0 -0
  20. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/requires.txt +0 -0
  21. {examshell_python-0.1.3 → examshell_python-0.1.5}/src/examshell_python.egg-info/top_level.txt +0 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Denys Bobrov
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.
@@ -0,0 +1,138 @@
1
+ Metadata-Version: 2.4
2
+ Name: examshell-python
3
+ Version: 0.1.5
4
+ Summary: Interactive 42-style exam practice shell for Python exercises
5
+ Author: Denis
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: pydantic>=2.0
11
+ Requires-Dist: rich>=13.0
12
+ Dynamic: license-file
13
+
14
+ # examshell-python
15
+
16
+ Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
17
+
18
+ ## Features
19
+
20
+ - **Two modes** — Real (exam simulation) and Practice (free training)
21
+ - **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
22
+ - **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
23
+ - **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
24
+ - **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
25
+
26
+ ## Installation
27
+
28
+ Requires Python 3.10+.
29
+
30
+ ```bash
31
+ pip install examshell-python
32
+ ```
33
+
34
+ Or install from source:
35
+
36
+ ```bash
37
+ git clone <repo-url>
38
+ cd examshell-python
39
+ pip install .
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ```bash
45
+ examshell42
46
+ ```
47
+
48
+ On launch you choose a mode:
49
+
50
+ ```
51
+ ╭─ Choose your Exam mode ─╮
52
+ │ Real mode (1) │
53
+ │ Practice mode (2) │
54
+ ╰─────────────────────────╯
55
+ ```
56
+
57
+ ### Real mode
58
+
59
+ Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
60
+
61
+ | Command | Description |
62
+ |------------|------------------------------|
63
+ | `grademe` | Check your solution |
64
+ | `status` | Show current task info again |
65
+ | `finish` | End the exam |
66
+
67
+ ### Practice mode
68
+
69
+ Work through all tasks in any order, retry freely, no score pressure.
70
+
71
+ | Command | Description |
72
+ |------------|----------------------------------|
73
+ | `grademe` | Check your solution |
74
+ | `list` | Show all available tasks |
75
+ | `choose` | Pick a task by number |
76
+ | `skip` | Move to the next task |
77
+ | `status` | Show current task info again |
78
+ | `finish` | End the practice session |
79
+
80
+ ## How it works
81
+
82
+ When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
83
+
84
+ ```
85
+ exam42/
86
+ ├── subjects/
87
+ │ └── <task_name>/
88
+ │ ├── <task_name>.en.txt ← task description + signature + examples
89
+ │ ├── <task_name>.de.txt
90
+ │ └── ...
91
+ └── rendu/
92
+ └── <task_name>/
93
+ └── <task_name>.py ← put your solution here
94
+ ```
95
+
96
+ Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
97
+
98
+ ## Tasks
99
+
100
+ | Level | Difficulty | Task |
101
+ |-------|------------|------|
102
+ | 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
103
+ | 1 | Easy | `py_cryptic_sorter` — custom sort logic |
104
+ | 2 | Easy | `py_echo_validator` — string validation |
105
+ | 2 | Easy | `py_mirror_matrix` — matrix mirroring |
106
+ | 3 | Medium | `py_hidenp` — hidden number problem |
107
+ | 3 | Medium | `py_inter` — intersection of sequences |
108
+ | 3 | Medium | `py_number_base_converter` — base conversion |
109
+ | 3 | Medium | `py_pattern_tracker` — pattern detection |
110
+ | 4 | Medium | `py_anagram` — anagram check |
111
+ | 4 | Medium | `py_shadow_merge` — merge operations |
112
+ | 4 | Medium | `py_string_permutation_checker` — permutation check |
113
+ | 5 | Hard | `py_string_sculptor` — string transformation |
114
+ | 5 | Hard | `py_twist_sequence` — sequence manipulation |
115
+ | 6 | Hard | `py_whisper_cipher` — cipher encoding |
116
+
117
+ ## Dependencies
118
+
119
+ - [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
120
+ - [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
121
+
122
+ ## Project structure
123
+
124
+ ```
125
+ src/examshell/
126
+ ├── __init__.py
127
+ ├── __main__.py
128
+ ├── main.py # CLI entry point, mode logic, UI screens
129
+ ├── models.py # Pydantic models (Task, Description, Example)
130
+ ├── task_generator.py # TaskManager: file creation, grading, task selection
131
+ ├── config.py
132
+ └── data/
133
+ └── data.json # All task definitions
134
+ ```
135
+
136
+ ## License
137
+
138
+ MIT
@@ -0,0 +1,125 @@
1
+ # examshell-python
2
+
3
+ Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
4
+
5
+ ## Features
6
+
7
+ - **Two modes** — Real (exam simulation) and Practice (free training)
8
+ - **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
9
+ - **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
10
+ - **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
11
+ - **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
12
+
13
+ ## Installation
14
+
15
+ Requires Python 3.10+.
16
+
17
+ ```bash
18
+ pip install examshell-python
19
+ ```
20
+
21
+ Or install from source:
22
+
23
+ ```bash
24
+ git clone <repo-url>
25
+ cd examshell-python
26
+ pip install .
27
+ ```
28
+
29
+ ## Usage
30
+
31
+ ```bash
32
+ examshell42
33
+ ```
34
+
35
+ On launch you choose a mode:
36
+
37
+ ```
38
+ ╭─ Choose your Exam mode ─╮
39
+ │ Real mode (1) │
40
+ │ Practice mode (2) │
41
+ ╰─────────────────────────╯
42
+ ```
43
+
44
+ ### Real mode
45
+
46
+ Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
47
+
48
+ | Command | Description |
49
+ |------------|------------------------------|
50
+ | `grademe` | Check your solution |
51
+ | `status` | Show current task info again |
52
+ | `finish` | End the exam |
53
+
54
+ ### Practice mode
55
+
56
+ Work through all tasks in any order, retry freely, no score pressure.
57
+
58
+ | Command | Description |
59
+ |------------|----------------------------------|
60
+ | `grademe` | Check your solution |
61
+ | `list` | Show all available tasks |
62
+ | `choose` | Pick a task by number |
63
+ | `skip` | Move to the next task |
64
+ | `status` | Show current task info again |
65
+ | `finish` | End the practice session |
66
+
67
+ ## How it works
68
+
69
+ When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
70
+
71
+ ```
72
+ exam42/
73
+ ├── subjects/
74
+ │ └── <task_name>/
75
+ │ ├── <task_name>.en.txt ← task description + signature + examples
76
+ │ ├── <task_name>.de.txt
77
+ │ └── ...
78
+ └── rendu/
79
+ └── <task_name>/
80
+ └── <task_name>.py ← put your solution here
81
+ ```
82
+
83
+ Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
84
+
85
+ ## Tasks
86
+
87
+ | Level | Difficulty | Task |
88
+ |-------|------------|------|
89
+ | 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
90
+ | 1 | Easy | `py_cryptic_sorter` — custom sort logic |
91
+ | 2 | Easy | `py_echo_validator` — string validation |
92
+ | 2 | Easy | `py_mirror_matrix` — matrix mirroring |
93
+ | 3 | Medium | `py_hidenp` — hidden number problem |
94
+ | 3 | Medium | `py_inter` — intersection of sequences |
95
+ | 3 | Medium | `py_number_base_converter` — base conversion |
96
+ | 3 | Medium | `py_pattern_tracker` — pattern detection |
97
+ | 4 | Medium | `py_anagram` — anagram check |
98
+ | 4 | Medium | `py_shadow_merge` — merge operations |
99
+ | 4 | Medium | `py_string_permutation_checker` — permutation check |
100
+ | 5 | Hard | `py_string_sculptor` — string transformation |
101
+ | 5 | Hard | `py_twist_sequence` — sequence manipulation |
102
+ | 6 | Hard | `py_whisper_cipher` — cipher encoding |
103
+
104
+ ## Dependencies
105
+
106
+ - [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
107
+ - [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
108
+
109
+ ## Project structure
110
+
111
+ ```
112
+ src/examshell/
113
+ ├── __init__.py
114
+ ├── __main__.py
115
+ ├── main.py # CLI entry point, mode logic, UI screens
116
+ ├── models.py # Pydantic models (Task, Description, Example)
117
+ ├── task_generator.py # TaskManager: file creation, grading, task selection
118
+ ├── config.py
119
+ └── data/
120
+ └── data.json # All task definitions
121
+ ```
122
+
123
+ ## License
124
+
125
+ MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "examshell-python"
7
- version = "0.1.3"
7
+ version = "0.1.5"
8
8
  description = "Interactive 42-style exam practice shell for Python exercises"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1,138 @@
1
+ Metadata-Version: 2.4
2
+ Name: examshell-python
3
+ Version: 0.1.5
4
+ Summary: Interactive 42-style exam practice shell for Python exercises
5
+ Author: Denis
6
+ License: MIT
7
+ Requires-Python: >=3.10
8
+ Description-Content-Type: text/markdown
9
+ License-File: LICENSE
10
+ Requires-Dist: pydantic>=2.0
11
+ Requires-Dist: rich>=13.0
12
+ Dynamic: license-file
13
+
14
+ # examshell-python
15
+
16
+ Interactive terminal shell for practising 42-style Python exam tasks. Simulates the real exam environment — timed pressure, blind grading, sequential levels — or lets you work through exercises freely in practice mode.
17
+
18
+ ## Features
19
+
20
+ - **Two modes** — Real (exam simulation) and Practice (free training)
21
+ - **Automatic grading** — `grademe` runs your solution against test cases and shows a results table
22
+ - **Multi-language task descriptions** — each task is described in EN, DE, FR, ES, IT
23
+ - **14 tasks across 6 levels** — from easy warm-ups to hard algorithmic challenges
24
+ - **Clean terminal UI** — built with [Rich](https://github.com/Textualize/rich)
25
+
26
+ ## Installation
27
+
28
+ Requires Python 3.10+.
29
+
30
+ ```bash
31
+ pip install examshell-python
32
+ ```
33
+
34
+ Or install from source:
35
+
36
+ ```bash
37
+ git clone <repo-url>
38
+ cd examshell-python
39
+ pip install .
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ```bash
45
+ examshell42
46
+ ```
47
+
48
+ On launch you choose a mode:
49
+
50
+ ```
51
+ ╭─ Choose your Exam mode ─╮
52
+ │ Real mode (1) │
53
+ │ Practice mode (2) │
54
+ ╰─────────────────────────╯
55
+ ```
56
+
57
+ ### Real mode
58
+
59
+ Simulates the actual exam. Tasks are drawn randomly per level. Each correct solution earns **+16 points**; reach 100 to pass.
60
+
61
+ | Command | Description |
62
+ |------------|------------------------------|
63
+ | `grademe` | Check your solution |
64
+ | `status` | Show current task info again |
65
+ | `finish` | End the exam |
66
+
67
+ ### Practice mode
68
+
69
+ Work through all tasks in any order, retry freely, no score pressure.
70
+
71
+ | Command | Description |
72
+ |------------|----------------------------------|
73
+ | `grademe` | Check your solution |
74
+ | `list` | Show all available tasks |
75
+ | `choose` | Pick a task by number |
76
+ | `skip` | Move to the next task |
77
+ | `status` | Show current task info again |
78
+ | `finish` | End the practice session |
79
+
80
+ ## How it works
81
+
82
+ When a session starts, examshell creates a working directory (`exam42/`) with two sub-folders:
83
+
84
+ ```
85
+ exam42/
86
+ ├── subjects/
87
+ │ └── <task_name>/
88
+ │ ├── <task_name>.en.txt ← task description + signature + examples
89
+ │ ├── <task_name>.de.txt
90
+ │ └── ...
91
+ └── rendu/
92
+ └── <task_name>/
93
+ └── <task_name>.py ← put your solution here
94
+ ```
95
+
96
+ Write your solution in `rendu/<task_name>/<task_name>.py`, then run `grademe`. The shell imports your file, executes each example against it, and prints a pass/fail table.
97
+
98
+ ## Tasks
99
+
100
+ | Level | Difficulty | Task |
101
+ |-------|------------|------|
102
+ | 1 | Easy | `py_bracket_validator` — validate bracket pairs `()[]{}` |
103
+ | 1 | Easy | `py_cryptic_sorter` — custom sort logic |
104
+ | 2 | Easy | `py_echo_validator` — string validation |
105
+ | 2 | Easy | `py_mirror_matrix` — matrix mirroring |
106
+ | 3 | Medium | `py_hidenp` — hidden number problem |
107
+ | 3 | Medium | `py_inter` — intersection of sequences |
108
+ | 3 | Medium | `py_number_base_converter` — base conversion |
109
+ | 3 | Medium | `py_pattern_tracker` — pattern detection |
110
+ | 4 | Medium | `py_anagram` — anagram check |
111
+ | 4 | Medium | `py_shadow_merge` — merge operations |
112
+ | 4 | Medium | `py_string_permutation_checker` — permutation check |
113
+ | 5 | Hard | `py_string_sculptor` — string transformation |
114
+ | 5 | Hard | `py_twist_sequence` — sequence manipulation |
115
+ | 6 | Hard | `py_whisper_cipher` — cipher encoding |
116
+
117
+ ## Dependencies
118
+
119
+ - [`pydantic`](https://docs.pydantic.dev/) ≥ 2.0 — task data models
120
+ - [`rich`](https://github.com/Textualize/rich) ≥ 13.0 — terminal UI
121
+
122
+ ## Project structure
123
+
124
+ ```
125
+ src/examshell/
126
+ ├── __init__.py
127
+ ├── __main__.py
128
+ ├── main.py # CLI entry point, mode logic, UI screens
129
+ ├── models.py # Pydantic models (Task, Description, Example)
130
+ ├── task_generator.py # TaskManager: file creation, grading, task selection
131
+ ├── config.py
132
+ └── data/
133
+ └── data.json # All task definitions
134
+ ```
135
+
136
+ ## License
137
+
138
+ MIT
@@ -1,3 +1,4 @@
1
+ LICENSE
1
2
  README.md
2
3
  pyproject.toml
3
4
  src/examshell/__init__.py
@@ -1,10 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: examshell-python
3
- Version: 0.1.3
4
- Summary: Interactive 42-style exam practice shell for Python exercises
5
- Author: Denis
6
- License: MIT
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- Requires-Dist: pydantic>=2.0
10
- Requires-Dist: rich>=13.0
File without changes
@@ -1,10 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: examshell-python
3
- Version: 0.1.3
4
- Summary: Interactive 42-style exam practice shell for Python exercises
5
- Author: Denis
6
- License: MIT
7
- Requires-Python: >=3.10
8
- Description-Content-Type: text/markdown
9
- Requires-Dist: pydantic>=2.0
10
- Requires-Dist: rich>=13.0