init
This commit is contained in:
commit
978f6c1cc1
|
@ -0,0 +1,18 @@
|
||||||
|
.dub
|
||||||
|
docs.json
|
||||||
|
__dummy.html
|
||||||
|
bin/
|
||||||
|
docs/
|
||||||
|
/shkolaspo
|
||||||
|
shkolaspo.log
|
||||||
|
shkolaspo.so
|
||||||
|
shkolaspo.dylib
|
||||||
|
shkolaspo.dll
|
||||||
|
shkolaspo.a
|
||||||
|
shkolaspo.lib
|
||||||
|
shkolaspo-test-*
|
||||||
|
*.exe
|
||||||
|
*.pdb
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.lst
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
|
||||||
|
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
|
||||||
|
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "code-d",
|
||||||
|
"request": "launch",
|
||||||
|
"dubBuild": true,
|
||||||
|
"name": "Build & Debug DUB project",
|
||||||
|
"cwd": "${command:dubWorkingDirectory}",
|
||||||
|
"program": "bin/${command:dubTarget}",
|
||||||
|
"args": ["./data/database.db", "./data/sample.test"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,26 @@
|
||||||
|
# Двоичная система. Двоичная арифметика
|
||||||
|
? Двоичная системой счисления является
|
||||||
|
- Унарная система счисления
|
||||||
|
- Непозиционная система счисления
|
||||||
|
- Позиционная система счисления
|
||||||
|
? Для записи в двоичной системе счисления используют только две цифры. Какие?
|
||||||
|
- 2 и 3
|
||||||
|
- 2 и 10
|
||||||
|
- 0 и 1
|
||||||
|
? Переведите число 1010100 из двоичной системы в десятичную
|
||||||
|
- 84
|
||||||
|
- 83
|
||||||
|
- 85
|
||||||
|
+ 86
|
||||||
|
? Найдите сумму двух чисел в двоичной системе счисления 11001 + 11100 =
|
||||||
|
- 110111
|
||||||
|
- 0111101
|
||||||
|
+ 111011
|
||||||
|
- 110101
|
||||||
|
? Вычислите 11001 - 1111 =
|
||||||
|
- 1010
|
||||||
|
- 1110
|
||||||
|
- 1011
|
||||||
|
- 0110
|
||||||
|
? Вычислите 11001 - 1111 =
|
||||||
|
- 1010
|
Binary file not shown.
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"authors": [
|
||||||
|
"Alexander Zhirov"
|
||||||
|
],
|
||||||
|
"copyright": "Copyright © 2024, Alexander Zhirov",
|
||||||
|
"description": "Чтение файла с тестированием",
|
||||||
|
"license": "proprietary",
|
||||||
|
"name": "readtest",
|
||||||
|
"dependencies": {
|
||||||
|
"singlog": "~>0.5.0",
|
||||||
|
"readconf": "~>0.4.1",
|
||||||
|
"arsd-official:sqlite": "~>11.4.0"
|
||||||
|
},
|
||||||
|
"buildTypes": {
|
||||||
|
"debug": {
|
||||||
|
"buildOptions": [
|
||||||
|
"debugMode",
|
||||||
|
"debugInfo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"release": {
|
||||||
|
"buildOptions": [
|
||||||
|
"releaseMode",
|
||||||
|
"inline",
|
||||||
|
"optimize"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"targetPath": "bin",
|
||||||
|
"targetType": "executable"
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"fileVersion": 1,
|
||||||
|
"versions": {
|
||||||
|
"arsd-official": "11.4.0",
|
||||||
|
"datefmt": "1.0.4",
|
||||||
|
"readconf": "0.4.1",
|
||||||
|
"silly": "1.2.0-dev.2",
|
||||||
|
"singlog": "0.5.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"defaultArchitecture": "x86_64",
|
||||||
|
"defaultCompiler": "ldc2"
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Двоичная система. Двоичная арифметика
|
||||||
|
? Двоичная системой счисления является
|
||||||
|
- Унарная система счисления
|
||||||
|
- Непозиционная система счисления
|
||||||
|
- Позиционная система счисления
|
||||||
|
? Для записи в двоичной системе счисления используют только две цифры. Какие?
|
||||||
|
- 2 и 3
|
||||||
|
- 2 и 10
|
||||||
|
- 0 и 1
|
||||||
|
? Переведите число 1010100 из двоичной системы в десятичную
|
||||||
|
- 84
|
||||||
|
- 83
|
||||||
|
- 85
|
||||||
|
+ 86
|
||||||
|
? Найдите сумму двух чисел в двоичной системе счисления 11001 + 11100 =
|
||||||
|
- 110111
|
||||||
|
- 0111101
|
||||||
|
+ 111011
|
||||||
|
- 110101
|
||||||
|
? Вычислите 11001 - 1111 =
|
||||||
|
- 1010
|
||||||
|
- 1110
|
||||||
|
- 1011
|
||||||
|
- 0110
|
|
@ -0,0 +1,155 @@
|
||||||
|
import singlog;
|
||||||
|
|
||||||
|
import core.stdc.stdlib : exit, EXIT_SUCCESS, EXIT_FAILURE;
|
||||||
|
import std.stdio, std.conv, std.path, std.file, std.format, std.regex, std.array, std.algorithm;
|
||||||
|
|
||||||
|
import source.database;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
GROUP_THEME = 2,
|
||||||
|
GROUP_THEME_TEXT = 5,
|
||||||
|
GROUP_QUESTION = 7,
|
||||||
|
GROUP_QUESTION_TEXT = 10,
|
||||||
|
GROUP_ANSWER = 12,
|
||||||
|
GROUP_ANSWER_TEXT = 15,
|
||||||
|
GROUP_ANSWER_RIGHT = 17,
|
||||||
|
GROUP_ANSWER_RIGHT_TEXT = 20,
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(string[] args)
|
||||||
|
{
|
||||||
|
log.level(log.level.debugging)
|
||||||
|
.output(log.output.stdout.stderr)
|
||||||
|
.color(true);
|
||||||
|
|
||||||
|
string testFilePath;
|
||||||
|
string databaseFile;
|
||||||
|
|
||||||
|
if (args.length != 3) {
|
||||||
|
log.e("Не было передано необходимое количество параметров для запуска программы");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
databaseFile = args[1];
|
||||||
|
testFilePath = args[2];
|
||||||
|
|
||||||
|
const string pattern = "^((( |\\t)*\\#( |\\t)*)(.*[^\\s]))|((( |\\t)*\\?( |\\t)*)(.*[^\\s]))"
|
||||||
|
~ "|((( |\\t)*-( |\\t)*)(.*[^\\s]))|((( |\\t)*\\+( |\\t)*)(.*[^\\s]))$";
|
||||||
|
|
||||||
|
File testFile;
|
||||||
|
|
||||||
|
try {
|
||||||
|
testFile = File(testFilePath, "r");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.w("Unable to open the test file " ~ testFilePath);
|
||||||
|
log.e(e);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
dbliteConnect(databaseFile);
|
||||||
|
|
||||||
|
auto regular = regex(pattern, "m");
|
||||||
|
|
||||||
|
struct Answer {
|
||||||
|
string text;
|
||||||
|
bool right;
|
||||||
|
|
||||||
|
// ToDo
|
||||||
|
bool addToDB() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Question {
|
||||||
|
string text;
|
||||||
|
Answer[int] answers;
|
||||||
|
|
||||||
|
ulong getCount() {
|
||||||
|
return answers.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValid() {
|
||||||
|
return answers.length > 1;
|
||||||
|
}
|
||||||
|
// ToDo
|
||||||
|
bool addToDB() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Theme {
|
||||||
|
string text;
|
||||||
|
Question[int] questions;
|
||||||
|
|
||||||
|
ulong getCount() {
|
||||||
|
return questions.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isValid() {
|
||||||
|
return questions.length > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToDo
|
||||||
|
bool addToDB() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void print() {
|
||||||
|
writeln("Количество вопросов: %s".format(this.getCount()));
|
||||||
|
|
||||||
|
foreach (question; this.questions.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||||
|
writeln("\tВопрос №%d: %s".format(question.key, question.value.text));
|
||||||
|
writeln("\tКоличество ответов: %d".format(question.value.getCount()));
|
||||||
|
if (question.value.isValid())
|
||||||
|
foreach (answer; question.value.answers.byKeyValue.array.sort!((a, b) => a.key < b.key)) {
|
||||||
|
writeln("\t\tОтвет №%d: %s".format(answer.key, answer.value.text));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
writeln("\t\tНедостаточно количества ответов");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Theme theme;
|
||||||
|
|
||||||
|
int numQuestion;
|
||||||
|
int numAnswer;
|
||||||
|
|
||||||
|
while (!testFile.eof())
|
||||||
|
{
|
||||||
|
string line = testFile.readln();
|
||||||
|
auto match = matchFirst(line, regular);
|
||||||
|
|
||||||
|
if (match.length == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (match[GROUP_THEME].length)
|
||||||
|
{
|
||||||
|
theme.text = match[GROUP_THEME_TEXT];
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match[GROUP_QUESTION].length)
|
||||||
|
{
|
||||||
|
numAnswer = 0;
|
||||||
|
theme.questions[++numQuestion] = Question(match[GROUP_QUESTION_TEXT]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match[GROUP_ANSWER].length)
|
||||||
|
{
|
||||||
|
theme.questions[numQuestion].answers[++numAnswer] = Answer(match[GROUP_ANSWER_TEXT], false);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match[GROUP_ANSWER_RIGHT].length)
|
||||||
|
{
|
||||||
|
theme.questions[numQuestion].answers[++numAnswer] = Answer(match[GROUP_ANSWER_RIGHT_TEXT], true);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
theme.print();
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
module source.database;
|
||||||
|
|
||||||
|
import singlog;
|
||||||
|
import core.stdc.stdlib : exit;
|
||||||
|
import source.dblite;
|
||||||
|
|
||||||
|
void dbliteConnect(string path) {
|
||||||
|
try {
|
||||||
|
dblite(path);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.c(e.msg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
module source.dblite;
|
||||||
|
|
||||||
|
import arsd.sqlite;
|
||||||
|
import std.stdio;
|
||||||
|
|
||||||
|
alias dblite = DBLite.getConnection;
|
||||||
|
|
||||||
|
class DBLite : Sqlite {
|
||||||
|
private:
|
||||||
|
static DBLite _dblite;
|
||||||
|
this(string database) {
|
||||||
|
super(database);
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
@property static DBLite getConnection(string database = null) {
|
||||||
|
if (this._dblite is null) {
|
||||||
|
try {
|
||||||
|
this._dblite = new DBLite(database);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new Exception(e.msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._dblite;
|
||||||
|
}
|
||||||
|
|
||||||
|
SqliteResult sql(T...)(string query, T t) {
|
||||||
|
return cast(SqliteResult)this.query(query, t);
|
||||||
|
}
|
||||||
|
|
||||||
|
void commit() {
|
||||||
|
this.query("COMMIT");
|
||||||
|
}
|
||||||
|
|
||||||
|
void rollback() {
|
||||||
|
this.query("ROLLBACK");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue