├── .github
└── workflows
│ ├── build-on-merge.yml
│ └── build-on-pr.yml
├── .gitignore
├── .prettierignore
├── LICENSE
├── README.md
├── data
├── coins19.json
├── coins20.json
├── coins21.json
├── mast20.json
├── reqYml
│ ├── cisID20.yml
│ ├── cisIR20.yml
│ ├── coins19.yml
│ ├── coins20.yml
│ ├── coins21.yml
│ ├── mast20.yml
│ ├── math20.yml
│ └── psych20.yml
└── sample-coins20.json
├── py-cli
├── g_checker_for_itf
│ ├── Color.py
│ ├── Dir.py
│ ├── RecognizedFilter.py
│ ├── __init__.py
│ └── main.py
├── pyproject.toml
├── setup.cfg
└── setup.py
├── react-visualizer
├── .gitignore
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.css
│ ├── App.js
│ ├── checkGraduate
│ ├── checkGrad.ts
│ └── readCsv.ts
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── reqJson
│ ├── cisID20.json
│ ├── cisIR20.json
│ ├── coins19.json
│ ├── coins20.json
│ ├── coins21.json
│ ├── coins23-24.json
│ ├── klis21-knowledge.json
│ ├── klis21-management.json
│ ├── klis21-system.json
│ ├── mast20.json
│ ├── math20.json
│ └── psych20.json
│ └── setupTests.js
└── script
├── genJson.sh
├── genYml.sh
└── sample.csv
/.github/workflows/build-on-merge.yml:
--------------------------------------------------------------------------------
1 | name: build on merge
2 | on:
3 | push:
4 | branches:
5 | - main
6 |
7 | permissions:
8 | contents: read
9 | pages: write
10 | id-token: write
11 |
12 | concurrency:
13 | group: "pages"
14 | cancel-in-progress: false
15 |
16 | jobs:
17 | build:
18 | defaults:
19 | run:
20 | shell: bash
21 | working-directory: ./react-visualizer
22 | runs-on: ubuntu-latest
23 | steps:
24 | - uses: actions/checkout@v4
25 | - name: Use Node.js
26 | uses: actions/setup-node@v4
27 | with:
28 | node-version: 20
29 | - uses: actions/cache@v4
30 | id: node_modules_cache_id
31 | env:
32 | cache-name: cache-node-modules
33 | with:
34 | path: '**/node_modules'
35 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
36 | - if: ${{ steps.node_modules_cache_id.outputs.cache-hit != 'true' }}
37 | run: npm install
38 | - name: Build
39 | run: |
40 | npm run build
41 | - name: Upload artifact
42 | uses: actions/upload-pages-artifact@v2
43 | with:
44 | path: ./react-visualizer/build
45 | deploy:
46 | environment:
47 | name: github-pages
48 | url: ${{ steps.deployment.outputs.page_url }}
49 | runs-on: ubuntu-latest
50 | needs: build
51 | steps:
52 | - name: Deploy to GitHub Pages
53 | id: deployment
54 | uses: actions/deploy-pages@v2
55 |
--------------------------------------------------------------------------------
/.github/workflows/build-on-pr.yml:
--------------------------------------------------------------------------------
1 | name: build on pr
2 | on: pull_request
3 |
4 | jobs:
5 | build:
6 | defaults:
7 | run:
8 | shell: bash
9 | working-directory: ./react-visualizer
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v4
13 | - name: Use Node.js
14 | uses: actions/setup-node@v4
15 | with:
16 | node-version: 20
17 | - uses: actions/cache@v4
18 | id: node_modules_cache_id
19 | env:
20 | cache-name: cache-node-modules
21 | with:
22 | path: '**/node_modules'
23 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
24 | - if: ${{ steps.node_modules_cache_id.outputs.cache-hit != 'true' }}
25 | run: npm install
26 | - name: Build
27 | run: |
28 | npm run build
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | # build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | wheels/
23 | pip-wheel-metadata/
24 | share/python-wheels/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 | MANIFEST
29 |
30 | # PyInstaller
31 | # Usually these files are written by a python script from a template
32 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
33 | *.manifest
34 | *.spec
35 |
36 | # Installer logs
37 | pip-log.txt
38 | pip-delete-this-directory.txt
39 |
40 | # Unit test / coverage reports
41 | htmlcov/
42 | .tox/
43 | .nox/
44 | .coverage
45 | .coverage.*
46 | .cache
47 | nosetests.xml
48 | coverage.xml
49 | *.cover
50 | *.py,cover
51 | .hypothesis/
52 | .pytest_cache/
53 |
54 | # Translations
55 | *.mo
56 | *.pot
57 |
58 | # Django stuff:
59 | *.log
60 | local_settings.py
61 | db.sqlite3
62 | db.sqlite3-journal
63 |
64 | # Flask stuff:
65 | instance/
66 | .webassets-cache
67 |
68 | # Scrapy stuff:
69 | .scrapy
70 |
71 | # Sphinx documentation
72 | docs/_build/
73 |
74 | # PyBuilder
75 | target/
76 |
77 | # Jupyter Notebook
78 | .ipynb_checkpoints
79 |
80 | # IPython
81 | profile_default/
82 | ipython_config.py
83 |
84 | # pyenv
85 | .python-version
86 |
87 | # pipenv
88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
91 | # install all needed dependencies.
92 | #Pipfile.lock
93 |
94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95 | __pypackages__/
96 |
97 | # Celery stuff
98 | celerybeat-schedule
99 | celerybeat.pid
100 |
101 | # SageMath parsed files
102 | *.sage.py
103 |
104 | # Environments
105 | .env
106 | .venv
107 | env/
108 | venv/
109 | ENV/
110 | env.bak/
111 | venv.bak/
112 |
113 | # Spyder project settings
114 | .spyderproject
115 | .spyproject
116 |
117 | # Rope project settings
118 | .ropeproject
119 |
120 | # mkdocs documentation
121 | /site
122 |
123 | # mypy
124 | .mypy_cache/
125 | .dmypy.json
126 | dmypy.json
127 |
128 | # Pyre type checker
129 | .pyre/
130 |
131 |
132 | SIRS*
133 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | /src/reqJson/
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 oshamashama
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.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # g-checker-for-itf
3 |
4 | ITF の卒業要件を確認したい。(今は coins19/coins20/coins21, mast20 とか)
5 |
6 | 提供されているプログラム、またそのプログラムによる実行結果に関する保証はできかねます。
7 |
8 | ## Install
9 |
10 | ### Clone Repository
11 |
12 | ```bash
13 | git clone --depth 1 https://github.com/oshamashama/g-checker-for-itf
14 | cd g-checker-for-itf
15 | pip install ./pycli
16 | ```
17 |
18 | ### pip install
19 |
20 | ```bash
21 | pip install g-checker-for-itf
22 | ```
23 |
24 | のいずれかで`gchk`コマンドをインストールできます。
25 | 今時点で要件確認のためのファイルをこのリポジトリからダウンロードしてくる必要があるため、 Clone によるインストールを推奨します。
26 |
27 | #### Get Requirements File
28 |
29 | ```bash
30 | wget https://raw.githubusercontent.com/oshamashama/g-checker-for-itf/main/coins20.json
31 | ```
32 |
33 | などで卒業要件を定義したファイルをダウンロードしてきてください。
34 |
35 | ## Usage
36 |
37 | ```bash
38 | gchk -i target_csv_file -r requirements_json_file
39 | ```
40 |
41 | で実行できます。
42 |
43 | `target csv file` は twins の成績ページからダウンロードしたファイル (UTF, CSV) を想定しています。
44 |
45 | ```shellsession
46 | $ gchk
47 | usage: gchk [-h] [-i INPUT] [-r REQUIREMENTS] [-g] [-d] [-n] [-s] [-e] [-V]
48 |
49 | A checker if your credits meet the graduation requirements or not.
50 |
51 | optional arguments:
52 | -h, --help show this help message and exit
53 | -i INPUT, --input INPUT target file from twins (UTF-8, CSV) (default: sample.csv)
54 | -r REQUIREMENTS, --requirements REQUIREMENTS
55 | requirements file (default: coins20.json)
56 | -g, --gpa print GPA (default: False)
57 | -d, --drop print drop credit (default: True)
58 | -n, --name print name and id (default: False)
59 | -s, --save save as JSON (default: False)
60 | -e, --expect count 履修中 (default: False)
61 | -V, --version show program's version number and exit
62 | ```
63 |
64 | ## Test
65 |
66 | ```bash
67 | gchk -i sample.csv -r coins20.json
68 | ```
69 |
70 | で予め用意されたサンプルで動作を確認することが出来ます。
71 |
72 | ```bash
73 | wget https://raw.githubusercontent.com/oshamashama/g-checker-for-itf/main/coins20.json
74 | wget https://raw.githubusercontent.com/oshamashama/g-checker-for-itf/main/sample.csv
75 | ```
76 |
77 |
78 | ## Viewer
79 |
80 | 現状、このリポジトリを clone することが必要です。
81 |
82 | ```bash
83 | gchk -s -i target_csv_file
84 | cp saved_file ~/g-checker-for-itf/src/grade.json
85 | cd tani
86 | npm install
87 | npm start
88 | ```
89 |
90 |
91 | ## Screenshots
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/data/coins19.json:
--------------------------------------------------------------------------------
1 | src/reqJson/coins19.json
--------------------------------------------------------------------------------
/data/coins20.json:
--------------------------------------------------------------------------------
1 | src/reqJson/coins20.json
--------------------------------------------------------------------------------
/data/coins21.json:
--------------------------------------------------------------------------------
1 | src/reqJson/coins21.json
--------------------------------------------------------------------------------
/data/mast20.json:
--------------------------------------------------------------------------------
1 | src/reqJson/mast20.json
--------------------------------------------------------------------------------
/data/reqYml/cisID20.yml:
--------------------------------------------------------------------------------
1 | 国際総合学類国際開発学主専攻20年度入学:
2 | max_certificated_credit_num: 126
3 | min_certificated_credit_num: 126
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 117
7 | min_certificated_credit_num: 62
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 117
11 | min_certificated_credit_num: 62
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 6
15 | min_certificated_credit_num: 6
16 | leaf:
17 | 卒業論文:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^FB14908$
22 | regexp_name: ''
23 | 選択:
24 | max_certificated_credit_num: 75
25 | min_certificated_credit_num: 38
26 | leaf:
27 | BC11/16,BE22~:
28 | max_certificated_credit_num: 62
29 | min_certificated_credit_num: 0
30 | leaf:
31 | regexp_number: ^B(C1[126]|E22).*$
32 | regexp_name: ''
33 | BC12~:
34 | max_certificated_credit_num: 62
35 | min_certificated_credit_num: 14
36 | leaf:
37 | regexp_number: ^B(C1[126]|E22).*$
38 | regexp_name: ''
39 | BC13~:
40 | max_certificated_credit_num: 9
41 | min_certificated_credit_num: 6
42 | leaf:
43 | regexp_number: ^BC13.*$
44 | regexp_name: ''
45 | BC15~:
46 | max_certificated_credit_num: 4
47 | min_certificated_credit_num: 0
48 | leaf:
49 | regexp_number: ^BC15.*$
50 | regexp_name: ''
51 | 専門基礎:
52 | max_certificated_credit_num: 36
53 | min_certificated_credit_num: 18
54 | leaf:
55 | ? ''
56 | : max_certificated_credit_num: 36
57 | min_certificated_credit_num: 18
58 | leaf:
59 | 必修:
60 | max_certificated_credit_num: 4
61 | min_certificated_credit_num: 4
62 | leaf:
63 | 国際学I:
64 | max_certificated_credit_num: 1
65 | min_certificated_credit_num: 1
66 | leaf:
67 | regexp_number: ^BC50111$
68 | regexp_name: ''
69 | 国際学II:
70 | max_certificated_credit_num: 1
71 | min_certificated_credit_num: 1
72 | leaf:
73 | regexp_number: ^BC50121$
74 | regexp_name: ''
75 | 国際学III:
76 | max_certificated_credit_num: 1
77 | min_certificated_credit_num: 1
78 | leaf:
79 | regexp_number: ^BC50131$
80 | regexp_name: ''
81 | 国際学IV:
82 | max_certificated_credit_num: 1
83 | min_certificated_credit_num: 1
84 | leaf:
85 | regexp_number: ^BC50141$
86 | regexp_name: ''
87 | 選択:
88 | max_certificated_credit_num: 32
89 | min_certificated_credit_num: 14
90 | leaf:
91 | BC51(EDS,ED以外):
92 | max_certificated_credit_num: 14
93 | min_certificated_credit_num: 10
94 | leaf:
95 | regexp_number: ^(?!BC51(3[1-3]|5[78])4)BC51.*$
96 | regexp_name: ''
97 | EDS,ED:
98 | max_certificated_credit_num: 4
99 | min_certificated_credit_num: 4
100 | leaf:
101 | regexp_number: ^BC51(3[1-3]|5[78])4$
102 | regexp_name: ''
103 | BB050,FH611...:
104 | max_certificated_credit_num: 14
105 | min_certificated_credit_num: 0
106 | leaf:
107 | regexp_number: ^(BB050|FH611|FG10641|GA12|BE21).*$
108 | regexp_name: ''
109 | 基礎:
110 | max_certificated_credit_num: 66
111 | min_certificated_credit_num: 23
112 | leaf:
113 | 共通:
114 | max_certificated_credit_num: 31
115 | min_certificated_credit_num: 17
116 | leaf:
117 | 必修:
118 | max_certificated_credit_num: 16
119 | min_certificated_credit_num: 16
120 | leaf:
121 | 総合科目:
122 | max_certificated_credit_num: 2
123 | min_certificated_credit_num: 2
124 | leaf:
125 | regexp_number: ''
126 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
127 | 情報:
128 | max_certificated_credit_num: 4
129 | min_certificated_credit_num: 4
130 | leaf:
131 | regexp_number: ^6.*$
132 | regexp_name: ''
133 | 体育:
134 | max_certificated_credit_num: 2
135 | min_certificated_credit_num: 2
136 | leaf:
137 | regexp_number: ^2[12].*$
138 | regexp_name: ''
139 | 第1・2外国語:
140 | max_certificated_credit_num: 8
141 | min_certificated_credit_num: 8
142 | leaf:
143 | regexp_number: ^3.*$
144 | regexp_name: ''
145 | 選択:
146 | max_certificated_credit_num: 15
147 | min_certificated_credit_num: 1
148 | leaf:
149 | 総合科目(学士基盤科目):
150 | max_certificated_credit_num: 3
151 | min_certificated_credit_num: 1
152 | leaf:
153 | regexp_number: ^1.*$
154 | regexp_name: ''
155 | 体育:
156 | max_certificated_credit_num: 2
157 | min_certificated_credit_num: 0
158 | leaf:
159 | regexp_number: ^2.*$
160 | regexp_name: ''
161 | 外国語:
162 | max_certificated_credit_num: 6
163 | min_certificated_credit_num: 0
164 | leaf:
165 | regexp_number: ^3.*$
166 | regexp_name: ''
167 | 国語:
168 | max_certificated_credit_num: 2
169 | min_certificated_credit_num: 0
170 | leaf:
171 | regexp_number: ^5.*$
172 | regexp_name: ''
173 | 芸術:
174 | max_certificated_credit_num: 2
175 | min_certificated_credit_num: 0
176 | leaf:
177 | regexp_number: ^4.*$
178 | regexp_name: ''
179 | 関連:
180 | max_certificated_credit_num: 16
181 | min_certificated_credit_num: 6
182 | leaf:
183 | 必修:
184 | max_certificated_credit_num: 0
185 | min_certificated_credit_num: 0
186 | leaf: {}
187 | 選択:
188 | max_certificated_credit_num: 16
189 | min_certificated_credit_num: 6
190 | leaf:
191 | 社会・国際、特設自由科目並びに博物館:
192 | max_certificated_credit_num: 5
193 | min_certificated_credit_num: 0
194 | leaf:
195 | regexp_number: ^(BA|99|8).*$
196 | regexp_name: ''
197 | A/BB/C~:
198 | max_certificated_credit_num: 8
199 | min_certificated_credit_num: 3
200 | leaf:
201 | regexp_number: ^(A|BB|C).*$
202 | regexp_name: ''
203 | E/F/G/H/W/Y~:
204 | max_certificated_credit_num: 10
205 | min_certificated_credit_num: 3
206 | leaf:
207 | regexp_number: ^[EFGHWY].*$
208 | regexp_name: ''
209 | 教職に関する科目:
210 | max_certificated_credit_num: 12
211 | min_certificated_credit_num: 0
212 | leaf:
213 | regexp_number: ^9.*$
214 | regexp_name: ''
215 |
--------------------------------------------------------------------------------
/data/reqYml/cisIR20.yml:
--------------------------------------------------------------------------------
1 | 国際総合学類国際関係学主専攻20年度入学:
2 | max_certificated_credit_num: 126
3 | min_certificated_credit_num: 126
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 117
7 | min_certificated_credit_num: 62
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 117
11 | min_certificated_credit_num: 62
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 6
15 | min_certificated_credit_num: 6
16 | leaf:
17 | 卒業論文:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^FB14908$
22 | regexp_name: ''
23 | 選択:
24 | max_certificated_credit_num: 75
25 | min_certificated_credit_num: 38
26 | leaf:
27 | BC11/16~:
28 | max_certificated_credit_num: 62
29 | min_certificated_credit_num: 14
30 | leaf:
31 | regexp_number: ^B(C1[126]|E22).*$
32 | regexp_name: ''
33 | BC12,BE22~:
34 | max_certificated_credit_num: 62
35 | min_certificated_credit_num: 0
36 | leaf:
37 | regexp_number: ^B(C1[126]|E22).*$
38 | regexp_name: ''
39 | BC13~:
40 | max_certificated_credit_num: 9
41 | min_certificated_credit_num: 6
42 | leaf:
43 | regexp_number: ^BC13.*$
44 | regexp_name: ''
45 | BC15~:
46 | max_certificated_credit_num: 4
47 | min_certificated_credit_num: 0
48 | leaf:
49 | regexp_number: ^BC15.*$
50 | regexp_name: ''
51 | 専門基礎:
52 | max_certificated_credit_num: 36
53 | min_certificated_credit_num: 18
54 | leaf:
55 | ? ''
56 | : max_certificated_credit_num: 36
57 | min_certificated_credit_num: 18
58 | leaf:
59 | 必修:
60 | max_certificated_credit_num: 4
61 | min_certificated_credit_num: 4
62 | leaf:
63 | 国際学I:
64 | max_certificated_credit_num: 1
65 | min_certificated_credit_num: 1
66 | leaf:
67 | regexp_number: ^BC50111$
68 | regexp_name: ''
69 | 国際学II:
70 | max_certificated_credit_num: 1
71 | min_certificated_credit_num: 1
72 | leaf:
73 | regexp_number: ^BC50121$
74 | regexp_name: ''
75 | 国際学III:
76 | max_certificated_credit_num: 1
77 | min_certificated_credit_num: 1
78 | leaf:
79 | regexp_number: ^BC50131$
80 | regexp_name: ''
81 | 国際学IV:
82 | max_certificated_credit_num: 1
83 | min_certificated_credit_num: 1
84 | leaf:
85 | regexp_number: ^BC50141$
86 | regexp_name: ''
87 | 選択:
88 | max_certificated_credit_num: 32
89 | min_certificated_credit_num: 14
90 | leaf:
91 | BC51(EDS,ED以外):
92 | max_certificated_credit_num: 14
93 | min_certificated_credit_num: 10
94 | leaf:
95 | regexp_number: ^(?!BC51(3[1-3]|5[78])4)BC51.*$
96 | regexp_name: ''
97 | EDS,ED:
98 | max_certificated_credit_num: 4
99 | min_certificated_credit_num: 4
100 | leaf:
101 | regexp_number: ^BC51(3[1-3]|5[78])4$
102 | regexp_name: ''
103 | BB050,FH611...:
104 | max_certificated_credit_num: 14
105 | min_certificated_credit_num: 0
106 | leaf:
107 | regexp_number: ^(BB050|FH611|FG10641|GA12|BE21).*$
108 | regexp_name: ''
109 | 基礎:
110 | max_certificated_credit_num: 66
111 | min_certificated_credit_num: 23
112 | leaf:
113 | 共通:
114 | max_certificated_credit_num: 31
115 | min_certificated_credit_num: 17
116 | leaf:
117 | 必修:
118 | max_certificated_credit_num: 16
119 | min_certificated_credit_num: 16
120 | leaf:
121 | 総合科目:
122 | max_certificated_credit_num: 2
123 | min_certificated_credit_num: 2
124 | leaf:
125 | regexp_number: ''
126 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
127 | 情報:
128 | max_certificated_credit_num: 4
129 | min_certificated_credit_num: 4
130 | leaf:
131 | regexp_number: ^6.*$
132 | regexp_name: ''
133 | 体育:
134 | max_certificated_credit_num: 2
135 | min_certificated_credit_num: 2
136 | leaf:
137 | regexp_number: ^2[12].*$
138 | regexp_name: ''
139 | 第1・2外国語:
140 | max_certificated_credit_num: 8
141 | min_certificated_credit_num: 8
142 | leaf:
143 | regexp_number: ^3.*$
144 | regexp_name: ''
145 | 選択:
146 | max_certificated_credit_num: 15
147 | min_certificated_credit_num: 1
148 | leaf:
149 | 総合科目(学士基盤科目):
150 | max_certificated_credit_num: 3
151 | min_certificated_credit_num: 1
152 | leaf:
153 | regexp_number: ^1.*$
154 | regexp_name: ''
155 | 体育:
156 | max_certificated_credit_num: 2
157 | min_certificated_credit_num: 0
158 | leaf:
159 | regexp_number: ^2.*$
160 | regexp_name: ''
161 | 外国語:
162 | max_certificated_credit_num: 6
163 | min_certificated_credit_num: 0
164 | leaf:
165 | regexp_number: ^3.*$
166 | regexp_name: ''
167 | 国語:
168 | max_certificated_credit_num: 2
169 | min_certificated_credit_num: 0
170 | leaf:
171 | regexp_number: ^5.*$
172 | regexp_name: ''
173 | 芸術:
174 | max_certificated_credit_num: 2
175 | min_certificated_credit_num: 0
176 | leaf:
177 | regexp_number: ^4.*$
178 | regexp_name: ''
179 | 関連:
180 | max_certificated_credit_num: 16
181 | min_certificated_credit_num: 6
182 | leaf:
183 | 必修:
184 | max_certificated_credit_num: 0
185 | min_certificated_credit_num: 0
186 | leaf: {}
187 | 選択:
188 | max_certificated_credit_num: 16
189 | min_certificated_credit_num: 6
190 | leaf:
191 | 社会・国際、特設自由科目並びに博物館:
192 | max_certificated_credit_num: 5
193 | min_certificated_credit_num: 0
194 | leaf:
195 | regexp_number: ^(BA|99|8).*$
196 | regexp_name: ''
197 | A/BB/C~:
198 | max_certificated_credit_num: 8
199 | min_certificated_credit_num: 3
200 | leaf:
201 | regexp_number: ^(A|BB|C).*$
202 | regexp_name: ''
203 | E/F/G/H/W/Y~:
204 | max_certificated_credit_num: 10
205 | min_certificated_credit_num: 3
206 | leaf:
207 | regexp_number: ^[EFGHWY].*$
208 | regexp_name: ''
209 | 教職に関する科目:
210 | max_certificated_credit_num: 12
211 | min_certificated_credit_num: 0
212 | leaf:
213 | regexp_number: ^9.*$
214 | regexp_name: ''
215 |
--------------------------------------------------------------------------------
/data/reqYml/coins19.yml:
--------------------------------------------------------------------------------
1 | 情報科学類19年度入学:
2 | max_certificated_credit_num: 125
3 | min_certificated_credit_num: 125
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 52
7 | min_certificated_credit_num: 52
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 52
11 | min_certificated_credit_num: 52
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 16
15 | min_certificated_credit_num: 16
16 | leaf:
17 | 主専攻実験A/B:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^GB[234]6[45]03$
22 | regexp_name: ''
23 | 卒業研究A/B:
24 | max_certificated_credit_num: 6
25 | min_certificated_credit_num: 6
26 | leaf:
27 | regexp_number: ^GB199[4589]8$
28 | regexp_name: ''
29 | 専門語学A/B:
30 | max_certificated_credit_num: 4
31 | min_certificated_credit_num: 4
32 | leaf:
33 | regexp_number: ^GB190[4578]1$
34 | regexp_name: ''
35 | 選択:
36 | max_certificated_credit_num: 36
37 | min_certificated_credit_num: 36
38 | leaf:
39 | GBx0~:
40 | max_certificated_credit_num: 10000
41 | min_certificated_credit_num: 18
42 | leaf:
43 | regexp_number: ^GB[234]0.*$
44 | regexp_name: ''
45 | GB234/ジョットク:
46 | max_certificated_credit_num: 18
47 | min_certificated_credit_num: 0
48 | leaf:
49 | regexp_number: ^GB[234][^0].*$
50 | regexp_name: ^情報.*特別.*演習
51 | 専門基礎:
52 | max_certificated_credit_num: 49
53 | min_certificated_credit_num: 49
54 | leaf:
55 | ? ''
56 | : max_certificated_credit_num: 49
57 | min_certificated_credit_num: 49
58 | leaf:
59 | 必修:
60 | max_certificated_credit_num: 25
61 | min_certificated_credit_num: 25
62 | leaf:
63 | 線形代数A:
64 | max_certificated_credit_num: 2
65 | min_certificated_credit_num: 2
66 | leaf:
67 | regexp_number: ''
68 | regexp_name: ^線形代数A$
69 | 線形代数B:
70 | max_certificated_credit_num: 2
71 | min_certificated_credit_num: 2
72 | leaf:
73 | regexp_number: ''
74 | regexp_name: ^線形代数B$
75 | 微分積分A:
76 | max_certificated_credit_num: 2
77 | min_certificated_credit_num: 2
78 | leaf:
79 | regexp_number: ''
80 | regexp_name: ^微分積分A$
81 | 微分積分B:
82 | max_certificated_credit_num: 2
83 | min_certificated_credit_num: 2
84 | leaf:
85 | regexp_number: ''
86 | regexp_name: ^微分積分B$
87 | 情報数学A:
88 | max_certificated_credit_num: 2
89 | min_certificated_credit_num: 2
90 | leaf:
91 | regexp_number: ''
92 | regexp_name: ^情報数学A$
93 | 専門英語基礎:
94 | max_certificated_credit_num: 1
95 | min_certificated_credit_num: 1
96 | leaf:
97 | regexp_number: ''
98 | regexp_name: ^専門英語基礎$
99 | プロ入:
100 | max_certificated_credit_num: 3
101 | min_certificated_credit_num: 3
102 | leaf:
103 | regexp_number: ''
104 | regexp_name: ^プログラミング入門$
105 | コンプロ:
106 | max_certificated_credit_num: 3
107 | min_certificated_credit_num: 3
108 | leaf:
109 | regexp_number: ''
110 | regexp_name: ^(コンピュータとプログラミング|システムプログラミング序論)$
111 | DSA:
112 | max_certificated_credit_num: 3
113 | min_certificated_credit_num: 3
114 | leaf:
115 | regexp_number: ''
116 | regexp_name: ^データ構造とアルゴリズム$
117 | DSAL:
118 | max_certificated_credit_num: 1.5
119 | min_certificated_credit_num: 1.5
120 | leaf:
121 | regexp_number: ''
122 | regexp_name: ^データ構造とアルゴリズム実験$
123 | 論理回路:
124 | max_certificated_credit_num: 2
125 | min_certificated_credit_num: 2
126 | leaf:
127 | regexp_number: ''
128 | regexp_name: ^論理回路$
129 | 論理回路演習:
130 | max_certificated_credit_num: 1.5
131 | min_certificated_credit_num: 1.5
132 | leaf:
133 | regexp_number: ''
134 | regexp_name: ^(論理回路演習|論理回路実験)$
135 | 選択:
136 | max_certificated_credit_num: 24
137 | min_certificated_credit_num: 24
138 | leaf:
139 | 実質必修のやつ:
140 | max_certificated_credit_num: 10000
141 | min_certificated_credit_num: 10
142 | leaf:
143 | regexp_number: ''
144 | regexp_name: ^(確率論|統計学|数値計算法|論理と形式化|電磁気学|論理システム|論理システム演習)$
145 | CS in English:
146 | max_certificated_credit_num: 10000
147 | min_certificated_credit_num: 2
148 | leaf:
149 | regexp_number: ''
150 | regexp_name: ^Computer.*Science.*in.*English.*[AB]$
151 | GB1~:
152 | max_certificated_credit_num: 10000
153 | min_certificated_credit_num: 0
154 | leaf:
155 | regexp_number: ^GB1.*$
156 | regexp_name: ''
157 | GA1~:
158 | max_certificated_credit_num: 10000
159 | min_certificated_credit_num: 8
160 | leaf:
161 | regexp_number: ^GA1.*$
162 | regexp_name: ''
163 | 基礎:
164 | max_certificated_credit_num: 24
165 | min_certificated_credit_num: 24
166 | leaf:
167 | 共通:
168 | max_certificated_credit_num: 18
169 | min_certificated_credit_num: 14
170 | leaf:
171 | 必修:
172 | max_certificated_credit_num: 13
173 | min_certificated_credit_num: 13
174 | leaf:
175 | 総合科目:
176 | max_certificated_credit_num: 2
177 | min_certificated_credit_num: 2
178 | leaf:
179 | regexp_number: ''
180 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
181 | 体育:
182 | max_certificated_credit_num: 3
183 | min_certificated_credit_num: 3
184 | leaf:
185 | regexp_number: ^2[123].*$
186 | regexp_name: ''
187 | 外国語(英語):
188 | max_certificated_credit_num: 4
189 | min_certificated_credit_num: 4
190 | leaf:
191 | regexp_number: ^31.*$
192 | regexp_name: (^English Presentation Skills I+$)
193 | 情報:
194 | max_certificated_credit_num: 4
195 | min_certificated_credit_num: 4
196 | leaf:
197 | regexp_number: ^6.*$
198 | regexp_name: ''
199 | 選択:
200 | max_certificated_credit_num: 5
201 | min_certificated_credit_num: 1
202 | leaf:
203 | 総合科目(学士基盤科目):
204 | max_certificated_credit_num: 10000
205 | min_certificated_credit_num: 1
206 | leaf:
207 | regexp_number: ^1.*$
208 | regexp_name: ''
209 | 体育/外国語/国語/芸術:
210 | max_certificated_credit_num: 10000
211 | min_certificated_credit_num: 0
212 | leaf:
213 | regexp_number: ^[2345].*$
214 | regexp_name: ''
215 | 関連:
216 | max_certificated_credit_num: 10
217 | min_certificated_credit_num: 6
218 | leaf:
219 | 必修:
220 | max_certificated_credit_num: 0
221 | min_certificated_credit_num: 0
222 | leaf: {}
223 | 選択:
224 | max_certificated_credit_num: 10
225 | min_certificated_credit_num: 6
226 | leaf:
227 | E,F,G,H,GC,GE,H以外始まり:
228 | max_certificated_credit_num: 10000
229 | min_certificated_credit_num: 6
230 | leaf:
231 | regexp_number: ^[^EFGH1-9].*$
232 | regexp_name: ''
233 | E,F,G,H,GC,GE,H始まり:
234 | max_certificated_credit_num: 4
235 | min_certificated_credit_num: 0
236 | leaf:
237 | regexp_number: ^([EFH]|GC|GE).*$
238 | regexp_name: ''
239 |
--------------------------------------------------------------------------------
/data/reqYml/coins20.yml:
--------------------------------------------------------------------------------
1 | 情報科学類20年度入学:
2 | max_certificated_credit_num: 125
3 | min_certificated_credit_num: 125
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 52
7 | min_certificated_credit_num: 52
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 52
11 | min_certificated_credit_num: 52
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 16
15 | min_certificated_credit_num: 16
16 | leaf:
17 | 主専攻実験A/B:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^GB[234]6[45]03$
22 | regexp_name: ''
23 | 卒業研究A/B:
24 | max_certificated_credit_num: 6
25 | min_certificated_credit_num: 6
26 | leaf:
27 | regexp_number: ^GB199[4589]8$
28 | regexp_name: ''
29 | 専門語学A/B:
30 | max_certificated_credit_num: 4
31 | min_certificated_credit_num: 4
32 | leaf:
33 | regexp_number: ^GB190[4578]1$
34 | regexp_name: ''
35 | 選択:
36 | max_certificated_credit_num: 36
37 | min_certificated_credit_num: 36
38 | leaf:
39 | GBx0~:
40 | max_certificated_credit_num: 10000
41 | min_certificated_credit_num: 18
42 | leaf:
43 | regexp_number: ^(GB[234]0.*|GB21601|GB21111|GB21802|GB31301|GB31501)$
44 | regexp_name: ''
45 | GB234/ジョットク:
46 | max_certificated_credit_num: 18
47 | min_certificated_credit_num: 0
48 | leaf:
49 | regexp_number: ^GB[234][^0].*$
50 | regexp_name: ^情報.*特別.*演習
51 | 専門基礎:
52 | max_certificated_credit_num: 50
53 | min_certificated_credit_num: 50
54 | leaf:
55 | ? ''
56 | : max_certificated_credit_num: 50
57 | min_certificated_credit_num: 50
58 | leaf:
59 | 必修:
60 | max_certificated_credit_num: 26
61 | min_certificated_credit_num: 26
62 | leaf:
63 | 線形代数A:
64 | max_certificated_credit_num: 2
65 | min_certificated_credit_num: 2
66 | leaf:
67 | regexp_number: ''
68 | regexp_name: ^線形代数A$
69 | 線形代数B:
70 | max_certificated_credit_num: 2
71 | min_certificated_credit_num: 2
72 | leaf:
73 | regexp_number: ''
74 | regexp_name: ^線形代数B$
75 | 微分積分A:
76 | max_certificated_credit_num: 2
77 | min_certificated_credit_num: 2
78 | leaf:
79 | regexp_number: ''
80 | regexp_name: ^微分積分A$
81 | 微分積分B:
82 | max_certificated_credit_num: 2
83 | min_certificated_credit_num: 2
84 | leaf:
85 | regexp_number: ''
86 | regexp_name: ^微分積分B$
87 | 情報数学A:
88 | max_certificated_credit_num: 2
89 | min_certificated_credit_num: 2
90 | leaf:
91 | regexp_number: ''
92 | regexp_name: ^情報数学A$
93 | 専門英語基礎:
94 | max_certificated_credit_num: 1
95 | min_certificated_credit_num: 1
96 | leaf:
97 | regexp_number: ''
98 | regexp_name: ^専門英語基礎$
99 | プロ入:
100 | max_certificated_credit_num: 3
101 | min_certificated_credit_num: 3
102 | leaf:
103 | regexp_number: ''
104 | regexp_name: ^プログラミング入門$
105 | コンプロ:
106 | max_certificated_credit_num: 3
107 | min_certificated_credit_num: 3
108 | leaf:
109 | regexp_number: ''
110 | regexp_name: ^コンピュータとプログラミング$
111 | DSA:
112 | max_certificated_credit_num: 3
113 | min_certificated_credit_num: 3
114 | leaf:
115 | regexp_number: ''
116 | regexp_name: ^データ構造とアルゴリズム$
117 | DSAL:
118 | max_certificated_credit_num: 2
119 | min_certificated_credit_num: 2
120 | leaf:
121 | regexp_number: ''
122 | regexp_name: ^データ構造とアルゴリズム実験$
123 | 論理回路:
124 | max_certificated_credit_num: 2
125 | min_certificated_credit_num: 2
126 | leaf:
127 | regexp_number: ''
128 | regexp_name: ^論理回路$
129 | 論理回路演習:
130 | max_certificated_credit_num: 2
131 | min_certificated_credit_num: 2
132 | leaf:
133 | regexp_number: ''
134 | regexp_name: ^(論理回路演習|論理回路実験)$
135 | 選択:
136 | max_certificated_credit_num: 24
137 | min_certificated_credit_num: 24
138 | leaf:
139 | 実質必修のやつ:
140 | max_certificated_credit_num: 10000
141 | min_certificated_credit_num: 10
142 | leaf:
143 | regexp_number: ''
144 | regexp_name: ^(確率論|統計学|統計学(3年生向け)|数値計算法|論理と形式化|電磁気学|論理システム|論理システム演習)$
145 | CS in English:
146 | max_certificated_credit_num: 10000
147 | min_certificated_credit_num: 2
148 | leaf:
149 | regexp_number: ''
150 | regexp_name: ^Computer.*Science.*in.*English.*[AB]$
151 | GB1~:
152 | max_certificated_credit_num: 10000
153 | min_certificated_credit_num: 0
154 | leaf:
155 | regexp_number: ^GB1.*$
156 | regexp_name: ''
157 | GA1~:
158 | max_certificated_credit_num: 10000
159 | min_certificated_credit_num: 8
160 | leaf:
161 | regexp_number: ^GA1.*$
162 | regexp_name: ''
163 | 基礎:
164 | max_certificated_credit_num: 23
165 | min_certificated_credit_num: 23
166 | leaf:
167 | 共通:
168 | max_certificated_credit_num: 17
169 | min_certificated_credit_num: 13
170 | leaf:
171 | 必修:
172 | max_certificated_credit_num: 12
173 | min_certificated_credit_num: 12
174 | leaf:
175 | 総合科目:
176 | max_certificated_credit_num: 2
177 | min_certificated_credit_num: 2
178 | leaf:
179 | regexp_number: ''
180 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
181 | 体育:
182 | max_certificated_credit_num: 2
183 | min_certificated_credit_num: 2
184 | leaf:
185 | regexp_number: ^2[12].*$
186 | regexp_name: ''
187 | 外国語(英語):
188 | max_certificated_credit_num: 4
189 | min_certificated_credit_num: 4
190 | leaf:
191 | regexp_number: ^31.*$
192 | regexp_name: (^English Presentation Skills I+$)
193 | 情報:
194 | max_certificated_credit_num: 4
195 | min_certificated_credit_num: 4
196 | leaf:
197 | regexp_number: ^6.*$
198 | regexp_name: ''
199 | 選択:
200 | max_certificated_credit_num: 5
201 | min_certificated_credit_num: 1
202 | leaf:
203 | 総合科目(学士基盤科目):
204 | max_certificated_credit_num: 10000
205 | min_certificated_credit_num: 1
206 | leaf:
207 | regexp_number: ^1.*$
208 | regexp_name: ''
209 | 体育/外国語/国語/芸術:
210 | max_certificated_credit_num: 10000
211 | min_certificated_credit_num: 0
212 | leaf:
213 | regexp_number: ^[2345].*$
214 | regexp_name: ''
215 | 関連:
216 | max_certificated_credit_num: 10
217 | min_certificated_credit_num: 6
218 | leaf:
219 | 必修:
220 | max_certificated_credit_num: 0
221 | min_certificated_credit_num: 0
222 | leaf: {}
223 | 選択:
224 | max_certificated_credit_num: 10
225 | min_certificated_credit_num: 6
226 | leaf:
227 | E,F,G,H,GC,GE,H以外始まり:
228 | max_certificated_credit_num: 10000
229 | min_certificated_credit_num: 6
230 | leaf:
231 | regexp_number: ^[^EFGH1-9].*$
232 | regexp_name: ''
233 | E,F,G,H,GC,GE,H始まり:
234 | max_certificated_credit_num: 4
235 | min_certificated_credit_num: 0
236 | leaf:
237 | regexp_number: ^([EFH]|GC|GE).*$
238 | regexp_name: ''
239 |
--------------------------------------------------------------------------------
/data/reqYml/coins21.yml:
--------------------------------------------------------------------------------
1 | 情報科学類21年度入学:
2 | max_certificated_credit_num: 125
3 | min_certificated_credit_num: 125
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 52
7 | min_certificated_credit_num: 52
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 52
11 | min_certificated_credit_num: 52
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 16
15 | min_certificated_credit_num: 16
16 | leaf:
17 | 主専攻実験A/B:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^GB[234]6[45]03$
22 | regexp_name: ''
23 | 卒業研究A/B:
24 | max_certificated_credit_num: 6
25 | min_certificated_credit_num: 6
26 | leaf:
27 | regexp_number: ^GB199[4589]8$
28 | regexp_name: ''
29 | 専門語学A/B:
30 | max_certificated_credit_num: 4
31 | min_certificated_credit_num: 4
32 | leaf:
33 | regexp_number: ^GB190[4578]1$
34 | regexp_name: ''
35 | 選択:
36 | max_certificated_credit_num: 36
37 | min_certificated_credit_num: 36
38 | leaf:
39 | GBx0~:
40 | max_certificated_credit_num: 10000
41 | min_certificated_credit_num: 18
42 | leaf:
43 | regexp_number: ^GB[234]0.*$
44 | regexp_name: ''
45 | GB234/ジョットク:
46 | max_certificated_credit_num: 18
47 | min_certificated_credit_num: 0
48 | leaf:
49 | regexp_number: ^GB[234][^0].*$
50 | regexp_name: ^情報.*特別.*演習
51 | 専門基礎:
52 | max_certificated_credit_num: 50
53 | min_certificated_credit_num: 50
54 | leaf:
55 | ? ''
56 | : max_certificated_credit_num: 50
57 | min_certificated_credit_num: 50
58 | leaf:
59 | 必修:
60 | max_certificated_credit_num: 26
61 | min_certificated_credit_num: 26
62 | leaf:
63 | 線形代数A:
64 | max_certificated_credit_num: 2
65 | min_certificated_credit_num: 2
66 | leaf:
67 | regexp_number: ''
68 | regexp_name: ^線形代数A$
69 | 線形代数B:
70 | max_certificated_credit_num: 2
71 | min_certificated_credit_num: 2
72 | leaf:
73 | regexp_number: ''
74 | regexp_name: ^線形代数B$
75 | 微分積分A:
76 | max_certificated_credit_num: 2
77 | min_certificated_credit_num: 2
78 | leaf:
79 | regexp_number: ''
80 | regexp_name: ^微分積分A$
81 | 微分積分B:
82 | max_certificated_credit_num: 2
83 | min_certificated_credit_num: 2
84 | leaf:
85 | regexp_number: ''
86 | regexp_name: ^微分積分B$
87 | 情報数学A:
88 | max_certificated_credit_num: 2
89 | min_certificated_credit_num: 2
90 | leaf:
91 | regexp_number: ''
92 | regexp_name: ^情報数学A$
93 | 専門英語基礎:
94 | max_certificated_credit_num: 1
95 | min_certificated_credit_num: 1
96 | leaf:
97 | regexp_number: ''
98 | regexp_name: ^専門英語基礎$
99 | プロ入:
100 | max_certificated_credit_num: 3
101 | min_certificated_credit_num: 3
102 | leaf:
103 | regexp_number: ''
104 | regexp_name: ^プログラミング入門[AB]$
105 | コンプロ:
106 | max_certificated_credit_num: 3
107 | min_certificated_credit_num: 3
108 | leaf:
109 | regexp_number: ''
110 | regexp_name: ^コンピュータとプログラミング$
111 | DSA:
112 | max_certificated_credit_num: 3
113 | min_certificated_credit_num: 3
114 | leaf:
115 | regexp_number: ''
116 | regexp_name: ^データ構造とアルゴリズム$
117 | DSAL:
118 | max_certificated_credit_num: 2
119 | min_certificated_credit_num: 2
120 | leaf:
121 | regexp_number: ''
122 | regexp_name: ^データ構造とアルゴリズム実験$
123 | 論理回路:
124 | max_certificated_credit_num: 2
125 | min_certificated_credit_num: 2
126 | leaf:
127 | regexp_number: ''
128 | regexp_name: ^論理回路$
129 | 論理回路演習:
130 | max_certificated_credit_num: 2
131 | min_certificated_credit_num: 2
132 | leaf:
133 | regexp_number: ''
134 | regexp_name: ^(論理回路演習|論理回路実験)$
135 | 選択:
136 | max_certificated_credit_num: 24
137 | min_certificated_credit_num: 24
138 | leaf:
139 | 実質必修のやつ:
140 | max_certificated_credit_num: 10000
141 | min_certificated_credit_num: 10
142 | leaf:
143 | regexp_number: ''
144 | regexp_name: ^(確率論|統計学|数値計算法|論理と形式化|電磁気学|論理システム|論理システム演習)$
145 | CS in English:
146 | max_certificated_credit_num: 10000
147 | min_certificated_credit_num: 2
148 | leaf:
149 | regexp_number: ''
150 | regexp_name: ^Computer.*Science.*in.*English.*[AB]$
151 | GB1~:
152 | max_certificated_credit_num: 10000
153 | min_certificated_credit_num: 0
154 | leaf:
155 | regexp_number: ^GB1.*$
156 | regexp_name: ''
157 | GA1~:
158 | max_certificated_credit_num: 10000
159 | min_certificated_credit_num: 8
160 | leaf:
161 | regexp_number: ^GA1.*$
162 | regexp_name: ''
163 | 基礎:
164 | max_certificated_credit_num: 23
165 | min_certificated_credit_num: 23
166 | leaf:
167 | 共通:
168 | max_certificated_credit_num: 17
169 | min_certificated_credit_num: 13
170 | leaf:
171 | 必修:
172 | max_certificated_credit_num: 12
173 | min_certificated_credit_num: 12
174 | leaf:
175 | 総合科目:
176 | max_certificated_credit_num: 2
177 | min_certificated_credit_num: 2
178 | leaf:
179 | regexp_number: ''
180 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
181 | 体育:
182 | max_certificated_credit_num: 2
183 | min_certificated_credit_num: 2
184 | leaf:
185 | regexp_number: ^2[12].*$
186 | regexp_name: ''
187 | 外国語(英語):
188 | max_certificated_credit_num: 4
189 | min_certificated_credit_num: 4
190 | leaf:
191 | regexp_number: ^31.*$
192 | regexp_name: (^English Presentation Skills I+$)
193 | 情報:
194 | max_certificated_credit_num: 4
195 | min_certificated_credit_num: 4
196 | leaf:
197 | regexp_number: ^6.*$
198 | regexp_name: ''
199 | 選択:
200 | max_certificated_credit_num: 5
201 | min_certificated_credit_num: 1
202 | leaf:
203 | 総合科目(学士基盤科目):
204 | max_certificated_credit_num: 10000
205 | min_certificated_credit_num: 1
206 | leaf:
207 | regexp_number: ^1.*$
208 | regexp_name: ''
209 | 体育/外国語/国語/芸術:
210 | max_certificated_credit_num: 10000
211 | min_certificated_credit_num: 0
212 | leaf:
213 | regexp_number: ^[2345].*$
214 | regexp_name: ''
215 | 関連:
216 | max_certificated_credit_num: 10
217 | min_certificated_credit_num: 6
218 | leaf:
219 | 必修:
220 | max_certificated_credit_num: 0
221 | min_certificated_credit_num: 0
222 | leaf: {}
223 | 選択:
224 | max_certificated_credit_num: 10
225 | min_certificated_credit_num: 6
226 | leaf:
227 | E,F,G,H,GC,GE,H以外始まり:
228 | max_certificated_credit_num: 10000
229 | min_certificated_credit_num: 6
230 | leaf:
231 | regexp_number: ^[^EFGH1-9].*$
232 | regexp_name: ''
233 | E,F,G,H,GC,GE,H始まり:
234 | max_certificated_credit_num: 4
235 | min_certificated_credit_num: 0
236 | leaf:
237 | regexp_number: ^([EFH]|GC|GE).*$
238 | regexp_name: ''
239 |
--------------------------------------------------------------------------------
/data/reqYml/mast20.yml:
--------------------------------------------------------------------------------
1 | 情報メディア創成学類20年度入学:
2 | max_certificated_credit_num: 125
3 | min_certificated_credit_num: 125
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 49
7 | min_certificated_credit_num: 34
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 49
11 | min_certificated_credit_num: 34
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 14
15 | min_certificated_credit_num: 14
16 | leaf:
17 | 主専攻実験A/B:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^GC41[12]03$
22 | regexp_name: ''
23 | 卒業研究A/B:
24 | max_certificated_credit_num: 6
25 | min_certificated_credit_num: 6
26 | leaf:
27 | regexp_number: ^GC48[6789]08$
28 | regexp_name: ''
29 | 専門英語A/B:
30 | max_certificated_credit_num: 2
31 | min_certificated_credit_num: 2
32 | leaf:
33 | regexp_number: ^GC42[12]02$
34 | regexp_name: ''
35 | 選択:
36 | max_certificated_credit_num: 35
37 | min_certificated_credit_num: 20
38 | leaf:
39 | GC5/GA4~:
40 | max_certificated_credit_num: 35
41 | min_certificated_credit_num: 20
42 | leaf:
43 | regexp_number: ^(GC5|GA4).*$
44 | regexp_name: ''
45 | 専門基礎:
46 | max_certificated_credit_num: 71
47 | min_certificated_credit_num: 56
48 | leaf:
49 | ? ''
50 | : max_certificated_credit_num: 71
51 | min_certificated_credit_num: 56
52 | leaf:
53 | 必修:
54 | max_certificated_credit_num: 24
55 | min_certificated_credit_num: 24
56 | leaf:
57 | 微分積分A:
58 | max_certificated_credit_num: 2
59 | min_certificated_credit_num: 2
60 | leaf:
61 | regexp_number: ''
62 | regexp_name: ^微分積分A$
63 | 微分積分B:
64 | max_certificated_credit_num: 2
65 | min_certificated_credit_num: 2
66 | leaf:
67 | regexp_number: ''
68 | regexp_name: ^微分積分B$
69 | 線形代数A:
70 | max_certificated_credit_num: 2
71 | min_certificated_credit_num: 2
72 | leaf:
73 | regexp_number: ''
74 | regexp_name: ^線形代数A$
75 | 線形代数B:
76 | max_certificated_credit_num: 2
77 | min_certificated_credit_num: 2
78 | leaf:
79 | regexp_number: ''
80 | regexp_name: ^線形代数B$
81 | 情報数学A:
82 | max_certificated_credit_num: 2
83 | min_certificated_credit_num: 2
84 | leaf:
85 | regexp_number: ''
86 | regexp_name: ^情報数学A$
87 | 確率と統計:
88 | max_certificated_credit_num: 2
89 | min_certificated_credit_num: 2
90 | leaf:
91 | regexp_number: ''
92 | regexp_name: ^確率と統計$
93 | プロ入:
94 | max_certificated_credit_num: 3
95 | min_certificated_credit_num: 3
96 | leaf:
97 | regexp_number: ''
98 | regexp_name: ^プログラミング入門$
99 | プログラミング:
100 | max_certificated_credit_num: 2
101 | min_certificated_credit_num: 2
102 | leaf:
103 | regexp_number: ''
104 | regexp_name: ^プログラミング$
105 | コンピュータシステムとOS:
106 | max_certificated_credit_num: 2
107 | min_certificated_credit_num: 2
108 | leaf:
109 | regexp_number: ''
110 | regexp_name: ^コンピュータシステムとOS$
111 | DSA:
112 | max_certificated_credit_num: 2
113 | min_certificated_credit_num: 2
114 | leaf:
115 | regexp_number: ''
116 | regexp_name: ^データ構造とアルゴリズム$
117 | DSAT:
118 | max_certificated_credit_num: 1
119 | min_certificated_credit_num: 1
120 | leaf:
121 | regexp_number: ''
122 | regexp_name: ^データ構造とアルゴリズム実習$
123 | データ工学概論:
124 | max_certificated_credit_num: 2
125 | min_certificated_credit_num: 2
126 | leaf:
127 | regexp_number: ''
128 | regexp_name: ^データ工学概論$
129 | 選択:
130 | max_certificated_credit_num: 47
131 | min_certificated_credit_num: 32
132 | leaf:
133 | GC2/GA1~:
134 | max_certificated_credit_num: 47
135 | min_certificated_credit_num: 32
136 | leaf:
137 | regexp_number: ^(GC2|GA1).*$
138 | regexp_name: ''
139 | 基礎:
140 | max_certificated_credit_num: 37
141 | min_certificated_credit_num: 19
142 | leaf:
143 | 共通:
144 | max_certificated_credit_num: 22
145 | min_certificated_credit_num: 13
146 | leaf:
147 | 必修:
148 | max_certificated_credit_num: 12
149 | min_certificated_credit_num: 12
150 | leaf:
151 | 総合科目:
152 | max_certificated_credit_num: 2
153 | min_certificated_credit_num: 2
154 | leaf:
155 | regexp_number: ''
156 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
157 | 情報:
158 | max_certificated_credit_num: 4
159 | min_certificated_credit_num: 4
160 | leaf:
161 | regexp_number: ^6.*$
162 | regexp_name: ''
163 | 体育:
164 | max_certificated_credit_num: 2
165 | min_certificated_credit_num: 2
166 | leaf:
167 | regexp_number: ^2[12].*$
168 | regexp_name: ''
169 | 外国語(英語):
170 | max_certificated_credit_num: 4
171 | min_certificated_credit_num: 4
172 | leaf:
173 | regexp_number: ^31.*$
174 | regexp_name: (^English Presentation Skills I+$)
175 | 選択:
176 | max_certificated_credit_num: 10
177 | min_certificated_credit_num: 1
178 | leaf:
179 | 総合科目(学士基盤科目):
180 | max_certificated_credit_num: 4
181 | min_certificated_credit_num: 1
182 | leaf:
183 | regexp_number: ^1.*$
184 | regexp_name: ''
185 | 体育:
186 | max_certificated_credit_num: 2
187 | min_certificated_credit_num: 0
188 | leaf:
189 | regexp_number: ^2.*$
190 | regexp_name: ''
191 | 外国語:
192 | max_certificated_credit_num: 6
193 | min_certificated_credit_num: 0
194 | leaf:
195 | regexp_number: ^3.*$
196 | regexp_name: ''
197 | 国語:
198 | max_certificated_credit_num: 2
199 | min_certificated_credit_num: 0
200 | leaf:
201 | regexp_number: ^5.*$
202 | regexp_name: ''
203 | 芸術:
204 | max_certificated_credit_num: 6
205 | min_certificated_credit_num: 0
206 | leaf:
207 | regexp_number: ^4.*$
208 | regexp_name: ''
209 | 関連:
210 | max_certificated_credit_num: 15
211 | min_certificated_credit_num: 6
212 | leaf:
213 | 必修:
214 | max_certificated_credit_num: 0
215 | min_certificated_credit_num: 0
216 | leaf: {}
217 | 選択:
218 | max_certificated_credit_num: 15
219 | min_certificated_credit_num: 6
220 | leaf:
221 | E,F,G,H,GC,GE,H以外始まり:
222 | max_certificated_credit_num: 10000
223 | min_certificated_credit_num: 6
224 | leaf:
225 | regexp_number: ^[^1-9G].*$
226 | regexp_name: ''
227 | GB,GE:
228 | max_certificated_credit_num: 10000
229 | min_certificated_credit_num: 6
230 | leaf:
231 | regexp_number: ^(GB|GE).*$
232 | regexp_name: ''
233 | 博物館/自由科目(特設):
234 | max_certificated_credit_num: 4
235 | min_certificated_credit_num: 0
236 | leaf:
237 | regexp_number: ^99.*$
238 | regexp_name: ''
239 |
--------------------------------------------------------------------------------
/data/reqYml/math20.yml:
--------------------------------------------------------------------------------
1 | 数学類20年度入学:
2 | max_certificated_credit_num: 124
3 | min_certificated_credit_num: 124
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 84
7 | min_certificated_credit_num: 60
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 84
11 | min_certificated_credit_num: 60
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 14
15 | min_certificated_credit_num: 14
16 | leaf:
17 | 卒業研究:
18 | max_certificated_credit_num: 6
19 | min_certificated_credit_num: 6
20 | leaf:
21 | regexp_number: ^FB14908$
22 | regexp_name: ''
23 | 卒業予備研究:
24 | max_certificated_credit_num: 3
25 | min_certificated_credit_num: 3
26 | leaf:
27 | regexp_number: ^FB13901$
28 | regexp_name: ''
29 | 数学外書輪講II:
30 | max_certificated_credit_num: 2
31 | min_certificated_credit_num: 2
32 | leaf:
33 | regexp_number: ^FB135[012]1$
34 | regexp_name: ''
35 | 選択:
36 | max_certificated_credit_num: 70
37 | min_certificated_credit_num: 46
38 | leaf:
39 | FB12/13/14~:
40 | max_certificated_credit_num: 70
41 | min_certificated_credit_num: 46
42 | leaf:
43 | regexp_number: ^FB1[2-4].*$
44 | regexp_name: ''
45 | 専門基礎:
46 | max_certificated_credit_num: 53
47 | min_certificated_credit_num: 29
48 | leaf:
49 | ? ''
50 | : max_certificated_credit_num: 53
51 | min_certificated_credit_num: 29
52 | leaf:
53 | 必修:
54 | max_certificated_credit_num: 6
55 | min_certificated_credit_num: 6
56 | leaf:
57 | 微積分I,II:
58 | max_certificated_credit_num: 2
59 | min_certificated_credit_num: 2
60 | leaf:
61 | regexp_number: ^FBA(14[6-9]1|15[0-3]1)$
62 | regexp_name: ''
63 | 線形代数I,II:
64 | max_certificated_credit_num: 2
65 | min_certificated_credit_num: 2
66 | leaf:
67 | regexp_number: ^FBA(1(5[89]|6[01])1|16[2-5]1)$
68 | regexp_name: ''
69 | 数学リテラシー1:
70 | max_certificated_credit_num: 1
71 | min_certificated_credit_num: 1
72 | leaf:
73 | regexp_number: ''
74 | regexp_name: ^数学リテラシー1$
75 | 数学リテラシー2:
76 | max_certificated_credit_num: 1
77 | min_certificated_credit_num: 1
78 | leaf:
79 | regexp_number: ''
80 | regexp_name: ^数学リテラシー2$
81 | 選択:
82 | max_certificated_credit_num: 47
83 | min_certificated_credit_num: 23
84 | leaf:
85 | FBA/FC/FE/EE,生物~:
86 | max_certificated_credit_num: 47
87 | min_certificated_credit_num: 23
88 | leaf:
89 | regexp_number: ^((FBA|FC|FE|EE).*|(EB00001|EB11[368]11|EB11[27]21|EB11131))$
90 | regexp_name: ''
91 | 基礎:
92 | max_certificated_credit_num: 45
93 | min_certificated_credit_num: 19
94 | leaf:
95 | 共通:
96 | max_certificated_credit_num: 29
97 | min_certificated_credit_num: 13
98 | leaf:
99 | 必修:
100 | max_certificated_credit_num: 12
101 | min_certificated_credit_num: 12
102 | leaf:
103 | 総合科目:
104 | max_certificated_credit_num: 2
105 | min_certificated_credit_num: 2
106 | leaf:
107 | regexp_number: ''
108 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
109 | 情報:
110 | max_certificated_credit_num: 4
111 | min_certificated_credit_num: 4
112 | leaf:
113 | regexp_number: ^6.*$
114 | regexp_name: ''
115 | 体育:
116 | max_certificated_credit_num: 2
117 | min_certificated_credit_num: 2
118 | leaf:
119 | regexp_number: ^2[12].*$
120 | regexp_name: ''
121 | 第1外国語:
122 | max_certificated_credit_num: 4
123 | min_certificated_credit_num: 4
124 | leaf:
125 | regexp_number: ^31.*$
126 | regexp_name: (^English Presentation Skills I+$)
127 | 選択:
128 | max_certificated_credit_num: 17
129 | min_certificated_credit_num: 1
130 | leaf:
131 | 総合科目(学士基盤科目):
132 | max_certificated_credit_num: 1
133 | min_certificated_credit_num: 1
134 | leaf:
135 | regexp_number: ^1.*$
136 | regexp_name: ''
137 | 総合科目/体育/外国語/国語/芸術:
138 | max_certificated_credit_num: 16
139 | min_certificated_credit_num: 0
140 | leaf:
141 | regexp_number: ^[1-5].*$
142 | regexp_name: ''
143 | 関連:
144 | max_certificated_credit_num: 16
145 | min_certificated_credit_num: 6
146 | leaf:
147 | 必修:
148 | max_certificated_credit_num: 0
149 | min_certificated_credit_num: 0
150 | leaf: {}
151 | 選択:
152 | max_certificated_credit_num: 16
153 | min_certificated_credit_num: 6
154 | leaf:
155 | 専門科目および専門基礎科目で指定した以外の科目:
156 | max_certificated_credit_num: 10000
157 | min_certificated_credit_num: 6
158 | leaf:
159 | regexp_number: ^.......$
160 | regexp_name: ''
161 |
--------------------------------------------------------------------------------
/data/reqYml/psych20.yml:
--------------------------------------------------------------------------------
1 | 心理学類20年度入学:
2 | max_certificated_credit_num: 125
3 | min_certificated_credit_num: 125
4 | leaf:
5 | 専門:
6 | max_certificated_credit_num: 80
7 | min_certificated_credit_num: 43
8 | leaf:
9 | ? ''
10 | : max_certificated_credit_num: 80
11 | min_certificated_credit_num: 43
12 | leaf:
13 | 必修:
14 | max_certificated_credit_num: 22
15 | min_certificated_credit_num: 22
16 | leaf:
17 | 知覚・認知心理学:
18 | max_certificated_credit_num: 2
19 | min_certificated_credit_num: 2
20 | leaf:
21 | regexp_number: ^CC21291$
22 | regexp_name: ''
23 | 学習・言語心理学:
24 | max_certificated_credit_num: 2
25 | min_certificated_credit_num: 2
26 | leaf:
27 | regexp_number: ^CC21221$
28 | regexp_name: ''
29 | 感情・人格心理学:
30 | max_certificated_credit_num: 2
31 | min_certificated_credit_num: 2
32 | leaf:
33 | regexp_number: ^CC21311$
34 | regexp_name: ''
35 | 神経・生理心理学:
36 | max_certificated_credit_num: 2
37 | min_certificated_credit_num: 2
38 | leaf:
39 | regexp_number: ^CC21321$
40 | regexp_name: ''
41 | 社会・集団・家族心理学:
42 | max_certificated_credit_num: 2
43 | min_certificated_credit_num: 2
44 | leaf:
45 | regexp_number: ^CC21231$
46 | regexp_name: ''
47 | 発達心理学:
48 | max_certificated_credit_num: 2
49 | min_certificated_credit_num: 2
50 | leaf:
51 | regexp_number: ^CC21241$
52 | regexp_name: ''
53 | 臨床心理学概論:
54 | max_certificated_credit_num: 2
55 | min_certificated_credit_num: 2
56 | leaf:
57 | regexp_number: ^CC21211$
58 | regexp_name: ''
59 | 卒業研究セミナー:
60 | max_certificated_credit_num: 2
61 | min_certificated_credit_num: 2
62 | leaf:
63 | regexp_number: ^$
64 | regexp_name: ''
65 | 卒業研究:
66 | max_certificated_credit_num: 6
67 | min_certificated_credit_num: 6
68 | leaf:
69 | regexp_number: ^CC219[15]8$
70 | regexp_name: ''
71 | 選択:
72 | max_certificated_credit_num: 70
73 | min_certificated_credit_num: 46
74 | leaf:
75 | FB12/13/14~:
76 | max_certificated_credit_num: 70
77 | min_certificated_credit_num: 46
78 | leaf:
79 | regexp_number: ^FB1[2-4].*$
80 | regexp_name: ''
81 | 専門基礎:
82 | max_certificated_credit_num: 53
83 | min_certificated_credit_num: 29
84 | leaf:
85 | ? ''
86 | : max_certificated_credit_num: 53
87 | min_certificated_credit_num: 29
88 | leaf:
89 | 必修:
90 | max_certificated_credit_num: 6
91 | min_certificated_credit_num: 6
92 | leaf:
93 | 微積分I,II:
94 | max_certificated_credit_num: 2
95 | min_certificated_credit_num: 2
96 | leaf:
97 | regexp_number: ^FBA(14[6-9]1|15[0-3]1)$
98 | regexp_name: ''
99 | 線形代数I,II:
100 | max_certificated_credit_num: 2
101 | min_certificated_credit_num: 2
102 | leaf:
103 | regexp_number: ^FBA(1(5[89]|6[01])1|16[2-5]1)$
104 | regexp_name: ''
105 | 数学リテラシー1:
106 | max_certificated_credit_num: 1
107 | min_certificated_credit_num: 1
108 | leaf:
109 | regexp_number: ''
110 | regexp_name: ^数学リテラシー1$
111 | 数学リテラシー2:
112 | max_certificated_credit_num: 1
113 | min_certificated_credit_num: 1
114 | leaf:
115 | regexp_number: ''
116 | regexp_name: ^数学リテラシー2$
117 | 選択:
118 | max_certificated_credit_num: 47
119 | min_certificated_credit_num: 23
120 | leaf:
121 | FBA/FC/FE/EE,生物~:
122 | max_certificated_credit_num: 47
123 | min_certificated_credit_num: 23
124 | leaf:
125 | regexp_number: ^((FBA|FC|FE|EE).*|(EB00001|EB11[368]11|EB11[27]21|EB11131))$
126 | regexp_name: ''
127 | 基礎:
128 | max_certificated_credit_num: 45
129 | min_certificated_credit_num: 19
130 | leaf:
131 | 共通:
132 | max_certificated_credit_num: 29
133 | min_certificated_credit_num: 13
134 | leaf:
135 | 必修:
136 | max_certificated_credit_num: 12
137 | min_certificated_credit_num: 12
138 | leaf:
139 | 総合科目:
140 | max_certificated_credit_num: 2
141 | min_certificated_credit_num: 2
142 | leaf:
143 | regexp_number: ''
144 | regexp_name: ^(学問への誘い|フレッシュマン・セミナー)$
145 | 情報:
146 | max_certificated_credit_num: 4
147 | min_certificated_credit_num: 4
148 | leaf:
149 | regexp_number: ^6.*$
150 | regexp_name: ''
151 | 体育:
152 | max_certificated_credit_num: 2
153 | min_certificated_credit_num: 2
154 | leaf:
155 | regexp_number: ^2[12].*$
156 | regexp_name: ''
157 | 第1外国語:
158 | max_certificated_credit_num: 4
159 | min_certificated_credit_num: 4
160 | leaf:
161 | regexp_number: ^31.*$
162 | regexp_name: (^English Presentation Skills I+$)
163 | 選択:
164 | max_certificated_credit_num: 17
165 | min_certificated_credit_num: 1
166 | leaf:
167 | 総合科目(学士基盤科目):
168 | max_certificated_credit_num: 1
169 | min_certificated_credit_num: 1
170 | leaf:
171 | regexp_number: ^1.*$
172 | regexp_name: ''
173 | 総合科目/体育/外国語/国語/芸術:
174 | max_certificated_credit_num: 16
175 | min_certificated_credit_num: 0
176 | leaf:
177 | regexp_number: ^[1-5].*$
178 | regexp_name: ''
179 | 関連:
180 | max_certificated_credit_num: 16
181 | min_certificated_credit_num: 6
182 | leaf:
183 | 必修:
184 | max_certificated_credit_num: 0
185 | min_certificated_credit_num: 0
186 | leaf: {}
187 | 選択:
188 | max_certificated_credit_num: 16
189 | min_certificated_credit_num: 6
190 | leaf:
191 | 専門科目および専門基礎科目で指定した以外の科目:
192 | max_certificated_credit_num: 10000
193 | min_certificated_credit_num: 6
194 | leaf:
195 | regexp_number: ^.......$
196 | regexp_name: ''
197 |
--------------------------------------------------------------------------------
/py-cli/g_checker_for_itf/Color.py:
--------------------------------------------------------------------------------
1 | class Color(object):
2 | BLACK = "\033[30m" # (文字)黒
3 | RED = "\033[31m" # (文字)赤
4 | GREEN = "\033[32m" # (文字)緑
5 | YELLOW = "\033[33m" # (文字)黄
6 | BLUE = "\033[34m" # (文字)青
7 | MAGENTA = "\033[35m" # (文字)マゼンタ
8 | CYAN = "\033[36m" # (文字)シアン
9 | WHITE = "\033[37m" # (文字)白
10 | COLOR_DEFAULT = "\033[39m" # 文字色をデフォルトに戻す
11 | BOLD = "\033[1m" # 太字
12 | UNDERLINE = "\033[4m" # 下線
13 | INVISIBLE = "\033[08m" # 不可視
14 | REVERCE = "\033[07m" # 文字色と背景色を反転
15 | BG_BLACK = "\033[40m" # (背景)黒
16 | BG_RED = "\033[41m" # (背景)赤
17 | BG_GREEN = "\033[42m" # (背景)緑
18 | BG_YELLOW = "\033[43m" # (背景)黄
19 | BG_BLUE = "\033[44m" # (背景)青
20 | BG_MAGENTA = "\033[45m" # (背景)マゼンタ
21 | BG_CYAN = "\033[46m" # (背景)シアン
22 | BG_WHITE = "\033[47m" # (背景)白
23 | BG_DEFAULT = "\033[49m" # 背景色をデフォルトに戻す
24 | RESET = "\033[0m" # 全てリセット
25 |
26 |
27 | OK_COLOR_STR = f"{Color.RESET}{Color.GREEN}{Color.BOLD}"
28 | FEATURE_COLOR_STR = f"{Color.RESET}{Color.CYAN}"
29 | FAIL_COLOR_STR = f"{Color.RESET}{Color.RED}{Color.BOLD}"
30 | RESET_COLOR_STR = f"{Color.RESET}"
31 |
--------------------------------------------------------------------------------
/py-cli/g_checker_for_itf/Dir.py:
--------------------------------------------------------------------------------
1 | from typing import Dict, List, Tuple, TypedDict, Union, cast
2 |
3 | from .Color import FAIL_COLOR_STR, FEATURE_COLOR_STR, OK_COLOR_STR, RESET_COLOR_STR
4 | from .RecognizedFilter import KamokuClass, RecognizedFilter
5 |
6 |
7 | class DirResDict(TypedDict):
8 | max_certificated_credit_num: int
9 | now_certificated_credit_num: int
10 | feature_certificated_credit_num: int
11 | min_certificated_credit_num: int
12 | # cyclic definition
13 | leaf: "DirResDict" # type: ignore[misc]
14 |
15 |
16 | class Dir(object):
17 | def __init__(
18 | self, name: str, max: int, min: int, is_frame: bool, parent_depth: int
19 | ) -> None:
20 | self.name = name
21 | self.max_certificated_credit_num = max
22 | self.now_certificated_credit_num = 0.0
23 | self.feature_certificated_credit_num = 0.0
24 | self.min_certificated_credit_num = min
25 | self.is_frame = is_frame # if is_frame, filter_mode else dir_mode
26 | self.course_filter: Dict[str, Union["Dir", RecognizedFilter]] = {}
27 | self.dir_depth = parent_depth
28 | self.now_certificated_credit_name: List[str] = []
29 |
30 | def get_indent(self) -> int:
31 | return self.dir_depth - 1
32 |
33 | def print_son(self) -> None:
34 | r_pad = "".rjust(self.get_indent(), " ")
35 | l_pad = self.name.ljust(5, " ").ljust(24 - self.get_indent(), " ")
36 | credit_total = (
37 | self.now_certificated_credit_num + self.feature_certificated_credit_num
38 | )
39 | if self.now_certificated_credit_num >= self.min_certificated_credit_num:
40 | print(
41 | f"{OK_COLOR_STR}{r_pad}{l_pad}",
42 | f"{self.now_certificated_credit_num:5.1f}{FEATURE_COLOR_STR}"
43 | f"({credit_total:5.1f}){OK_COLOR_STR}/{self.min_certificated_credit_num:5.1f}{RESET_COLOR_STR}",
44 | )
45 | else:
46 | print(
47 | f"{FAIL_COLOR_STR}{r_pad}{l_pad}",
48 | f"{self.now_certificated_credit_num:5.1f}{FEATURE_COLOR_STR}"
49 | f"({credit_total:5.1f}){FAIL_COLOR_STR}/{self.min_certificated_credit_num:5.1f}{RESET_COLOR_STR}",
50 | )
51 | for item in self.course_filter.values():
52 | if not isinstance(item, Dir):
53 | continue
54 | if item.is_frame:
55 | item.print_son()
56 | else:
57 | item.print_ls()
58 |
59 | def namelist(self) -> str:
60 | return " ".join(self.now_certificated_credit_name)
61 |
62 | def print_ls(self) -> None:
63 | r_pad = "".rjust(self.get_indent(), " ")
64 | l_pad = self.name.ljust(5, " ").ljust(24 - self.get_indent(), " ")
65 | credit_total = (
66 | self.now_certificated_credit_num + self.feature_certificated_credit_num
67 | )
68 | if self.now_certificated_credit_num >= self.min_certificated_credit_num:
69 | print(
70 | f"{OK_COLOR_STR}{r_pad}{l_pad}",
71 | f"{self.now_certificated_credit_num:5.1f}"
72 | f"{FEATURE_COLOR_STR}({credit_total:5.1f})"
73 | f"{OK_COLOR_STR}/{self.min_certificated_credit_num:5.1f}{RESET_COLOR_STR}",
74 | self.namelist(),
75 | )
76 | else:
77 | print(
78 | f"{FAIL_COLOR_STR}{r_pad}{l_pad}",
79 | f"{self.now_certificated_credit_num:5.1f}"
80 | f"{FEATURE_COLOR_STR}({credit_total:5.1f})"
81 | f"{FAIL_COLOR_STR}/{self.min_certificated_credit_num:5.1f}{RESET_COLOR_STR}",
82 | self.namelist(),
83 | )
84 |
85 | def genDict(self) -> DirResDict:
86 | res = {
87 | "max_certificated_credit_num": self.max_certificated_credit_num,
88 | "now_certificated_credit_num": self.now_certificated_credit_num,
89 | "feature_certificated_credit_num": self.feature_certificated_credit_num,
90 | "min_certificated_credit_num": self.min_certificated_credit_num,
91 | "leaf": {},
92 | }
93 | return cast(DirResDict, res)
94 | # return {self.name:res}
95 |
96 | def check(self, ls: List[KamokuClass]) -> Tuple[float, float]:
97 | self.now_certificated_credit_num = 0.0
98 | if self.is_frame: # 下を見に行く
99 | for item in self.course_filter.values():
100 | if not isinstance(item, Dir):
101 | continue
102 | res_d = item.check(ls)
103 | self.now_certificated_credit_num += res_d[0]
104 | self.feature_certificated_credit_num += res_d[1]
105 | else: # RecoFil について
106 | for item in self.course_filter.values():
107 | if not isinstance(item, RecognizedFilter):
108 | continue
109 | res_f = item.checkCourse(ls)
110 | self.now_certificated_credit_num += res_f[0]
111 | if res_f[1] != []:
112 | self.now_certificated_credit_name += res_f[1]
113 | self.feature_certificated_credit_num += res_f[2]
114 | return self.now_certificated_credit_num, self.feature_certificated_credit_num
115 |
116 | def add(self, item: Union["Dir", RecognizedFilter]) -> None:
117 | self.course_filter[item.name] = item
118 |
119 |
120 | class Level1(Dir):
121 | def __init__(self, name: str, max: int, min: int) -> None:
122 | super().__init__(name, max, min, True, 1)
123 |
124 |
125 | class Level2(Dir):
126 | def __init__(self, name: str, max: int, min: int) -> None:
127 | super().__init__(name, max, min, True, 2)
128 |
129 |
130 | class Level3(Dir):
131 | def __init__(self, name: str, max: int, min: int) -> None:
132 | super().__init__(name, max, min, True, 3)
133 |
134 |
135 | class Level4(Dir):
136 | def __init__(self, name: str, max: int, min: int) -> None:
137 | super().__init__(name, max, min, True, 4)
138 |
139 |
140 | class Level5(Dir):
141 | def __init__(self, name: str, max: int, min: int) -> None:
142 | super().__init__(name, max, min, False, 5)
143 |
--------------------------------------------------------------------------------
/py-cli/g_checker_for_itf/RecognizedFilter.py:
--------------------------------------------------------------------------------
1 | import re
2 | from typing import List, Tuple, TypedDict
3 |
4 | from .Color import FEATURE_COLOR_STR, Color
5 |
6 |
7 | class KamokuClass(object):
8 | def __init__(self, all: List[str], expect: bool = False) -> None:
9 | self.course_number = all[2]
10 | self.course_name = all[3]
11 | self.credit = float(all[4])
12 | self.grade = all[7]
13 | self.can_use = self.grade in ("P", "C", "A+", "A", "B", "C", "認") or (
14 | self.grade == "履修中" and expect
15 | )
16 | self.used = False
17 | self.isCount = "C0" != all[8]
18 |
19 | def print(self) -> None:
20 | data = f"{self.course_number}:{self.course_name}{Color.RESET}"
21 | if self.can_use:
22 | if self.used:
23 | print(f"{Color.BLUE}{data}")
24 | else:
25 | print(f"{Color.GREEN}{data}")
26 | else:
27 | print(f"{Color.RED}{data}")
28 |
29 |
30 | class RecognizedFilterResDict(TypedDict):
31 | regexp_number: str
32 | regexp_name: str
33 |
34 |
35 | class RecognizedFilter(object):
36 | name: str
37 | regexp_number: str
38 | regexp_name: str
39 |
40 | def __init__(self, name: str, num: str, regname: str) -> None:
41 | self.name = name
42 | self.regexp_number = num
43 | self.regexp_name = regname
44 |
45 | def genDict(self) -> RecognizedFilterResDict:
46 | res: RecognizedFilterResDict = {
47 | "regexp_number": self.regexp_number,
48 | "regexp_name": self.regexp_name,
49 | }
50 | return res
51 |
52 | def checkCourse(
53 | self, ls: List[KamokuClass], drop: bool = True
54 | ) -> Tuple[float, List[str], float]:
55 | res_credit = 0.0
56 | feature_credit = 0.0
57 | res_course_name: List[str] = []
58 | for kamoku in ls:
59 | flag = False
60 | if not self.regexp_number == r"" and re.compile(self.regexp_number).match(
61 | kamoku.course_number
62 | ):
63 | flag = True
64 | if not self.regexp_name == r"" and re.compile(self.regexp_name).match(
65 | kamoku.course_name
66 | ):
67 | flag = True
68 | data = f"{kamoku.course_name}{Color.RESET}"
69 | if flag:
70 | if not kamoku.used:
71 | if kamoku.can_use:
72 | kamoku.used = True
73 | res_credit += kamoku.credit
74 | res_course_name.append(f"{Color.GREEN}{data}")
75 | elif kamoku.grade == "履修中":
76 | kamoku.used = True
77 | feature_credit += kamoku.credit
78 | res_course_name.append(f"{FEATURE_COLOR_STR}{data}")
79 |
80 | else:
81 | if drop:
82 | res_course_name.append(f"{Color.RED}{data}")
83 |
84 | return res_credit, res_course_name, feature_credit
85 |
86 | def print_son(self, depth: int) -> None:
87 | print(" " * (depth - 1) + self.name)
88 |
--------------------------------------------------------------------------------
/py-cli/g_checker_for_itf/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "0.0.1"
2 |
--------------------------------------------------------------------------------
/py-cli/g_checker_for_itf/main.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import csv
3 | import json
4 | import shutil
5 | from typing import List, cast
6 |
7 | from g_checker_for_itf import __version__
8 |
9 | from .Dir import Dir, Level1, Level2, Level3, Level4, Level5
10 | from .RecognizedFilter import KamokuClass, RecognizedFilter
11 |
12 | MAX = 10000
13 |
14 |
15 | class GchkHelpFormatter(
16 | argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter
17 | ):
18 | pass
19 |
20 |
21 | def parse_arg() -> argparse.Namespace:
22 | parser = argparse.ArgumentParser(
23 | prog="gchk",
24 | description="A checker if your credits meet the graduation requirements or not.",
25 | formatter_class=(
26 | lambda prog: GchkHelpFormatter(
27 | prog,
28 | **{
29 | "width": shutil.get_terminal_size(fallback=(120, 50)).columns,
30 | "max_help_position": 30,
31 | },
32 | )
33 | ),
34 | )
35 | parser.add_argument(
36 | "-i",
37 | "--input",
38 | help="target file from twins (UTF-8, CSV)",
39 | default="sample.csv",
40 | )
41 | parser.add_argument(
42 | "-r", "--requirements", help="requirements file", default="coins20.json"
43 | )
44 | parser.add_argument("-g", "--gpa", help="print GPA", action="store_true")
45 | parser.add_argument("-d", "--drop", help="print drop credit", action="store_false")
46 | parser.add_argument("-n", "--name", help="print name and id", action="store_true")
47 | parser.add_argument("-s", "--save", help="save as JSON", action="store_true")
48 | parser.add_argument("-e", "--expect", help="count 履修中", action="store_true")
49 | parser.add_argument(
50 | "-V",
51 | "--version",
52 | action="version",
53 | version=f"%(prog)s {__version__}",
54 | )
55 | return parser.parse_args()
56 |
57 |
58 | def parseJSON(JSONFILENAME: str) -> Level1:
59 | data = json.load(open(JSONFILENAME, "r"))
60 | MAX_STR = "max_certificated_credit_num"
61 | MIN_STR = "min_certificated_credit_num"
62 |
63 | if len(data) == 0:
64 | raise ValueError("json data is empty")
65 | else:
66 | first_key, *_ = data
67 | init_k1, init_v1 = first_key, data[first_key]
68 | all = Level1(init_k1, init_v1[MAX_STR], init_v1[MIN_STR])
69 |
70 | for k1, v1 in data.items():
71 | all = Level1(k1, v1[MAX_STR], v1[MIN_STR])
72 | for k2, v2 in v1["leaf"].items():
73 | all.add(Level2(k2, v2[MAX_STR], v2[MIN_STR]))
74 | for k3, v3 in v2["leaf"].items():
75 | cf_k2 = cast(Dir, all.course_filter[k2])
76 | cf_k2.add(Level3(k3, v3[MAX_STR], v3[MIN_STR]))
77 | for k4, v4 in v3["leaf"].items():
78 | cf_k3 = cast(Dir, cf_k2.course_filter[k3])
79 | cf_k3.add(Level4(k4, v4[MAX_STR], v4[MIN_STR]))
80 | for k5, v5 in v4["leaf"].items():
81 | cf_k4 = cast(Dir, cf_k3.course_filter[k4])
82 | cf_k4.add(Level5(k5, v5[MAX_STR], v5[MIN_STR]))
83 | cf_k5 = cast(Dir, cf_k4.course_filter[k5])
84 | cf_k5.add(
85 | RecognizedFilter(
86 | k5,
87 | v5["leaf"]["regexp_number"],
88 | v5["leaf"]["regexp_name"],
89 | )
90 | )
91 |
92 | return all
93 |
94 |
95 | def gp(ls: List[KamokuClass]) -> None:
96 | gps = 0.0
97 | credit_sum = 0.0
98 | grade_points = {"A+": 4.3, "A": 4, "B": 3, "C": 2, "D": 0}
99 | target_kams = [kam for kam in ls if kam.can_use and kam.isCount]
100 | for kam in target_kams:
101 | for grade, point in grade_points.items():
102 | if kam.grade == grade:
103 | gps += point * kam.credit
104 | credit_sum += kam.credit
105 | gpa = gps / credit_sum
106 | print(f"GPA = GPS/CreditSum : {gpa:1.5} = {gps}/{credit_sum}")
107 |
108 |
109 | def readCSV(CSVFILENAME: str, expect: bool) -> List[KamokuClass]:
110 | memo = []
111 | with open(CSVFILENAME) as f:
112 | reader = csv.reader(f)
113 | for i, row in enumerate(reader):
114 | if i != 0:
115 | memo.append(KamokuClass(row, expect))
116 |
117 | for t in memo:
118 | if t.course_name == "オートマトンと形式言語" and t.course_number == "GB21601":
119 | t.course_number = "GB20401"
120 | if t.course_name == "プログラム理論" and t.course_number == "GB21111":
121 | t.course_number = "GB20501"
122 | if t.course_name == "プログラミングチャレンジ" and t.course_number == "GB21802":
123 | t.course_number = "GB20602"
124 | if t.course_name == "プログラム言語処理" and t.course_number == "GB31301":
125 | t.course_number = "GB30504"
126 | if t.course_name == "ソフトウェア工学" and t.course_number == "GB31501":
127 | t.course_number = "GB30601"
128 | if t.course_name == "情報理論" and t.course_number == "GB12501":
129 | t.course_number = "GB40601"
130 |
131 | return memo
132 |
133 |
134 | def readNameFromCSV(CSVFILENAME: str) -> str:
135 | reader = csv.reader(open(CSVFILENAME, "r"))
136 | for row in reader:
137 | if reader.line_num == 1:
138 | return row[1]
139 | else:
140 | raise ValueError("CSV is maybe blank.")
141 |
142 |
143 | def genJSON(v0: Level1, input_csv: str, requirements: str) -> None:
144 | res = {}
145 | res[v0.name] = v0.genDict()
146 | for v1 in v0.course_filter.values():
147 | if not isinstance(v1, Dir):
148 | continue
149 | res[v0.name]["leaf"][v1.name] = v1.genDict()
150 | for v2 in v1.course_filter.values():
151 | if not isinstance(v2, Dir):
152 | continue
153 | res[v0.name]["leaf"][v1.name]["leaf"][v2.name] = v2.genDict()
154 | for v3 in v2.course_filter.values():
155 | if not isinstance(v3, Dir):
156 | continue
157 | res[v0.name]["leaf"][v1.name]["leaf"][v2.name]["leaf"][
158 | v3.name
159 | ] = v3.genDict()
160 | for v4 in v3.course_filter.values():
161 | if not isinstance(v4, Dir):
162 | continue
163 | res[v0.name]["leaf"][v1.name]["leaf"][v2.name]["leaf"][v3.name][
164 | "leaf"
165 | ][v4.name] = v4.genDict()
166 | for v5 in v4.course_filter.values():
167 | if not isinstance(v5, Dir):
168 | continue
169 | res[v0.name]["leaf"][v1.name]["leaf"][v2.name]["leaf"][v3.name][
170 | "leaf"
171 | ][v4.name]["leaf"] = v5.genDict()
172 | basename = input_csv.replace(".csv", "")
173 | with open(f"{basename}-{requirements}", "w") as f:
174 | json.dump(res, f, ensure_ascii=False, indent=4)
175 | # with open("tani/src/grade.json", "w") as f:
176 | # json.dump(res, f, ensure_ascii=False, indent=4)
177 |
178 |
179 | def main() -> None:
180 | args = parse_arg()
181 | CSVFILENAME = args.input
182 | JSONFILENAME = args.requirements
183 |
184 | coins20 = parseJSON(JSONFILENAME)
185 | if args.name:
186 | print(CSVFILENAME, readNameFromCSV(CSVFILENAME))
187 | kamoku = readCSV(CSVFILENAME, args.expect)
188 | coins20.check(kamoku)
189 | coins20.print_son()
190 | if args.gpa:
191 | gp(kamoku)
192 | if args.save:
193 | genJSON(coins20, args.input, args.requirements)
194 |
195 |
196 | if __name__ == "__main__":
197 | main()
198 |
--------------------------------------------------------------------------------
/py-cli/pyproject.toml:
--------------------------------------------------------------------------------
1 | [build-system]
2 | requires = ["wheel", "setuptools"]
3 | build-backend = "setuptools.build_meta"
4 |
--------------------------------------------------------------------------------
/py-cli/setup.cfg:
--------------------------------------------------------------------------------
1 | [metadata]
2 | name = g-checker-for-itf
3 | version = attr: g_checker_for_itf.__init__.__version__
4 | description = "A checker if your credits meet the graduation requirements or not (For Univ. Tsukuba students)"
5 | long_description = file: README.md
6 | long_description_content_type = text/markdown
7 | license = MIT
8 | author = oshamashama
9 | author_email = uwyiqmq@gmail.com
10 | classifiers =
11 | Development Status :: 3 - Alpha
12 | Programming Language :: Python :: 3.7
13 | Programming Language :: Python :: 3.8
14 | Programming Language :: Python :: 3.9
15 | Programming Language :: Python :: 3.10
16 |
17 | [options]
18 | packages = find:
19 | python_requires = >= 3.7
20 |
21 | [options.extras_require]
22 | dev =
23 | black>=22.1.0
24 | flake8>=4.0.1
25 | mypy>=0.931
26 | isort>=5.10.1
27 | types-setuptools>=57.4.8
28 |
29 | [options.entry_points]
30 | console_scripts =
31 | gchk = g_checker_for_itf.main:main
32 |
33 |
34 | [isort]
35 | profile = black
36 |
37 | [flake8]
38 | # E501: line too long
39 | ignore = E501
40 | indent-size = 4
41 |
42 | [mypy]
43 | python_version = 3.9
44 | show_error_codes = True
45 | pretty = True
46 | strict = True
47 |
--------------------------------------------------------------------------------
/py-cli/setup.py:
--------------------------------------------------------------------------------
1 | from setuptools import setup
2 |
3 | setup()
4 |
--------------------------------------------------------------------------------
/react-visualizer/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | build/
--------------------------------------------------------------------------------
/react-visualizer/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "g-checker-from-itf",
3 | "version": "0.1.0",
4 | "private": true,
5 | "homepage": "https://oshamashama.github.io/g-checker-for-itf/",
6 | "dependencies": {
7 | "bootstrap": "^5.3.3",
8 | "react": "^18.2.0",
9 | "react-bootstrap": "^2.10.2",
10 | "react-dom": "^18.2.0",
11 | "react-scripts": "5.0.1",
12 | "react-select": "^5.8.0",
13 | "react-table": "^7.8.0",
14 | "web-vitals": "^3.5.2"
15 | },
16 | "scripts": {
17 | "start": "react-scripts start",
18 | "build": "react-scripts build",
19 | "eject": "react-scripts eject",
20 | "fmt:check": "prettier --check src",
21 | "fmt": "prettier --write src"
22 | },
23 | "eslintConfig": {
24 | "extends": [
25 | "react-app",
26 | "react-app/jest"
27 | ]
28 | },
29 | "browserslist": {
30 | "production": [
31 | ">0.2%",
32 | "not dead",
33 | "not op_mini all"
34 | ],
35 | "development": [
36 | "last 1 chrome version",
37 | "last 1 firefox version",
38 | "last 1 safari version"
39 | ]
40 | },
41 | "devDependencies": {
42 | "gh-pages": "^6.1.1",
43 | "prettier": "^3.2.5",
44 | "typescript": "^4.6.3"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/react-visualizer/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oshamashama/g-checker-for-itf/c040b95ac1fcac6a6d29194f548c83729fec1d82/react-visualizer/public/favicon.ico
--------------------------------------------------------------------------------
/react-visualizer/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
109 | {!(hovered && !clicked) ? 110 | (key === "" ? "" : key) + st 111 | : (count_course === "" ? "該当する科目を修得していません" : count_course)} 112 |
113 |{key === "" ? "" : key}
126 |{st}
127 |