From 76ec4e66e494a2fee91dacb4b9594385bceea5f9 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Mon, 27 Feb 2023 22:41:32 +0300 Subject: [PATCH 01/28] Add C# branch --- C# | 1 + golang/.golangci.yml | 111 ---------------- golang/.vscode/launch.json | 25 ---- golang/.vscode/settings.json | 4 - golang/README.md | 34 ----- golang/algorithm.code-workspace | 18 --- golang/go.mod | 5 - golang/go.sum | 17 --- golang/internal/module1/summ.go | 25 ---- golang/main.go | 12 -- golang/tests/helpers/helper.go | 21 --- golang/tests/module1/summ_test.go | 48 ------- python/.flake8 | 3 - python/.gitignore | 206 ------------------------------ python/.vscode/launch.json | 15 --- python/.vscode/settings.json | 7 - python/Pipfile | 19 --- python/Pipfile.lock | 106 --------------- python/README.md | 54 -------- python/algorithm.code-workspace | 19 --- python/requirements.txt | Bin 646 -> 0 bytes python/src/__init__.py | 0 python/src/main.py | 7 - python/src/module1/hello.py | 22 ---- python/src/module1/summ.py | 22 ---- python/src/module2/bubble_sort.py | 36 ------ python/tests/__init__.py | 0 python/tests/test_main.py | 37 ------ 28 files changed, 1 insertion(+), 873 deletions(-) create mode 160000 C# delete mode 100644 golang/.golangci.yml delete mode 100644 golang/.vscode/launch.json delete mode 100644 golang/.vscode/settings.json delete mode 100644 golang/README.md delete mode 100644 golang/algorithm.code-workspace delete mode 100644 golang/go.mod delete mode 100644 golang/go.sum delete mode 100644 golang/internal/module1/summ.go delete mode 100644 golang/main.go delete mode 100644 golang/tests/helpers/helper.go delete mode 100644 golang/tests/module1/summ_test.go delete mode 100644 python/.flake8 delete mode 100644 python/.gitignore delete mode 100644 python/.vscode/launch.json delete mode 100644 python/.vscode/settings.json delete mode 100644 python/Pipfile delete mode 100644 python/Pipfile.lock delete mode 100644 python/README.md delete mode 100644 python/algorithm.code-workspace delete mode 100644 python/requirements.txt delete mode 100644 python/src/__init__.py delete mode 100644 python/src/main.py delete mode 100644 python/src/module1/hello.py delete mode 100644 python/src/module1/summ.py delete mode 100644 python/src/module2/bubble_sort.py delete mode 100644 python/tests/__init__.py delete mode 100644 python/tests/test_main.py diff --git a/C# b/C# new file mode 160000 index 0000000..8fc4767 --- /dev/null +++ b/C# @@ -0,0 +1 @@ +Subproject commit 8fc47672ca10d6a44e9644e048c44752adfb2468 diff --git a/golang/.golangci.yml b/golang/.golangci.yml deleted file mode 100644 index e6ddb63..0000000 --- a/golang/.golangci.yml +++ /dev/null @@ -1,111 +0,0 @@ -run: - tests: false - skip-files: - - \.pb\.go$ - - \.pb\.validate\.go$ - - \.pb\.gw\.go$ - -linters-settings: - dupl: - threshold: 500 - # commented linter rules should be uncommented when corresponding linter will be enabled - # funlen: - # lines: 160 - # statements: 60 - gci: - local-prefixes: github.com/golangci/golangci-lint - # revive: - # min-confidence: 0 - # gomnd: - # checks: - # - argument - # - case - # - condition - # - return - lll: - line-length: 160 - -linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - # Disabled linters should be enabled later - disable-all: true - enable: - - asciicheck - - bidichk - - bodyclose - - containedctx - # - deadcode - - decorder - - depguard - - dogsled - - dupl - - durationcheck - # - errcheck - - errchkjson - # - errname - - errorlint - - execinquery - - exportloopref - # - forbidigo - - forcetypeassert - # - funlen - - gocognit - - goconst - # - gocritic - - gocyclo - # - gofmt - # - gofumpt - - goheader - # - goimports - # - gomnd - - gomodguard - - goprintffuncname - - gosec - - gosimple - - govet - - grouper - # - ifshort - - importas - - ineffassign - - lll - # - maintidx - - makezero - # - misspell - - nakedret - - nestif - - nilerr - - nilnil - - noctx - # - nolintlint - - nosprintfhostport - - paralleltest - # - prealloc - # - predeclared - - promlinter - # - revive - - rowserrcheck - - sqlclosecheck - # - structcheck - # - stylecheck - # - tagliatelle - - tenv - - testpackage - - tparallel - - typecheck - - unconvert - - unparam - - unused - # - varcheck - - wastedassign - - whitespace - -issues: - # Excluding configuration per-path, per-linter, per-text and per-source - exclude-rules: - - path: _test\.go - linters: - - gomnd - - text: "File is not `goimports`-ed with -local github.com/golangci/golangci-lint" - linters: - - goimports diff --git a/golang/.vscode/launch.json b/golang/.vscode/launch.json deleted file mode 100644 index 9b0666d..0000000 --- a/golang/.vscode/launch.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Launch test function", - "type": "go", - "request": "launch", - "mode": "test", - "program": "${file}", - }, - { - "name": "Launch Package", - "type": "go", - "request": "launch", - "mode": "auto", - "program": "${fileDirname}", - "console": "integratedTerminal", - "args": ["sample"], - "showLog": true - } - ] -} \ No newline at end of file diff --git a/golang/.vscode/settings.json b/golang/.vscode/settings.json deleted file mode 100644 index 6e380ce..0000000 --- a/golang/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "go.lintTool": "golangci-lint", - "go.lintFlags": ["--fast"] -} diff --git a/golang/README.md b/golang/README.md deleted file mode 100644 index 24dd698..0000000 --- a/golang/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# Работа с проектом - -`vscode` при старте предложит установить рекомендованныек расширения - с ним лучше согласиться. - - -## Настройка окружения - -### Golang - -Установите `golang` для соответствующей операционной системы. - -Запустите выкачивание зависимостей - -```shell -go mod tidy -``` - -Для локальной проверки линтером следует установить линтер. Устанавливать следует из git bash терминала в случае `windows` - -```shell -# binary will be $(go env GOPATH)/bin/golangci-lint -curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.50.1 -``` - -Для запуска линтера следует выполнить следующую команду -```shell -$(go env GOPATH)/bin/golangci-lint run -vvv --out-format tab --print-resources-usage --timeout=180s --config=.golangci.yml -``` - -### Запуск тестов - -```shell -go test -count=1 -p 1 -v ./... -``` \ No newline at end of file diff --git a/golang/algorithm.code-workspace b/golang/algorithm.code-workspace deleted file mode 100644 index ec166d2..0000000 --- a/golang/algorithm.code-workspace +++ /dev/null @@ -1,18 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - ], - "settings": { - "files.exclude": { - "**/.git": true, - }, - }, - "extensions": { - "recommendations": [ - "golang.go", - "eamodio.gitlens" - ] - } -} diff --git a/golang/go.mod b/golang/go.mod deleted file mode 100644 index be4ab0b..0000000 --- a/golang/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module isuct.ru/informatics2022 - -go 1.16 - -require github.com/stretchr/testify v1.8.1 // indirect diff --git a/golang/go.sum b/golang/go.sum deleted file mode 100644 index d9320db..0000000 --- a/golang/go.sum +++ /dev/null @@ -1,17 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/golang/internal/module1/summ.go b/golang/internal/module1/summ.go deleted file mode 100644 index 79b914a..0000000 --- a/golang/internal/module1/summ.go +++ /dev/null @@ -1,25 +0,0 @@ -package module1 - -import ( - "bufio" - "fmt" - "os" - "strconv" - "strings" -) - -func Summ() { - reader := bufio.NewReader(os.Stdin) - line, err := reader.ReadString('\n') - if err != nil { - panic(err) - } - line = strings.TrimSuffix(line, "\n") - line = strings.TrimSuffix(line, "\r") - arr := strings.Split(line, " ") - - a, _ := strconv.Atoi(arr[0]) - b, _ := strconv.Atoi(arr[1]) - summ := a + b - fmt.Println(summ) -} diff --git a/golang/main.go b/golang/main.go deleted file mode 100644 index 8d32ddc..0000000 --- a/golang/main.go +++ /dev/null @@ -1,12 +0,0 @@ -package main - -import ( - "fmt" - - "isuct.ru/informatics2022/internal/module1" -) - -func main() { - fmt.Println("Hello world") - module1.Summ() -} diff --git a/golang/tests/helpers/helper.go b/golang/tests/helpers/helper.go deleted file mode 100644 index b31cfff..0000000 --- a/golang/tests/helpers/helper.go +++ /dev/null @@ -1,21 +0,0 @@ -package helpers - -import ( - "os" - "testing" -) - -func Replacer(input string, t *testing.T) (*os.File, *os.File) { - inp := []byte(input) - - r, w, err := os.Pipe() - if err != nil { - t.Fatal(err) - } - - _, err = w.Write(inp) - if err != nil { - t.Fatal(err) - } - return r, w -} diff --git a/golang/tests/module1/summ_test.go b/golang/tests/module1/summ_test.go deleted file mode 100644 index 06d1810..0000000 --- a/golang/tests/module1/summ_test.go +++ /dev/null @@ -1,48 +0,0 @@ -package module1_test - -import ( - "io" - "os" - "testing" - - "github.com/stretchr/testify/assert" - "isuct.ru/informatics2022/internal/module1" - "isuct.ru/informatics2022/tests/helpers" -) - -func TestSumm(t *testing.T) { - assert := assert.New(t) - - defer func(v *os.File) { os.Stdin = v }(os.Stdin) - defer func(v *os.File) { os.Stdout = v }(os.Stdout) - t.Run("Case: 10 12", func(t *testing.T) { - r, w := helpers.Replacer("10 12\n", t) - os.Stdin = r - os.Stdout = w - - module1.Summ() - w.Close() - out, _ := io.ReadAll(r) - assert.Equal("22\n", string(out)) - }) - t.Run("Case: 1 1", func(t *testing.T) { - r, w := helpers.Replacer("1 1\n", t) - os.Stdin = r - os.Stdout = w - - module1.Summ() - w.Close() - out, _ := io.ReadAll(r) - assert.Equal("2\n", string(out)) - }) - t.Run("Case: 10000 10000", func(t *testing.T) { - r, w := helpers.Replacer("10000 10000\n", t) - os.Stdin = r - os.Stdout = w - - module1.Summ() - w.Close() - out, _ := io.ReadAll(r) - assert.Equal("20000\n", string(out)) - }) -} diff --git a/python/.flake8 b/python/.flake8 deleted file mode 100644 index 4b473c6..0000000 --- a/python/.flake8 +++ /dev/null @@ -1,3 +0,0 @@ -[flake8] -ignore = E722 -max-line-length = 128 diff --git a/python/.gitignore b/python/.gitignore deleted file mode 100644 index c792544..0000000 --- a/python/.gitignore +++ /dev/null @@ -1,206 +0,0 @@ -# Prerequisites -*.d - -# Object files -*.o -*.ko -*.obj -*.elf - -# Linker output -*.ilk -*.map -*.exp - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -*.su -*.idb -*.pdb - -# Kernel Module Compile Results -*.mod* -*.cmd -.tmp_versions/ -modules.order -Module.symvers -Mkfile.old -dkms.conf -*.out - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintainted in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ \ No newline at end of file diff --git a/python/.vscode/launch.json b/python/.vscode/launch.json deleted file mode 100644 index 0a5c809..0000000 --- a/python/.vscode/launch.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Python: Текущий файл", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal" - } - ] -} diff --git a/python/.vscode/settings.json b/python/.vscode/settings.json deleted file mode 100644 index 2597cbc..0000000 --- a/python/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "python.linting.pylintEnabled": false, - "python.linting.mypyEnabled": false, - "python.linting.enabled": true, - "python.linting.lintOnSave": true, - "python.linting.flake8Enabled": true, -} diff --git a/python/Pipfile b/python/Pipfile deleted file mode 100644 index 0f6a6f3..0000000 --- a/python/Pipfile +++ /dev/null @@ -1,19 +0,0 @@ -[[source]] -url = "https://pypi.org/simple" -verify_ssl = true -name = "pypi" - -[packages] - -[dev-packages] -mypy = "*" -flake8 = "*" - -[requires] -python_version = "3.9" - -[scripts] -start = "python ./src/main.py" -test = "python -m unittest" -lint = "flake8 ./" -lintMyPy = "mypy ./" diff --git a/python/Pipfile.lock b/python/Pipfile.lock deleted file mode 100644 index f3145ef..0000000 --- a/python/Pipfile.lock +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "4894b22932cc8c76e138c68198ce54cb057a7f4b391476c15e3e05d193ceb7f7" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.9" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": {}, - "develop": { - "flake8": { - "hashes": [ - "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db", - "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248" - ], - "index": "pypi", - "version": "==5.0.4" - }, - "mccabe": { - "hashes": [ - "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", - "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" - ], - "markers": "python_version >= '3.6'", - "version": "==0.7.0" - }, - "mypy": { - "hashes": [ - "sha256:1021c241e8b6e1ca5a47e4d52601274ac078a89845cfde66c6d5f769819ffa1d", - "sha256:14d53cdd4cf93765aa747a7399f0961a365bcddf7855d9cef6306fa41de01c24", - "sha256:175f292f649a3af7082fe36620369ffc4661a71005aa9f8297ea473df5772046", - "sha256:26ae64555d480ad4b32a267d10cab7aec92ff44de35a7cd95b2b7cb8e64ebe3e", - "sha256:41fd1cf9bc0e1c19b9af13a6580ccb66c381a5ee2cf63ee5ebab747a4badeba3", - "sha256:5085e6f442003fa915aeb0a46d4da58128da69325d8213b4b35cc7054090aed5", - "sha256:58f27ebafe726a8e5ccb58d896451dd9a662a511a3188ff6a8a6a919142ecc20", - "sha256:6389af3e204975d6658de4fb8ac16f58c14e1bacc6142fee86d1b5b26aa52bda", - "sha256:724d36be56444f569c20a629d1d4ee0cb0ad666078d59bb84f8f887952511ca1", - "sha256:75838c649290d83a2b83a88288c1eb60fe7a05b36d46cbea9d22efc790002146", - "sha256:7b35ce03a289480d6544aac85fa3674f493f323d80ea7226410ed065cd46f206", - "sha256:85f7a343542dc8b1ed0a888cdd34dca56462654ef23aa673907305b260b3d746", - "sha256:86ebe67adf4d021b28c3f547da6aa2cce660b57f0432617af2cca932d4d378a6", - "sha256:8ee8c2472e96beb1045e9081de8e92f295b89ac10c4109afdf3a23ad6e644f3e", - "sha256:91781eff1f3f2607519c8b0e8518aad8498af1419e8442d5d0afb108059881fc", - "sha256:a692a8e7d07abe5f4b2dd32d731812a0175626a90a223d4b58f10f458747dd8a", - "sha256:a705a93670c8b74769496280d2fe6cd59961506c64f329bb179970ff1d24f9f8", - "sha256:c6e564f035d25c99fd2b863e13049744d96bd1947e3d3d2f16f5828864506763", - "sha256:cebca7fd333f90b61b3ef7f217ff75ce2e287482206ef4a8b18f32b49927b1a2", - "sha256:d6af646bd46f10d53834a8e8983e130e47d8ab2d4b7a97363e35b24e1d588947", - "sha256:e7aeaa763c7ab86d5b66ff27f68493d672e44c8099af636d433a7f3fa5596d40", - "sha256:eaa97b9ddd1dd9901a22a879491dbb951b5dec75c3b90032e2baa7336777363b", - "sha256:eb7a068e503be3543c4bd329c994103874fa543c1727ba5288393c21d912d795", - "sha256:f793e3dd95e166b66d50e7b63e69e58e88643d80a3dcc3bcd81368e0478b089c" - ], - "index": "pypi", - "version": "==0.982" - }, - "mypy-extensions": { - "hashes": [ - "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", - "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8" - ], - "version": "==0.4.3" - }, - "pycodestyle": { - "hashes": [ - "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785", - "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b" - ], - "markers": "python_version >= '3.6'", - "version": "==2.9.1" - }, - "pyflakes": { - "hashes": [ - "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2", - "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3" - ], - "markers": "python_version >= '3.6'", - "version": "==2.5.0" - }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" - ], - "markers": "python_version >= '3.7'", - "version": "==4.4.0" - } - } -} diff --git a/python/README.md b/python/README.md deleted file mode 100644 index a394814..0000000 --- a/python/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Работа с проектом - -`vscode` при старте предложит установить рекомендованныек расширения - с ним лучше согласиться. - - -## Настройка окружения - -### Python - -Установите `python` для соответствующей операционной системы. - -**ВАЖНО** - -При установке в windows - укажите галочку - добавить python в переменную окружения `PATH` - -### Pipenv - -Мы используем виртуальное окружение `pipenv`, для его установки используйте следующую команду: - -```shell -pip install pipenv -``` -Установку требуется сделать только 1 раз, активацию - каждый раз когда вы перезапускаете терминал. - - -Для активации виртуального окружения следует выполнить следующую команду, при этом выполнять ее нужно в каталоге текущего проекта `python` (рядом с текущим `README.md` файлом и содержит `Pipfile`) - -``` -pipenv shell -``` - -После этого необходимо установить зависимости, указанные в `pipenv` файле - - - -После установки pipenv при использовании `vscode` следует выбрать версию интерпретатора, привязанный к проекту. Для этого можно выполнить следующую последовательность действий. Настраивать требуется только 1 раз при настройке виртуального окружения. - -- Нажать комбинацию клавиш `ctrl-shift-p` -- Начать писать `Reload window` -- Начать писать `Python select interpreter` -- Выбрать на уровне рабочей области -- Найти свое окружение, скорее всего в его имени в скобках будет указано `(python-"НАБОР_СИМВОЛОВ")` - -Ваше рабочее окружение настроено и можете его иcпользовать. - -### Доступные команды - -Команды проверок, запускаемые в `github actions` можно также запустить локально выполнением одной из следующих команд - -```shell -pipenv run test -pipenv run lint -pipenv run lintMyPy -``` \ No newline at end of file diff --git a/python/algorithm.code-workspace b/python/algorithm.code-workspace deleted file mode 100644 index 9c3d46e..0000000 --- a/python/algorithm.code-workspace +++ /dev/null @@ -1,19 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - ], - "settings": { - "files.exclude": { - "**/.git": true, - }, - "editor.tabSize": 4, - }, - "extensions": { - "recommendations": [ - "ms-python.python", - "eamodio.gitlens" - ] - } -} diff --git a/python/requirements.txt b/python/requirements.txt deleted file mode 100644 index 35e3f5c93487906e74f1a63511caba4138a95f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmZuv+irqT5S(X|ehNlVQ+?>S7z8v_j-DV%wIAO)v&-?47_#y(mz^E_|0{9EfF38b zsPV<8z!drY_X87DL_1E85`iPujI0G`2{CG_J3a}S8zLW}J0c|xXs|NIlBny2woD-J z;g02ox>m|xT#=Ep#Wy`FGBZTWd?BKpIUPSat_kE+)NRR5iGFT-hqun*|KIISALO(LqqV9BO?Nf_2J=OP>O3x{ zlar?xqhqGy*q47TZSpTMa7!?T@(R_B?w+s%_1?B)YA>nPO~afS`%}`?uCDf5ls;O5 XJvQXNZ%TZPr~a}3PJHsq4fR|%QM+D> diff --git a/python/src/__init__.py b/python/src/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/src/main.py b/python/src/main.py deleted file mode 100644 index e37a77c..0000000 --- a/python/src/main.py +++ /dev/null @@ -1,7 +0,0 @@ -def summ(a: int, b: int) -> int: - return a + b - - -if __name__ == "__main__": - print("Hello world") - print(summ(3, 4)) diff --git a/python/src/module1/hello.py b/python/src/module1/hello.py deleted file mode 100644 index bdb9c05..0000000 --- a/python/src/module1/hello.py +++ /dev/null @@ -1,22 +0,0 @@ -""" ->>> import io, sys ->>> sys.stdin = io.StringIO(chr(10).join(['Vasya'])) ->>> hello() -Hello, Vasya! ->>> sys.stdin = io.StringIO(chr(10).join(['Petya'])) ->>> hello() -Hello, Petya! ->>> sys.stdin = io.StringIO(chr(10).join(['Olya'])) ->>> hello() -Hello, Olya! -""" - - -def hello(): - name = input() - print(f'Hello, {name}!') - - -if __name__ == "__main__": - import doctest - doctest.testmod(verbose=True) diff --git a/python/src/module1/summ.py b/python/src/module1/summ.py deleted file mode 100644 index cd5e905..0000000 --- a/python/src/module1/summ.py +++ /dev/null @@ -1,22 +0,0 @@ -""" ->>> import io, sys ->>> sys.stdin = io.StringIO(chr(10).join(['10 12'])) # input ->>> summ() -22 ->>> sys.stdin = io.StringIO(chr(10).join(['1 1'])) # input ->>> summ() -2 ->>> sys.stdin = io.StringIO(chr(10).join(['10000 10000'])) # input ->>> summ() -20000 -""" - - -def summ(): - a, b = map(int, input().split(' ')) - print(a + b) - - -if __name__ == "__main__": - import doctest - doctest.testmod(verbose=True) diff --git a/python/src/module2/bubble_sort.py b/python/src/module2/bubble_sort.py deleted file mode 100644 index ac28b7e..0000000 --- a/python/src/module2/bubble_sort.py +++ /dev/null @@ -1,36 +0,0 @@ -""" ->>> import io, sys ->>> sys.stdin = io.StringIO(chr(10).join(['4','4 3 2 1'])) ->>> bubble_sort() -3 4 2 1 -3 2 4 1 -3 2 1 4 -2 3 1 4 -2 1 3 4 -1 2 3 4 -""" - - -def bubble_sort(): - n = input() - inp_string = input() - str_lst = inp_string.split(" ") - res = [] - for item in str_lst: - res.append(int(item)) - - n = len(res) - num_swap = 0 - for i in range(0, n - 1): - for j in range(0, n - 1 - i): - if res[j] > res[j + 1]: - res[j], res[j + 1] = res[j + 1], res[j] - num_swap += 1 - print(" ".join(map(str, res))) - if num_swap == 0: - print("0") - - -if __name__ == "__main__": - import doctest - doctest.testmod(verbose=True) diff --git a/python/tests/__init__.py b/python/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/python/tests/test_main.py b/python/tests/test_main.py deleted file mode 100644 index 0280a2e..0000000 --- a/python/tests/test_main.py +++ /dev/null @@ -1,37 +0,0 @@ -import unittest -from src import main - - -class SummTests(unittest.TestCase): - - def test_positive(self): - res = main.summ(2, 3) - self.assertEqual(5, res) - - def test_zero(self): - res = main.summ(0, 0) - self.assertEqual(0, res) - - def test_one_negative(self): - res = main.summ(-2, 3) - self.assertEqual(1, res) - - def test_both_negative(self): - res = main.summ(-2, -4) - self.assertEqual(-6, res) - - def test_one_negative_zero_res(self): - res = main.summ(-2, 2) - self.assertEqual(0, res) - - def test_one_negative_and_text(self): - try: - main.summ(-2, "2") - except: - self.assertTrue(True) - return - self.fail() - - -if __name__ == '__main__': - unittest.main() From daaa2ee2ac0fd02811f29cc55305faeb3f598bdf Mon Sep 17 00:00:00 2001 From: Fuflick Date: Mon, 27 Feb 2023 22:48:38 +0300 Subject: [PATCH 02/28] fix some troubles --- .gitignore | 206 ++++++++++++++++++++++ .vscode/settings.json | 10 ++ C# | 1 - CourseApp.Tests/CourseApp.Tests.csproj | 30 ++++ CourseApp.Tests/DemoTest.cs | 14 ++ CourseApp.Tests/Module1/AplusBTest.cs | 41 +++++ CourseApp.Tests/Module2/BubbleSortTest.cs | 51 ++++++ CourseApp.sln | 31 ++++ CourseApp/.vscode/launch.json | 25 +++ CourseApp/.vscode/tasks.json | 42 +++++ CourseApp/CourseApp.csproj | 23 +++ CourseApp/Module1/AplusB.cs | 16 ++ CourseApp/Module2/BubbleSort.cs | 37 ++++ CourseApp/Program.cs | 15 ++ _stylecop/stylecop.json | 12 ++ _stylecop/stylecop.ruleset | 15 ++ courseworkspace.code-workspace | 15 ++ 17 files changed, 583 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 .vscode/settings.json delete mode 160000 C# create mode 100644 CourseApp.Tests/CourseApp.Tests.csproj create mode 100644 CourseApp.Tests/DemoTest.cs create mode 100644 CourseApp.Tests/Module1/AplusBTest.cs create mode 100644 CourseApp.Tests/Module2/BubbleSortTest.cs create mode 100644 CourseApp.sln create mode 100644 CourseApp/.vscode/launch.json create mode 100644 CourseApp/.vscode/tasks.json create mode 100644 CourseApp/CourseApp.csproj create mode 100644 CourseApp/Module1/AplusB.cs create mode 100644 CourseApp/Module2/BubbleSort.cs create mode 100644 CourseApp/Program.cs create mode 100644 _stylecop/stylecop.json create mode 100644 _stylecop/stylecop.ruleset create mode 100644 courseworkspace.code-workspace diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..12f59b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,206 @@ +# Download this file using PowerShell v3 under Windows with the following comand: +# Invoke-WebRequest https://gist.githubusercontent.com/kmorcinek/2710267/raw/ -OutFile .gitignore +# or wget: +# wget --no-check-certificate http://gist.githubusercontent.com/kmorcinek/2710267/raw/.gitignore + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# OS generated files # +.DS_Store* +Icon? + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +*.Cache +ClientBin/ +# [Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings +modulesbin/ +tempbin/ + +# EPiServer Site file (VPP) +AppData/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# vim +*.txt~ +*.swp +*.swo + +# svn +.svn + +# Remainings from resolvings conflicts in Source Control +*.orig + +# SQL Server files +**/App_Data/*.mdf +**/App_Data/*.ldf +**/App_Data/*.sdf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# SASS Compiler cache +.sass-cache + +# Visual Studio 2014 CTP +**/*.sln.ide + +# Visual Studio temp something +.vs/ + +# VS 2015+ +*.vc.vc.opendb +*.vc.db + +# Rider +.idea/ + +**/node_modules/* + +# Added by Jskonst +# .vscode/ +Properties/ + +##### +# End of core ignore list, below put you custom 'per project' settings (patterns or path) +##### \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bf78e73 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/CVS": true, + "**/.DS_Store": true, + "CourseApp": true, + "CourseApp.test":true, + } +} \ No newline at end of file diff --git a/C# b/C# deleted file mode 160000 index 8fc4767..0000000 --- a/C# +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8fc47672ca10d6a44e9644e048c44752adfb2468 diff --git a/CourseApp.Tests/CourseApp.Tests.csproj b/CourseApp.Tests/CourseApp.Tests.csproj new file mode 100644 index 0000000..ae46394 --- /dev/null +++ b/CourseApp.Tests/CourseApp.Tests.csproj @@ -0,0 +1,30 @@ + + + + netcoreapp2.1 + True + 1573,1591,1701;1702;1705 + false + + + + + + + + + + + + + + + ../_stylecop/stylecop.ruleset + true + + + + + + + diff --git a/CourseApp.Tests/DemoTest.cs b/CourseApp.Tests/DemoTest.cs new file mode 100644 index 0000000..fdc46f5 --- /dev/null +++ b/CourseApp.Tests/DemoTest.cs @@ -0,0 +1,14 @@ +using System; +using Xunit; + +namespace CourseApp.Tests +{ + public class DemoTest + { + [Fact] + public void Test1() + { + Assert.True(true); + } + } +} diff --git a/CourseApp.Tests/Module1/AplusBTest.cs b/CourseApp.Tests/Module1/AplusBTest.cs new file mode 100644 index 0000000..6242786 --- /dev/null +++ b/CourseApp.Tests/Module1/AplusBTest.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using Xunit; +using CourseApp.Module1; + +namespace CourseApp.Tests.Module1 +{ + [Collection("Sequential")] + public class AplusBTest : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData("10 12", "22")] + [InlineData("1 1", "2")] + [InlineData("10000 10000", "20000")] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + AplusB.Calculate(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} diff --git a/CourseApp.Tests/Module2/BubbleSortTest.cs b/CourseApp.Tests/Module2/BubbleSortTest.cs new file mode 100644 index 0000000..c57df84 --- /dev/null +++ b/CourseApp.Tests/Module2/BubbleSortTest.cs @@ -0,0 +1,51 @@ +namespace CourseApp.Tests.Module2 +{ + using System; + using System.Collections.Generic; + using System.IO; + using CourseApp.Module2; + using Xunit; + + [Collection("Sequential")] + public class BubbleSortTest : IDisposable + { + private const string Inp1 = @"4 +4 3 2 1"; + + private const string Out1 = @"3 4 2 1 +3 2 4 1 +3 2 1 4 +2 3 1 4 +2 1 3 4 +1 2 3 4"; + + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData(Inp1, Out1)] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + BubbleSort.BubbleSortMethod(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + var result = string.Join(Environment.NewLine, output); + + Assert.Equal($"{expected}", result); + } + } +} diff --git a/CourseApp.sln b/CourseApp.sln new file mode 100644 index 0000000..4c8426c --- /dev/null +++ b/CourseApp.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32014.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp", "CourseApp\CourseApp.csproj", "{D1856C82-5A61-4A61-A2CE-BDAF53530918}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CourseApp.Tests", "CourseApp.Tests\CourseApp.Tests.csproj", "{34D7AE24-58E8-48D5-A59E-F18CC60525F1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1856C82-5A61-4A61-A2CE-BDAF53530918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1856C82-5A61-4A61-A2CE-BDAF53530918}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1856C82-5A61-4A61-A2CE-BDAF53530918}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1856C82-5A61-4A61-A2CE-BDAF53530918}.Release|Any CPU.Build.0 = Release|Any CPU + {34D7AE24-58E8-48D5-A59E-F18CC60525F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34D7AE24-58E8-48D5-A59E-F18CC60525F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34D7AE24-58E8-48D5-A59E-F18CC60525F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34D7AE24-58E8-48D5-A59E-F18CC60525F1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {064E603C-674E-4DB9-A061-4B08C0ACD98C} + EndGlobalSection +EndGlobal diff --git a/CourseApp/.vscode/launch.json b/CourseApp/.vscode/launch.json new file mode 100644 index 0000000..208ea3a --- /dev/null +++ b/CourseApp/.vscode/launch.json @@ -0,0 +1,25 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + "program": "${workspaceFolder}/bin/Debug/netcoreapp2.1/CourseApp.dll", + "args": [], + "cwd": "${workspaceFolder}", + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] +} \ No newline at end of file diff --git a/CourseApp/.vscode/tasks.json b/CourseApp/.vscode/tasks.json new file mode 100644 index 0000000..f8c71cd --- /dev/null +++ b/CourseApp/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/CourseApp.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/CourseApp.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/CourseApp.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj new file mode 100644 index 0000000..9551450 --- /dev/null +++ b/CourseApp/CourseApp.csproj @@ -0,0 +1,23 @@ + + + + Exe + netcoreapp2.1 + True + 1573,1591,1701;1702;1705; + + + + + + + + ../_stylecop/stylecop.ruleset + true + + + + + + + diff --git a/CourseApp/Module1/AplusB.cs b/CourseApp/Module1/AplusB.cs new file mode 100644 index 0000000..9a15b45 --- /dev/null +++ b/CourseApp/Module1/AplusB.cs @@ -0,0 +1,16 @@ +using System; + +namespace CourseApp.Module1 +{ + public class AplusB + { + public static void Calculate() + { + string s = Console.ReadLine(); + string[] values = s.Split(' '); + int a = int.Parse(values[0]); + int b = int.Parse(values[1]); + Console.WriteLine($"{a + b}"); + } + } +} diff --git a/CourseApp/Module2/BubbleSort.cs b/CourseApp/Module2/BubbleSort.cs new file mode 100644 index 0000000..4b88df0 --- /dev/null +++ b/CourseApp/Module2/BubbleSort.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp.Module2 +{ + public class BubbleSort + { + public static void BubbleSortMethod() + { + int n = int.Parse(Console.ReadLine()); + string s = Console.ReadLine(); + string[] sValues = s.Split(' '); + int[] arr = new int[n]; + for (int i = 0; i < n; i++) + { + arr[i] = int.Parse(sValues[i]); + } + + for (int i = 0; i < arr.Length - 1; i++) + { + for (int j = 0; j < arr.Length - i - 1; j++) + { + if (arr[j] > arr[j + 1]) + { + // int temp = arr[j]; + // arr[j] = arr[j + 1]; + // arr[j+1] = temp; + (arr[j], arr[j + 1]) = (arr[j + 1], arr[j]); + string result = string.Join(" ", arr); + Console.WriteLine(result); + } + } + } + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs new file mode 100644 index 0000000..cafa825 --- /dev/null +++ b/CourseApp/Program.cs @@ -0,0 +1,15 @@ +using System; +using CourseApp.Module2; + +namespace CourseApp +{ + public class Program + { + public static void Main(string[] args) + { + BubbleSort.BubbleSortMethod(); + + Console.WriteLine("Hello World"); + } + } +} diff --git a/_stylecop/stylecop.json b/_stylecop/stylecop.json new file mode 100644 index 0000000..4a96e8f --- /dev/null +++ b/_stylecop/stylecop.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": { + "documentationRules": { + "documentExposedElements": false, + "documentInterfaces": false, + "companyName": "Test Company", + "copyrightText": "This source code is Copyright © {companyName} and MAY NOT be copied, reproduced,\npublished, distributed or transmitted to or stored in any manner without prior\nwritten consent from {companyName} (www.yourcompany.com).", + "xmlHeader":false + } + } +} \ No newline at end of file diff --git a/_stylecop/stylecop.ruleset b/_stylecop/stylecop.ruleset new file mode 100644 index 0000000..13ae1f9 --- /dev/null +++ b/_stylecop/stylecop.ruleset @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/courseworkspace.code-workspace b/courseworkspace.code-workspace new file mode 100644 index 0000000..0c34b36 --- /dev/null +++ b/courseworkspace.code-workspace @@ -0,0 +1,15 @@ +{ + "folders": [ + { + "path": "CourseApp" + }, + { + "path": "CourseApp.Tests" + }, + { + "name": "Configs (Root)", + "path": "." + } + ], + "settings": {} +} \ No newline at end of file From 2cf05e573cb98ed4af8c2d27243984fe96b9dfba Mon Sep 17 00:00:00 2001 From: Fuflick Date: Thu, 2 Mar 2023 01:42:36 +0300 Subject: [PATCH 03/28] Tests for first task from Yandex Contest --- CourseApp.Tests/DemoTest.cs | 15 ++++++++++++++- CourseApp/Program.cs | 13 +++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CourseApp.Tests/DemoTest.cs b/CourseApp.Tests/DemoTest.cs index fdc46f5..b7533d0 100644 --- a/CourseApp.Tests/DemoTest.cs +++ b/CourseApp.Tests/DemoTest.cs @@ -1,5 +1,6 @@ using System; using Xunit; +using CourseApp; namespace CourseApp.Tests { @@ -8,7 +9,19 @@ public class DemoTest [Fact] public void Test1() { - Assert.True(true); + Assert.Equal("22", CourseApp.Program.Plus(10, 12).ToString()); + } + + [Fact] + public void Test2() + { + Assert.Equal("2", CourseApp.Program.Plus(1, 1).ToString()); + } + + [Fact] + public void Test3() + { + Assert.Equal("20000", CourseApp.Program.Plus(10000, 10000).ToString()); } } } diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index cafa825..252a760 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,9 +7,18 @@ public class Program { public static void Main(string[] args) { - BubbleSort.BubbleSortMethod(); + // BubbleSort.BubbleSortMethod(); + Console.WriteLine(Plus(10, 12)); + int a = Convert.ToInt32(Console.ReadLine()); + Console.WriteLine(a.GetType()); + } + + public static int Plus(int a, int b) + { + /*int a = int.Parse(Console.ReadLine()); + int b = int.Parse(Console.ReadLine());*/ - Console.WriteLine("Hello World"); + return a + b; } } } From aaba1e396cc27632e4b19b3bc6a5b60f7da5d5b0 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Tue, 7 Mar 2023 19:08:33 +0300 Subject: [PATCH 04/28] Add QuickSort method --- CourseApp/QuickSort.cs | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 CourseApp/QuickSort.cs diff --git a/CourseApp/QuickSort.cs b/CourseApp/QuickSort.cs new file mode 100644 index 0000000..e1890d5 --- /dev/null +++ b/CourseApp/QuickSort.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +namespace CourseApp +{ + public class QuickSort + { + private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; + + public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // поиск опроного члена + { + int pivot = minIndex - 1; + int temp; + for ( int i = minIndex; i < maxIndex; i++) + { + if (numbers[i] < numbers[maxIndex]) + { + pivot++; + temp = numbers[pivot]; + numbers[pivot] = numbers[i]; + numbers[i] = temp; + } + } + + pivot++; + temp = numbers[pivot]; + numbers[pivot] = numbers[maxIndex]; + numbers[maxIndex] = temp; + + return pivot; + } + + public int[] Sort(int[] nmbers, int minINdex, int maxIndex) + { + if (minINdex >= maxIndex) + { + return numbers; + } + + int pivot = FindPivot(numbers, minINdex, maxIndex); + + Sort(numbers, minINdex, pivot - 1); + Sort(nmbers, pivot + 1, maxIndex); + + return numbers; + } // сама сортировка + } +} From 8a7d85ff0fc41207b6c5444fd07d90d5d3427bd1 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Tue, 7 Mar 2023 19:10:21 +0300 Subject: [PATCH 05/28] Fix some troubles --- CourseApp/QuickSort.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CourseApp/QuickSort.cs b/CourseApp/QuickSort.cs index e1890d5..efea992 100644 --- a/CourseApp/QuickSort.cs +++ b/CourseApp/QuickSort.cs @@ -7,8 +7,7 @@ namespace CourseApp { public class QuickSort { - private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; - + // private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // поиск опроного члена { int pivot = minIndex - 1; @@ -32,7 +31,7 @@ public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // пои return pivot; } - public int[] Sort(int[] nmbers, int minINdex, int maxIndex) + public int[] Sort(int[] numbers, int minINdex, int maxIndex) { if (minINdex >= maxIndex) { From 0b83744ad16d9e78874db470f40f485b848cbac8 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Tue, 7 Mar 2023 19:21:21 +0300 Subject: [PATCH 06/28] Fix some troubles and check QuickSort.Sort method --- CourseApp/Contest.cs | 17 +++++++++++++++++ CourseApp/Program.cs | 19 +++++++------------ CourseApp/QuickSort.cs | 6 +++--- 3 files changed, 27 insertions(+), 15 deletions(-) create mode 100644 CourseApp/Contest.cs diff --git a/CourseApp/Contest.cs b/CourseApp/Contest.cs new file mode 100644 index 0000000..78426da --- /dev/null +++ b/CourseApp/Contest.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public class Contest + { + public static int Plus(int a, int b) + { + /*int a = int.Parse(Console.ReadLine()); + int b = int.Parse(Console.ReadLine());*/ + + return a + b; + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 252a760..dc14f9c 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,18 +7,13 @@ public class Program { public static void Main(string[] args) { - // BubbleSort.BubbleSortMethod(); - Console.WriteLine(Plus(10, 12)); - int a = Convert.ToInt32(Console.ReadLine()); - Console.WriteLine(a.GetType()); - } - - public static int Plus(int a, int b) - { - /*int a = int.Parse(Console.ReadLine()); - int b = int.Parse(Console.ReadLine());*/ - - return a + b; + int[] numbers = { 1, 2, 3, 4, -213, 12, -1, 5, 12 }; + var sort = new QuickSort(); + sort.Sort(numbers, 0, numbers.Length - 1); + foreach (int i in numbers) + { + Console.WriteLine(i); + } } } } diff --git a/CourseApp/QuickSort.cs b/CourseApp/QuickSort.cs index efea992..38ee29f 100644 --- a/CourseApp/QuickSort.cs +++ b/CourseApp/QuickSort.cs @@ -31,7 +31,7 @@ public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // пои return pivot; } - public int[] Sort(int[] numbers, int minINdex, int maxIndex) + public int[] Sort(int[] numbers, int minINdex, int maxIndex) // сама сортировка { if (minINdex >= maxIndex) { @@ -41,9 +41,9 @@ public int[] Sort(int[] numbers, int minINdex, int maxIndex) int pivot = FindPivot(numbers, minINdex, maxIndex); Sort(numbers, minINdex, pivot - 1); - Sort(nmbers, pivot + 1, maxIndex); + Sort(numbers, pivot + 1, maxIndex); return numbers; - } // сама сортировка + } } } From b53de3ba09081048d0ce7b006dfa7b017371eb29 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Thu, 9 Mar 2023 11:14:51 +0300 Subject: [PATCH 07/28] Test of my MergeSort alg --- CourseApp/MergeSort.cs | 73 ++++++++++++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 6 ++-- 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 CourseApp/MergeSort.cs diff --git a/CourseApp/MergeSort.cs b/CourseApp/MergeSort.cs new file mode 100644 index 0000000..c71a34b --- /dev/null +++ b/CourseApp/MergeSort.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public class MergeSort + { + public static void Merge(int[] targetArray, int[] arr1, int[] arr2) + { + int arr1MinIndex = 0; + int arr2MinIndex = 0; + + int targertArrayMinIndex = 0; + + while (arr1MinIndex < arr1.Length && arr2MinIndex < arr2.Length) + { + if (arr1[arr1MinIndex] <= arr2[arr2MinIndex]) + { + targetArray[targertArrayMinIndex] = arr1[arr1MinIndex]; + arr1MinIndex++; + } + else + { + targetArray[targertArrayMinIndex] = arr1[arr2MinIndex]; + arr2MinIndex++; + } + + targertArrayMinIndex++; + } + + while (arr1MinIndex > arr1.Length) + { + targetArray[targertArrayMinIndex] = arr1[arr1MinIndex]; + arr1MinIndex++; + targertArrayMinIndex++; + } + + while (arr2MinIndex > arr2.Length) + { + targetArray[targertArrayMinIndex] = arr2[arr2MinIndex]; + arr1MinIndex++; + targertArrayMinIndex++; + } + } + + public void Sort(int[] array) + { + int mid = array.Length / 2; + int[] left = new int[mid]; + int[] right = new int[array.Length - mid]; + + if (array.Length == 1) + { + return; + } + + for (int i = 0; i < mid; i++) + { + left[i] = array[i]; + } + + for (int i = mid; i < array.Length; i++) + { + right[i - mid] = array[i]; + } + + Sort(left); + Sort(right); + Merge(array, left, right); + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index dc14f9c..ed527b4 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,9 +7,9 @@ public class Program { public static void Main(string[] args) { - int[] numbers = { 1, 2, 3, 4, -213, 12, -1, 5, 12 }; - var sort = new QuickSort(); - sort.Sort(numbers, 0, numbers.Length - 1); + int[] numbers = { 1, 4, 7, 22, 5 }; + var mergeSort = new MergeSort(); + mergeSort.Sort(numbers); foreach (int i in numbers) { Console.WriteLine(i); From aac17a00f5d417f2e0726edc8265542be441bca6 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Tue, 14 Mar 2023 18:25:55 +0300 Subject: [PATCH 08/28] Add Sort process task and Pair sort (1 and 2 tasks from Module 2 Yandex Contest) --- CourseApp.Tests/DemoTest.cs | 13 ------- CourseApp/BubleSort.cs | 40 ++++++++++++++++++++ CourseApp/Contest.cs | 17 --------- CourseApp/Inversion.cs | 57 +++++++++++++++++++++++++++++ CourseApp/MergeSort.cs | 73 ------------------------------------- CourseApp/MergesortTest.cs | 59 ++++++++++++++++++++++++++++++ CourseApp/Pairs.cs | 54 +++++++++++++++++++++++++++ CourseApp/Program.cs | 18 ++++++--- 8 files changed, 222 insertions(+), 109 deletions(-) create mode 100644 CourseApp/BubleSort.cs delete mode 100644 CourseApp/Contest.cs create mode 100644 CourseApp/Inversion.cs delete mode 100644 CourseApp/MergeSort.cs create mode 100644 CourseApp/MergesortTest.cs create mode 100644 CourseApp/Pairs.cs diff --git a/CourseApp.Tests/DemoTest.cs b/CourseApp.Tests/DemoTest.cs index b7533d0..71e4289 100644 --- a/CourseApp.Tests/DemoTest.cs +++ b/CourseApp.Tests/DemoTest.cs @@ -9,19 +9,6 @@ public class DemoTest [Fact] public void Test1() { - Assert.Equal("22", CourseApp.Program.Plus(10, 12).ToString()); - } - - [Fact] - public void Test2() - { - Assert.Equal("2", CourseApp.Program.Plus(1, 1).ToString()); - } - - [Fact] - public void Test3() - { - Assert.Equal("20000", CourseApp.Program.Plus(10000, 10000).ToString()); } } } diff --git a/CourseApp/BubleSort.cs b/CourseApp/BubleSort.cs new file mode 100644 index 0000000..ea6913d --- /dev/null +++ b/CourseApp/BubleSort.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public class BubleSort + { + public static void SortProc() + { + var k = 0; + var massLen = Convert.ToInt32(Console.ReadLine()); + var mass = Console.ReadLine().Split(" "); + foreach (string i in mass) + { + for (int index = 0; index < massLen - 1; index++) + { + if (Convert.ToInt32(mass[index]) > Convert.ToInt32(mass[index + 1])) + { + var temp = mass[index]; + mass[index] = mass[index + 1]; + mass[index + 1] = temp; + foreach (string elem in mass) + { + Console.Write(elem + " "); + k++; + } + + Console.WriteLine(); + } + } + } + + if (k == 0) + { + Console.WriteLine(0); + } + } + } +} diff --git a/CourseApp/Contest.cs b/CourseApp/Contest.cs deleted file mode 100644 index 78426da..0000000 --- a/CourseApp/Contest.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace CourseApp -{ - public class Contest - { - public static int Plus(int a, int b) - { - /*int a = int.Parse(Console.ReadLine()); - int b = int.Parse(Console.ReadLine());*/ - - return a + b; - } - } -} diff --git a/CourseApp/Inversion.cs b/CourseApp/Inversion.cs new file mode 100644 index 0000000..e25e9ab --- /dev/null +++ b/CourseApp/Inversion.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + internal class Inversion + { + public static int[] Merge(int[] arr1, int[] arr2) + { + int i = 0, j = 0, k = 0; + var resultArray = new int[arr1.Length + arr2.Length]; + while (k < resultArray.Length) + { + if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + { + resultArray[k] = arr1[i]; + i++; + } + else + { + resultArray[k] = arr2[j]; + j++; + } + + k++; + } + + return resultArray; + } + + public static int[] MergeSort(int[] resultArray) + { + if (resultArray.Length == 1) + { + return resultArray; + } + + var mid = resultArray.Length / 2; + var left = new int[mid]; + for (int i = 0; i < mid; i++) + { + left[i] = resultArray[i]; + } + + var rigth = new int[resultArray.Length - mid]; + for (int i = 0; i < rigth.Length; i++) + { + rigth[i] = resultArray[i + mid]; + } + + left = MergeSort(left); + rigth = MergeSort(rigth); + return Merge(left, rigth); + } + } +} diff --git a/CourseApp/MergeSort.cs b/CourseApp/MergeSort.cs deleted file mode 100644 index c71a34b..0000000 --- a/CourseApp/MergeSort.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace CourseApp -{ - public class MergeSort - { - public static void Merge(int[] targetArray, int[] arr1, int[] arr2) - { - int arr1MinIndex = 0; - int arr2MinIndex = 0; - - int targertArrayMinIndex = 0; - - while (arr1MinIndex < arr1.Length && arr2MinIndex < arr2.Length) - { - if (arr1[arr1MinIndex] <= arr2[arr2MinIndex]) - { - targetArray[targertArrayMinIndex] = arr1[arr1MinIndex]; - arr1MinIndex++; - } - else - { - targetArray[targertArrayMinIndex] = arr1[arr2MinIndex]; - arr2MinIndex++; - } - - targertArrayMinIndex++; - } - - while (arr1MinIndex > arr1.Length) - { - targetArray[targertArrayMinIndex] = arr1[arr1MinIndex]; - arr1MinIndex++; - targertArrayMinIndex++; - } - - while (arr2MinIndex > arr2.Length) - { - targetArray[targertArrayMinIndex] = arr2[arr2MinIndex]; - arr1MinIndex++; - targertArrayMinIndex++; - } - } - - public void Sort(int[] array) - { - int mid = array.Length / 2; - int[] left = new int[mid]; - int[] right = new int[array.Length - mid]; - - if (array.Length == 1) - { - return; - } - - for (int i = 0; i < mid; i++) - { - left[i] = array[i]; - } - - for (int i = mid; i < array.Length; i++) - { - right[i - mid] = array[i]; - } - - Sort(left); - Sort(right); - Merge(array, left, right); - } - } -} diff --git a/CourseApp/MergesortTest.cs b/CourseApp/MergesortTest.cs new file mode 100644 index 0000000..46a35d6 --- /dev/null +++ b/CourseApp/MergesortTest.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp +{ + public class MergesortTest + { + public static int[] Merge(int[] arr1, int[] arr2) + { + int i = 0, j = 0, k = 0; + var resultArray = new int[arr1.Length + arr2.Length]; + while (k < resultArray.Length) + { + if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + { + resultArray[k] = arr1[i]; + i++; + } + else + { + resultArray[k] = arr2[j]; + j++; + } + + k++; + } + + return resultArray; + } + + public static int[] MergeSort(int[] resultArray) + { + if (resultArray.Length == 1) + { + return resultArray; + } + + var mid = resultArray.Length / 2; + var left = new int[mid]; + for (int i = 0; i < mid; i++) + { + left[i] = resultArray[i]; + } + + var rigth = new int[resultArray.Length - mid]; + for (int i = 0; i < rigth.Length; i++) + { + rigth[i] = resultArray[i + mid]; + } + + left = MergeSort(left); + rigth = MergeSort(rigth); + var res = Merge(left, rigth); + Console.WriteLine($"{mid + 1} {resultArray.Length - mid} {resultArray[0]} {resultArray[resultArray.Length - 1]}"); + return Merge(left, rigth); // index outside of mass range FIXABLE???????????? + } + } +} diff --git a/CourseApp/Pairs.cs b/CourseApp/Pairs.cs new file mode 100644 index 0000000..ce95c7c --- /dev/null +++ b/CourseApp/Pairs.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; + +public class Pairs +{ + public int Index { get; set; } + + public int Cost { get; set; } + + public static void PairSort() + { + var list = new List(); + int count = Convert.ToInt32(Console.ReadLine()); + int i = 0; + while (i < count) + { + var str1 = Console.ReadLine(); + var index = Convert.ToInt32(str1.Split(" ")[0]); + var cost = Convert.ToInt32(str1.Split(" ")[1]); + var pair = new Pairs(); + pair.Index = index; + pair.Cost = cost; + list.Add(pair); + i++; + } + + for (int k = 0; k < count - 1; k++) + { + for (int j = 0; j < count - 1; j++) + { + if (list[j].Cost < list[j + 1].Cost) + { + (list[j], list[j + 1]) = (list[j + 1], list[j]); + } + } + } + + for (int k = 0; k < count - 1; k++) + { + for (int j = 0; j < count - 1; j++) + { + if ((list[j].Cost == list[j + 1].Cost) && (list[j].Index > list[j + 1].Index)) + { + (list[j], list[j + 1]) = (list[j + 1], list[j]); + } + } + } + + foreach (var ind in list) + { + Console.WriteLine($"{ind.Index} {ind.Cost}"); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index ed527b4..b8b3ea0 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -5,14 +5,20 @@ namespace CourseApp { public class Program { - public static void Main(string[] args) + public static void Main() { - int[] numbers = { 1, 4, 7, 22, 5 }; - var mergeSort = new MergeSort(); - mergeSort.Sort(numbers); - foreach (int i in numbers) + var massLen = Convert.ToInt32(Console.ReadLine()); + var mass = Console.ReadLine().Split(" "); + var list = new int[massLen]; + for ( int i = 0; i < massLen; i++) { - Console.WriteLine(i); + list[i] = Convert.ToInt32(mass[i]); + } + + MergesortTest.MergeSort(list); + foreach ( int i in MergesortTest.MergeSort(list)) + { + Console.Write(i + " "); } } } From 3d2f2348940b0351fe21fa2c7e477744788ddae5 Mon Sep 17 00:00:00 2001 From: Fuflick Date: Thu, 16 Mar 2023 11:02:29 +0300 Subject: [PATCH 09/28] Fix quickSort metfod formating and boke some another methods, I'l repair them, but not now. --- CourseApp/Inversion.cs | 2 +- CourseApp/MergeBorderOutput.cs | 60 ++++++++++++++++++++++++++++++++++ CourseApp/MergesortTest.cs | 4 +-- CourseApp/Program.cs | 16 ++++++--- CourseApp/QuickSort.cs | 21 +++++------- 5 files changed, 81 insertions(+), 22 deletions(-) create mode 100644 CourseApp/MergeBorderOutput.cs diff --git a/CourseApp/Inversion.cs b/CourseApp/Inversion.cs index e25e9ab..6d73997 100644 --- a/CourseApp/Inversion.cs +++ b/CourseApp/Inversion.cs @@ -51,7 +51,7 @@ public static int[] MergeSort(int[] resultArray) left = MergeSort(left); rigth = MergeSort(rigth); - return Merge(left, rigth); + return Merge(left, rigth); } } } diff --git a/CourseApp/MergeBorderOutput.cs b/CourseApp/MergeBorderOutput.cs new file mode 100644 index 0000000..f28ce47 --- /dev/null +++ b/CourseApp/MergeBorderOutput.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace CourseApp +{ + public class MergeBorderOutput + { + public static int[] BMerge(int[] arr1, int[] arr2) + { + int i = 0, j = 0, k = 0; + var resultArray = new int[arr1.Length + arr2.Length]; + while (k < resultArray.Length) + { + if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + { + resultArray[k] = arr1[i]; + i++; + } + else + { + resultArray[k] = arr2[j]; + j++; + } + + k++; + } + + return resultArray; + } + + public static int[] BMergeSort(int[] resultArray) + { + if (resultArray.Length == 1) + { + return resultArray; + } + + var mid = resultArray.Length / 2; + var left = new int[mid]; + for (int i = 0; i < mid; i++) + { + left[i] = resultArray[i]; + } + + var rigth = new int[resultArray.Length - mid]; + for (int i = 0; i < rigth.Length; i++) + { + rigth[i] = resultArray[i + mid]; + } + + left = BMergeSort(left); + rigth = BMergeSort(rigth); + var res = BMerge(left, rigth); + + return BMerge(left, rigth); + } + } +} diff --git a/CourseApp/MergesortTest.cs b/CourseApp/MergesortTest.cs index 46a35d6..6bd07ca 100644 --- a/CourseApp/MergesortTest.cs +++ b/CourseApp/MergesortTest.cs @@ -51,9 +51,7 @@ public static int[] MergeSort(int[] resultArray) left = MergeSort(left); rigth = MergeSort(rigth); - var res = Merge(left, rigth); - Console.WriteLine($"{mid + 1} {resultArray.Length - mid} {resultArray[0]} {resultArray[resultArray.Length - 1]}"); - return Merge(left, rigth); // index outside of mass range FIXABLE???????????? + return Merge(left, rigth); } } } diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index b8b3ea0..090696f 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,7 +7,13 @@ public class Program { public static void Main() { - var massLen = Convert.ToInt32(Console.ReadLine()); + var res = QuickSort.Sort(new int[] { 4, -1, 3421, 1234, -32, 12 }, 0, 5); + foreach (int i in res) + { + Console.WriteLine(i); + } + + /*var massLen = Convert.ToInt32(Console.ReadLine()); var mass = Console.ReadLine().Split(" "); var list = new int[massLen]; for ( int i = 0; i < massLen; i++) @@ -15,11 +21,11 @@ public static void Main() list[i] = Convert.ToInt32(mass[i]); } - MergesortTest.MergeSort(list); - foreach ( int i in MergesortTest.MergeSort(list)) + MergeBorderOutput.BMergeSort(list); + foreach ( int i in MergeBorderOutput.BMergeSort(list)) { Console.Write(i + " "); - } + }*/ } } -} +} \ No newline at end of file diff --git a/CourseApp/QuickSort.cs b/CourseApp/QuickSort.cs index 38ee29f..6581a4f 100644 --- a/CourseApp/QuickSort.cs +++ b/CourseApp/QuickSort.cs @@ -7,40 +7,35 @@ namespace CourseApp { public class QuickSort { - // private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; + // private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; - массив, чтобы скопировать его в Main() при вызове данной функции public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // поиск опроного члена { int pivot = minIndex - 1; - int temp; for ( int i = minIndex; i < maxIndex; i++) { if (numbers[i] < numbers[maxIndex]) { pivot++; - temp = numbers[pivot]; - numbers[pivot] = numbers[i]; - numbers[i] = temp; + (numbers[pivot], numbers[i]) = (numbers[i], numbers[pivot]); } } pivot++; - temp = numbers[pivot]; - numbers[pivot] = numbers[maxIndex]; - numbers[maxIndex] = temp; + (numbers[pivot], numbers[maxIndex]) = (numbers[maxIndex], numbers[pivot]); return pivot; } - public int[] Sort(int[] numbers, int minINdex, int maxIndex) // сама сортировка + public static int[] Sort(int[] numbers, int minIndex, int maxIndex) // сама сортировка (рекурсивно для подмассивов) { - if (minINdex >= maxIndex) + if (minIndex >= maxIndex) { - return numbers; + return numbers; // если длина подмассива == 1 => выйти из цикла } - int pivot = FindPivot(numbers, minINdex, maxIndex); + int pivot = FindPivot(numbers, minIndex, maxIndex); - Sort(numbers, minINdex, pivot - 1); + Sort(numbers, minIndex, pivot - 1); Sort(numbers, pivot + 1, maxIndex); return numbers; From dfb00d6f369932b2adcd0159a3b4fa06dc0eff05 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Wed, 22 Mar 2023 17:49:50 +0300 Subject: [PATCH 10/28] Fix MergeSort and some inversion --- CourseApp/MergeBorderOutput.cs | 85 ++++++++++++------- CourseApp/MergesortTest.cs | 5 ++ CourseApp/Module2/BubbleSort.cs | 37 -------- CourseApp/{ => Module2}/BubleSort.cs | 2 +- CourseApp/Module2/Inversion.cs | 66 ++++++++++++++ .../{Inversion.cs => Module2/MergeSort.cs} | 39 +++++---- CourseApp/{ => Module2}/Pairs.cs | 0 CourseApp/{ => Module2}/QuickSort.cs | 6 +- CourseApp/Program.cs | 7 +- 9 files changed, 153 insertions(+), 94 deletions(-) delete mode 100644 CourseApp/Module2/BubbleSort.cs rename CourseApp/{ => Module2}/BubleSort.cs (97%) create mode 100644 CourseApp/Module2/Inversion.cs rename CourseApp/{Inversion.cs => Module2/MergeSort.cs} (51%) rename CourseApp/{ => Module2}/Pairs.cs (100%) rename CourseApp/{ => Module2}/QuickSort.cs (84%) diff --git a/CourseApp/MergeBorderOutput.cs b/CourseApp/MergeBorderOutput.cs index f28ce47..cfc9bcd 100644 --- a/CourseApp/MergeBorderOutput.cs +++ b/CourseApp/MergeBorderOutput.cs @@ -1,60 +1,83 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace CourseApp { public class MergeBorderOutput { - public static int[] BMerge(int[] arr1, int[] arr2) + public static void Gain() { - int i = 0, j = 0, k = 0; - var resultArray = new int[arr1.Length + arr2.Length]; - while (k < resultArray.Length) + MergeSortMethod(); + } + + public static void MergeSortMethod() + { + int[] arr = InputParse(); + + int[] sortedArr = ArrSort(ref arr, 0, arr.Length); + + Console.WriteLine("{0}", string.Join(" ", sortedArr)); + } + + private static int[] Merge(ref int[] left, ref int[] right) + { + int i = 0; + int j = 0; + int[] add = new int[left.Length + right.Length]; + for (int k = 0; k < add.Length; k++) { - if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + if (i == left.Length) + { + add[k] = right[j]; + j++; + } + else if (j == right.Length || left[i] <= right[j]) { - resultArray[k] = arr1[i]; + add[k] = left[i]; i++; } else { - resultArray[k] = arr2[j]; + add[k] = right[j]; j++; } - - k++; } - return resultArray; + return add; } - public static int[] BMergeSort(int[] resultArray) + private static int[] ArrSort(ref int[] arr, int begin, int end) { - if (resultArray.Length == 1) + if (end - begin == 1) { - return resultArray; + int[] res = new int[1]; + res[0] = arr[begin]; + return res; } - var mid = resultArray.Length / 2; - var left = new int[mid]; - for (int i = 0; i < mid; i++) - { - left[i] = resultArray[i]; - } + int mid = (begin + end) / 2; + + int[] left = ArrSort(ref arr, begin, mid); + int[] right = ArrSort(ref arr, mid, end); + + int[] sort = Merge(ref left, ref right); - var rigth = new int[resultArray.Length - mid]; - for (int i = 0; i < rigth.Length; i++) + Console.WriteLine("{0} {1} {2} {3}", begin + 1, end, sort[0], sort[sort.Length - 1]); + + return Merge(ref left, ref right); + } + + private static int[] InputParse() + { + int n = int.Parse(Console.ReadLine()); + int[] arr = new int[n]; + string s = Console.ReadLine(); + string[] sValues = s.Split(' '); + for (int i = 0; i < n; i++) { - rigth[i] = resultArray[i + mid]; + arr[i] = int.Parse(sValues[i]); } - left = BMergeSort(left); - rigth = BMergeSort(rigth); - var res = BMerge(left, rigth); - - return BMerge(left, rigth); + return arr; } } -} +} \ No newline at end of file diff --git a/CourseApp/MergesortTest.cs b/CourseApp/MergesortTest.cs index 6bd07ca..d0cd401 100644 --- a/CourseApp/MergesortTest.cs +++ b/CourseApp/MergesortTest.cs @@ -26,6 +26,11 @@ public static int[] Merge(int[] arr1, int[] arr2) k++; } + foreach (int elem in resultArray) + { + Console.WriteLine(elem); + } + return resultArray; } diff --git a/CourseApp/Module2/BubbleSort.cs b/CourseApp/Module2/BubbleSort.cs deleted file mode 100644 index 4b88df0..0000000 --- a/CourseApp/Module2/BubbleSort.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace CourseApp.Module2 -{ - public class BubbleSort - { - public static void BubbleSortMethod() - { - int n = int.Parse(Console.ReadLine()); - string s = Console.ReadLine(); - string[] sValues = s.Split(' '); - int[] arr = new int[n]; - for (int i = 0; i < n; i++) - { - arr[i] = int.Parse(sValues[i]); - } - - for (int i = 0; i < arr.Length - 1; i++) - { - for (int j = 0; j < arr.Length - i - 1; j++) - { - if (arr[j] > arr[j + 1]) - { - // int temp = arr[j]; - // arr[j] = arr[j + 1]; - // arr[j+1] = temp; - (arr[j], arr[j + 1]) = (arr[j + 1], arr[j]); - string result = string.Join(" ", arr); - Console.WriteLine(result); - } - } - } - } - } -} diff --git a/CourseApp/BubleSort.cs b/CourseApp/Module2/BubleSort.cs similarity index 97% rename from CourseApp/BubleSort.cs rename to CourseApp/Module2/BubleSort.cs index ea6913d..7f4bda1 100644 --- a/CourseApp/BubleSort.cs +++ b/CourseApp/Module2/BubleSort.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace CourseApp +namespace CourseApp.Module2 { public class BubleSort { diff --git a/CourseApp/Module2/Inversion.cs b/CourseApp/Module2/Inversion.cs new file mode 100644 index 0000000..2dc66f1 --- /dev/null +++ b/CourseApp/Module2/Inversion.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CourseApp.Module2 +{ + internal class Inversion + { + public static int[] Merge(int[] arr1, int[] arr2) + { + int i = 0, j = 0, k = 0; + var resultArray = new int[arr1.Length + arr2.Length]; + while (k < resultArray.Length) + { + if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + { + resultArray[k] = arr1[i]; + i++; + } + else + { + resultArray[k] = arr2[j]; + j++; + } + + k++; + } + + return resultArray; + } + + public static int[] Sort(int[] array) + { + var i = 0; + if (array.Length == 1) + { + return array; + } + + var mid = array.Length / 2; + var left = new int[mid]; + var right = new int[array.Length - mid]; + + Array.Copy(array, 0, left, 0, left.Length); + Array.Copy(array, left.Length, right, 0, right.Length); + + left = Sort(left); + right = Sort(right); + Console.WriteLine(i); + return Merge(left, right); + } + + public static int[] Parse() + { + var massLen = Convert.ToInt16(Console.ReadLine()); + var str = Console.ReadLine().Split(" "); + var mass = new int[massLen]; + for (int i = 0; i < mass.Length; i++) + { + mass[i] = Convert.ToInt32(str[i]); + } + + return mass; + } + } +} diff --git a/CourseApp/Inversion.cs b/CourseApp/Module2/MergeSort.cs similarity index 51% rename from CourseApp/Inversion.cs rename to CourseApp/Module2/MergeSort.cs index 6d73997..094037f 100644 --- a/CourseApp/Inversion.cs +++ b/CourseApp/Module2/MergeSort.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; -using System.Text; namespace CourseApp { - internal class Inversion + public class MergeSort { public static int[] Merge(int[] arr1, int[] arr2) { @@ -29,29 +27,36 @@ public static int[] Merge(int[] arr1, int[] arr2) return resultArray; } - public static int[] MergeSort(int[] resultArray) + public static int[] Sort(int[] array) { - if (resultArray.Length == 1) + if (array.Length == 1) { - return resultArray; + return array; } - var mid = resultArray.Length / 2; + var mid = array.Length / 2; var left = new int[mid]; - for (int i = 0; i < mid; i++) - { - left[i] = resultArray[i]; - } + var right = new int[array.Length - mid]; + + Array.Copy(array, 0, left, 0, left.Length); + Array.Copy(array, left.Length, right, 0, right.Length); + + left = Sort(left); + right = Sort(right); - var rigth = new int[resultArray.Length - mid]; - for (int i = 0; i < rigth.Length; i++) + return Merge(left, right); + } + + public static int[] ParseConsole() + { + var str = Console.ReadLine().Split(" "); + var mass = new int[str.Length]; + for (int i = 0; i < mass.Length; i++) { - rigth[i] = resultArray[i + mid]; + mass[i] = Convert.ToInt32(str[i]); } - left = MergeSort(left); - rigth = MergeSort(rigth); - return Merge(left, rigth); + return mass; } } } diff --git a/CourseApp/Pairs.cs b/CourseApp/Module2/Pairs.cs similarity index 100% rename from CourseApp/Pairs.cs rename to CourseApp/Module2/Pairs.cs diff --git a/CourseApp/QuickSort.cs b/CourseApp/Module2/QuickSort.cs similarity index 84% rename from CourseApp/QuickSort.cs rename to CourseApp/Module2/QuickSort.cs index 6581a4f..a40201f 100644 --- a/CourseApp/QuickSort.cs +++ b/CourseApp/Module2/QuickSort.cs @@ -3,15 +3,15 @@ using System.Globalization; using System.Text; -namespace CourseApp +namespace CourseApp.Module2 { public class QuickSort { // private int[] numbers = { 4, -1, 3421, 1234, -32, 12 }; - массив, чтобы скопировать его в Main() при вызове данной функции - public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // поиск опроного члена + public static int FindPivot(int[] numbers, int minIndex, int maxIndex) // поиск опроного члена (по умолчанию беру опорным элементом последнйи элемент массива) { int pivot = minIndex - 1; - for ( int i = minIndex; i < maxIndex; i++) + for (int i = minIndex; i < maxIndex; i++) { if (numbers[i] < numbers[maxIndex]) { diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 090696f..caa49fb 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,11 +7,8 @@ public class Program { public static void Main() { - var res = QuickSort.Sort(new int[] { 4, -1, 3421, 1234, -32, 12 }, 0, 5); - foreach (int i in res) - { - Console.WriteLine(i); - } + var a = Inversion.Parse(); + Inversion.Sort(a); /*var massLen = Convert.ToInt32(Console.ReadLine()); var mass = Console.ReadLine().Split(" "); From 5727fdeeff6a23e3c4ce3507402793bc284fa750 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Thu, 23 Mar 2023 21:09:41 +0300 Subject: [PATCH 11/28] Add 5 task from contest (Number of different integers) --- CourseApp/Module2/Inversion.cs | 92 ++++++++++++-------- CourseApp/{ => Module2}/MergeBorderOutput.cs | 2 +- CourseApp/Module2/NumberOfDifferent.cs | 28 ++++++ CourseApp/Program.cs | 17 +--- 4 files changed, 84 insertions(+), 55 deletions(-) rename CourseApp/{ => Module2}/MergeBorderOutput.cs (98%) create mode 100644 CourseApp/Module2/NumberOfDifferent.cs diff --git a/CourseApp/Module2/Inversion.cs b/CourseApp/Module2/Inversion.cs index 2dc66f1..9cc92b6 100644 --- a/CourseApp/Module2/Inversion.cs +++ b/CourseApp/Module2/Inversion.cs @@ -1,66 +1,82 @@ using System; -using System.Collections.Generic; -using System.Text; namespace CourseApp.Module2 { - internal class Inversion + public class Inversion { - public static int[] Merge(int[] arr1, int[] arr2) + private static long inversionCount = 0; + + public static void Main1() { - int i = 0, j = 0, k = 0; - var resultArray = new int[arr1.Length + arr2.Length]; - while (k < resultArray.Length) + int v = int.Parse(Console.ReadLine()); + if (v > 1) { - if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) - { - resultArray[k] = arr1[i]; - i++; - } - else + string temp = Console.ReadLine(); + string[] values = temp.Split(' '); + int[] array = new int[v]; + for (int i = 0; i < values.Length; i++) { - resultArray[k] = arr2[j]; - j++; + array[i] = int.Parse(values[i]); } - k++; + int[] result = Sort(array, 0, v); + Console.WriteLine(inversionCount); + } + else + { + Console.WriteLine(0); } - - return resultArray; } - public static int[] Sort(int[] array) + public static int[] Sort(int[] array, int firstInd, int lastInd) { - var i = 0; - if (array.Length == 1) + if (lastInd - firstInd == 1) { - return array; + int[] res = new int[1]; + res[0] = array[firstInd]; + return res; } - var mid = array.Length / 2; - var left = new int[mid]; - var right = new int[array.Length - mid]; + int w = (firstInd + lastInd) / 2; - Array.Copy(array, 0, left, 0, left.Length); - Array.Copy(array, left.Length, right, 0, right.Length); + int[] left = Sort(array, firstInd, w); + int[] right = Sort(array, w, lastInd); - left = Sort(left); - right = Sort(right); - Console.WriteLine(i); return Merge(left, right); } - public static int[] Parse() + public static int[] Merge(int[] left, int[] right) { - var massLen = Convert.ToInt16(Console.ReadLine()); - var str = Console.ReadLine().Split(" "); - var mass = new int[massLen]; - for (int i = 0; i < mass.Length; i++) + int i = 0; + int j = 0; + int[] result = new int[left.Length + right.Length]; + + for (int n = 0; n < result.Length; n++) { - mass[i] = Convert.ToInt32(str[i]); + if (i == left.Length) + { + result[n] = right[j]; + j++; + } + else if (j == right.Length) + { + result[n] = left[i]; + i++; + } + else if (left[i] <= right[j]) + { + result[n] = left[i]; + i++; + } + else + { + result[n] = right[j]; + j++; + inversionCount += left.Length - i; + } } - return mass; + return result; } } -} +} \ No newline at end of file diff --git a/CourseApp/MergeBorderOutput.cs b/CourseApp/Module2/MergeBorderOutput.cs similarity index 98% rename from CourseApp/MergeBorderOutput.cs rename to CourseApp/Module2/MergeBorderOutput.cs index cfc9bcd..8288ab4 100644 --- a/CourseApp/MergeBorderOutput.cs +++ b/CourseApp/Module2/MergeBorderOutput.cs @@ -1,6 +1,6 @@ using System; -namespace CourseApp +namespace CourseApp.Module2 { public class MergeBorderOutput { diff --git a/CourseApp/Module2/NumberOfDifferent.cs b/CourseApp/Module2/NumberOfDifferent.cs new file mode 100644 index 0000000..3e57abd --- /dev/null +++ b/CourseApp/Module2/NumberOfDifferent.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace CourseApp.Module2 +{ + public class NumberOfDifferent + { + public static int[] Parse() + { + var len = Convert.ToInt32(Console.ReadLine()); + var mass = new int[len]; + var str = Console.ReadLine().Split(' '); + for (int i = 0; i < len; i++) + { + mass[i] = Convert.ToInt32(str[i]); + } + + return mass; + } + + public static void CountDiffrent(int[] mass) + { + Console.WriteLine(mass.ToList().Distinct().Count()); + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index caa49fb..f600042 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,22 +7,7 @@ public class Program { public static void Main() { - var a = Inversion.Parse(); - Inversion.Sort(a); - - /*var massLen = Convert.ToInt32(Console.ReadLine()); - var mass = Console.ReadLine().Split(" "); - var list = new int[massLen]; - for ( int i = 0; i < massLen; i++) - { - list[i] = Convert.ToInt32(mass[i]); - } - - MergeBorderOutput.BMergeSort(list); - foreach ( int i in MergeBorderOutput.BMergeSort(list)) - { - Console.Write(i + " "); - }*/ + NumberOfDifferent.CountDiffrent(NumberOfDifferent.Parse()); } } } \ No newline at end of file From 55a0afbae325095c072c2f620826cdb7491cd689 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Sat, 25 Mar 2023 13:32:16 +0300 Subject: [PATCH 12/28] Add Radix Sort method --- CourseApp/Module2/RadixSort.cs | 77 ++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 CourseApp/Module2/RadixSort.cs diff --git a/CourseApp/Module2/RadixSort.cs b/CourseApp/Module2/RadixSort.cs new file mode 100644 index 0000000..17fe0b6 --- /dev/null +++ b/CourseApp/Module2/RadixSort.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace CourseApp.Module2 +{ + public class RadixSort + { + public static void RadSort(string[] arr_string) + { + var phase = 1; + var rank = arr_string[0].Length; + + Console.WriteLine("Initial array:"); + Console.WriteLine("{0}", string.Join(", ", arr_string)); + + foreach (var i in Enumerable.Range(0, Convert.ToInt32(Math.Ceiling(Convert.ToDouble(-1 - (rank - 1)) / -1))).Select(x_1 => rank - 1 + (x_1 * -1))) + { + Console.WriteLine("**********"); + Console.WriteLine("Phase {0}", phase); + ulong n; + List[] arrayList = new List[10]; + for (n = 0; n < 10; n++) + { + arrayList[n] = new List(); + } + + for (int j = 0; j < arr_string.Length; j++) + { + int k = int.Parse(arr_string[j].Substring(rank - phase, 1)); + arrayList[k].Add(arr_string[j]); + } + + for (n = 0; n < 10; n++) + { + if (arrayList[n].Count == 0) + { + Console.WriteLine("Bucket " + n + ": empty"); + } + else + { + Console.WriteLine("Bucket " + n + ": {0}", string.Join(", ", arrayList[n])); + } + } + + int l = 0; + + for (n = 0; n < 10; n++) + { + for (int j = 0; j < arrayList[n].Count; j++) + { + arr_string[l] = arrayList[n][j]; + l++; + } + } + + phase++; + } + + Console.WriteLine("**********"); + Console.WriteLine("Sorted array:"); + Console.Write("{0}", string.Join(", ", arr_string)); + } + + public static void Begin() + { + var m = ulong.Parse(Console.ReadLine()); + var arr_string = new string[m]; + for (ulong i = 0; i < m; i++) + { + arr_string[i] = Console.ReadLine(); + } + + RadSort(arr_string); + } + } +} \ No newline at end of file From 3d9cc34f85f006e0cc445c0960d4b4df02a23b56 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 28 Mar 2023 00:43:38 +0300 Subject: [PATCH 13/28] Add Module3 directive to CourceApp and CourceAppTest, have started to write FindStr method and had try to write tests for it, but can't run them --- CourseApp.Tests/Module2/BubbleSortTest.cs | 1 - CourseApp.Tests/Module3/FindString.cs | 41 +++++++++++++++++++++++ CourseApp.Tests/Module3/FindStringTest.cs | 39 +++++++++++++++++++++ CourseApp/Module3/FindString.cs | 22 ++++++++++++ CourseApp/Program.cs | 3 +- 5 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 CourseApp.Tests/Module3/FindString.cs create mode 100644 CourseApp.Tests/Module3/FindStringTest.cs create mode 100644 CourseApp/Module3/FindString.cs diff --git a/CourseApp.Tests/Module2/BubbleSortTest.cs b/CourseApp.Tests/Module2/BubbleSortTest.cs index c57df84..b6556ec 100644 --- a/CourseApp.Tests/Module2/BubbleSortTest.cs +++ b/CourseApp.Tests/Module2/BubbleSortTest.cs @@ -39,7 +39,6 @@ public void Test1(string input, string expected) Console.SetIn(stringReader); // act - BubbleSort.BubbleSortMethod(); // assert var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); diff --git a/CourseApp.Tests/Module3/FindString.cs b/CourseApp.Tests/Module3/FindString.cs new file mode 100644 index 0000000..131d572 --- /dev/null +++ b/CourseApp.Tests/Module3/FindString.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using Xunit; +using CourseApp.Module3; + +namespace CourseApp.Tests.Module3 +{ + [Collection("Sequential")] + public class FindString : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData("10 12", "22")] + [InlineData("1 1", "2")] + [InlineData("10000 10000", "20000")] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + AplusB.Calculate(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} diff --git a/CourseApp.Tests/Module3/FindStringTest.cs b/CourseApp.Tests/Module3/FindStringTest.cs new file mode 100644 index 0000000..367c7f9 --- /dev/null +++ b/CourseApp.Tests/Module3/FindStringTest.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using Xunit; +using CourseApp.Module3; + +namespace CourseApp.Tests.Module3 +{ + [Collection("Sequential")] + public class FindStringTest : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData("ababbababa\naba", "0 5 7\r\n")] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + FindString.FindStr(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} diff --git a/CourseApp/Module3/FindString.cs b/CourseApp/Module3/FindString.cs new file mode 100644 index 0000000..9f89006 --- /dev/null +++ b/CourseApp/Module3/FindString.cs @@ -0,0 +1,22 @@ +using System; +using System.Linq; + +namespace CourseApp.Module3 +{ + public class FindString + { + public static void FindStr() + { + var a = Console.ReadLine(); + var b = Console.ReadLine(); + string result = null; + for (int i = 0; i <= a.Length - b.Length + 1; i += b.Length) + { + result += a.IndexOf(b, i).ToString(); + result += " "; + } + + Console.WriteLine(result.Split(" ").Aggregate((d, c) => d + " " + c) + "\r"); + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index f600042..6361f17 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -1,5 +1,6 @@ using System; using CourseApp.Module2; +using CourseApp.Module3; namespace CourseApp { @@ -7,7 +8,7 @@ public class Program { public static void Main() { - NumberOfDifferent.CountDiffrent(NumberOfDifferent.Parse()); + FindString.FindStr(); } } } \ No newline at end of file From 701a91eb6a95a7818d8cfee9da236a9f1aaa7b30 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 28 Mar 2023 01:01:20 +0300 Subject: [PATCH 14/28] result became a List from string --- CourseApp/Module3/FindString.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CourseApp/Module3/FindString.cs b/CourseApp/Module3/FindString.cs index 9f89006..4a3244e 100644 --- a/CourseApp/Module3/FindString.cs +++ b/CourseApp/Module3/FindString.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; namespace CourseApp.Module3 @@ -9,14 +10,13 @@ public static void FindStr() { var a = Console.ReadLine(); var b = Console.ReadLine(); - string result = null; + List result = new List(); for (int i = 0; i <= a.Length - b.Length + 1; i += b.Length) { - result += a.IndexOf(b, i).ToString(); - result += " "; + result.Add(a.IndexOf(b, i).ToString()); } - Console.WriteLine(result.Split(" ").Aggregate((d, c) => d + " " + c) + "\r"); + Console.WriteLine(result.Aggregate((d, c) => d + " " + c) + "\r"); } } } From cae052c3f27c8ffe3d6b9d2c2e8855b5209b550a Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 28 Mar 2023 18:08:38 +0300 Subject: [PATCH 15/28] Tests is working now, but I've got some problem with exceptions --- CourseApp.Tests/Module2/BubbleSortTest.cs | 1 + CourseApp.Tests/Module3/FindString.cs | 41 ----------------------- CourseApp/Module2/BubleSort.cs | 2 +- CourseApp/Module3/FindString.cs | 4 +-- 4 files changed, 4 insertions(+), 44 deletions(-) delete mode 100644 CourseApp.Tests/Module3/FindString.cs diff --git a/CourseApp.Tests/Module2/BubbleSortTest.cs b/CourseApp.Tests/Module2/BubbleSortTest.cs index b6556ec..7ebaa95 100644 --- a/CourseApp.Tests/Module2/BubbleSortTest.cs +++ b/CourseApp.Tests/Module2/BubbleSortTest.cs @@ -39,6 +39,7 @@ public void Test1(string input, string expected) Console.SetIn(stringReader); // act + BubleSort.Sort(); // assert var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); diff --git a/CourseApp.Tests/Module3/FindString.cs b/CourseApp.Tests/Module3/FindString.cs deleted file mode 100644 index 131d572..0000000 --- a/CourseApp.Tests/Module3/FindString.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.IO; -using Xunit; -using CourseApp.Module3; - -namespace CourseApp.Tests.Module3 -{ - [Collection("Sequential")] - public class FindString : IDisposable - { - public void Dispose() - { - var standardOut = new StreamWriter(Console.OpenStandardOutput()); - standardOut.AutoFlush = true; - var standardIn = new StreamReader(Console.OpenStandardInput()); - Console.SetOut(standardOut); - Console.SetIn(standardIn); - } - - [Theory] - [InlineData("10 12", "22")] - [InlineData("1 1", "2")] - [InlineData("10000 10000", "20000")] - public void Test1(string input, string expected) - { - var stringWriter = new StringWriter(); - Console.SetOut(stringWriter); - - var stringReader = new StringReader(input); - Console.SetIn(stringReader); - - // act - AplusB.Calculate(); - - // assert - var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); - Assert.Equal($"{expected}", output[0]); - var standardOutput = new StreamWriter(Console.OpenStandardOutput()); - } - } -} diff --git a/CourseApp/Module2/BubleSort.cs b/CourseApp/Module2/BubleSort.cs index 7f4bda1..3449a77 100644 --- a/CourseApp/Module2/BubleSort.cs +++ b/CourseApp/Module2/BubleSort.cs @@ -6,7 +6,7 @@ namespace CourseApp.Module2 { public class BubleSort { - public static void SortProc() + public static void Sort() { var k = 0; var massLen = Convert.ToInt32(Console.ReadLine()); diff --git a/CourseApp/Module3/FindString.cs b/CourseApp/Module3/FindString.cs index 4a3244e..5e4637e 100644 --- a/CourseApp/Module3/FindString.cs +++ b/CourseApp/Module3/FindString.cs @@ -11,12 +11,12 @@ public static void FindStr() var a = Console.ReadLine(); var b = Console.ReadLine(); List result = new List(); - for (int i = 0; i <= a.Length - b.Length + 1; i += b.Length) + for (int i = 0; ; i += b.Length) { result.Add(a.IndexOf(b, i).ToString()); } - Console.WriteLine(result.Aggregate((d, c) => d + " " + c) + "\r"); + Console.WriteLine(result.Aggregate((d, c) => d + " " + c) + "\r\n"); } } } From 08608bc944090403659de5f9c769df6192a3f6b5 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Wed, 29 Mar 2023 21:29:45 +0300 Subject: [PATCH 16/28] Add find Substring method by Rabin-Karp --- CourseApp.Tests/Module3/FindStringTest.cs | 6 ++- CourseApp/Module2/BubleSort.cs | 1 + CourseApp/Module3/FindString.cs | 55 ++++++++++++++++++----- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/CourseApp.Tests/Module3/FindStringTest.cs b/CourseApp.Tests/Module3/FindStringTest.cs index 367c7f9..089768c 100644 --- a/CourseApp.Tests/Module3/FindStringTest.cs +++ b/CourseApp.Tests/Module3/FindStringTest.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Security.Cryptography.X509Certificates; using Xunit; using CourseApp.Module3; @@ -18,8 +19,9 @@ public void Dispose() } [Theory] - [InlineData("ababbababa\naba", "0 5 7\r\n")] - public void Test1(string input, string expected) + [InlineData("ababbababa\naba", "0 5 7")] + [InlineData("bcbbbabaacbbccabbabbacabaababacbbcaacababbaaacccaccbcabaaabbabaaacaaabbbcacbbbaccabbcacabbabaabacbbbccacacbcbabcacacccccbabcaaccabacbacbcbbacaccabbacabcaccabaccaaabacaacbacabcabcaababbcbcbbbacbabaacbaccccbaacbabaacbcabcbacaccbccbcaaababaabacbacccbcabaabcccaabcaccabacaacbbccbbacabcaaabbabbcccabbcbaabbbccabacaaaacacbbccbbcaaaabbbbaaccccbbacccbcbacacbacbbcabaabccbbbacacbbcabcacabccbacacbababccbbbbbccccbababbcacaccababcbaaabbbbbbacbcbaaccbcbabcaaaabbbbaccaacaacbbbcaacacaabbcbbabbbacababaabaaacbbbabbcbbbbbaccabbbcbaaabbcccbaacaaacbbbbacbccacabcbccbccaccbcccabacbbaacccbbabaaccbbbaaaabcaabacbacacacabccccbbcbabccbaabcccaaacabbcaaabbcaaacaabcbbaabbccbbabccacaacbabbcbbaccabccccaaaacccacbbccbcbaaacaaabbababcbbbcbcbbcbcbccacaabacbbaacccacacaaccbaaabccaabcabbacbbacaacacbbcaaabcabbbacaaaaabccaabbaacbcccbbbacabcaaacacbbbbacabcabcbcbaabababbcabaabcaabaabbcbbabbcabbccacaabcaacaaabacccbaaabccbabbccbbbacbbcacbbccbbccbacbccbbaaaacbaacbcabbcaaacacbacbbccbbacbaaaacbbaabcabcccabcbcabccaacaaabccabcbcccacbacabcabcabcccbbaabbabaabcbcaabbbcabababaaaacabcbbaacaaabcbaabcacabbcbcbbcabcbcccbcabcbaaaccbbbbcaabbbcaaaabbaacbcbabaaabccbbacbcaaabbccccbcbacaccaaaaacccabccbbbbacabcabaaabaaaacccccabababcacabcccaabacbcaabbccbbbaabcbacbbbccbccbbbbaabcbacacbcbbbababacababbaaaabacaccbbcaabbbbacacbccaaacbcacbaaccabaacbbcacabcbccbaabbbaaacaabbcaacaaabacbbbbbbbbbaaacaacbacbbcaacccabbacacbacbbbbaabccbcbbbbcbcaacccbcbcabaabcbcbbcaabcabbbcacbabbaacaaccbbcbabaacbbcbbabacbcacbbaabaacabcccbcaccccbcccbacabbcabacbbaacbcccaaaaaabcbcbcabcacacacccabaccacabbabcbbaaaaccacabbcbbbcbccacbaabbcacbcabcaabccaccbaabcccbbcbbbbcccabbaccbaaabbcaaaaccbccaababaabbbcbccaaccccacabacbbaaabbbbcbcacbaccabbcbbcaabaaccbbcaabbaacaacbaabcbccbccabccbacbcbaccbccccbbbbcaaabacacacbaccaaaaccaaccabacacaababcaaccababccacbcccbbbbbcbcaaaccaabaabacccbcbbaaccccbacbbacacccaccccacaaabbcbaabaaccabbbbcbccaaaacccbabbaabbcccacccbabaaaccccaccbbaccbaaaccbcbcbbbbaacaabacacbbcabcaaccbbaacaccbabcaccaabbababaacbccbaaccbcbaabcbacbbbaabbabbccabcaabacbccaaccbabcacbbccaccababcbbacacbcbaccbcbabcaabbcbbababbbabbbccbcbcbbbabccaacabbabaaaabbbbbacbbcabcabccbcbcbcaabbbbcabcbbbcacbbcabbbacbabaaccbbacacbacaaaaacaacaacbabbbcacabcbbcaaaaabbcccbbcbbbcacabaaabacbbbccbbcbccccabbbabbbabcccaccaaabcacacaccbcaaaacababcaacaaabbbcaccacbaaccacccbabcbbabacabbbbcccbacaacacabaaaaacbbcabbaacaaccababbcacbbbccaaabcccacaabaaaccbcbabccbbbcccbbbaccaaacaabccacaabbccbacaabababaaaccbccbcaaaaabababcbbacbaaaabaaacbbcbbaaccbbbbaaacabcaaccabbcaccbcccbacaabacabbaccbacbaabcbcaaabbbcbcabbacaccabaabbbabcacbabccabaabbcbcacbbbbcbbbcaaabbbabaaccbbacabaaacbbabaaaccacacabcccccbbcbbbbbccabcbaaccccbbbaccababbbacbccccccbacacabcacbbbacbbacbccccbaabbbcacbacacbccbcabbbcacacacabaacaaaabccbcaacaababcbbaabccbccbabccbaabbcbbbaabcbababbcacbbcbbbbabcbabbcbcccababbaaaccabccbaaacbaccbbcbaaacccbbaaacaabcbbcbbcccbcbacacbcbbaabbaaacbbcababbaccabbbbbcaccbbbcccaaabbaabcccbbaaaacbcbabcaaccaacaaccaaabcbccbbbcabccbacbbccaabbaaccaccbcbbaaccbcabcacaacbacabbccaabbaacabcacabbcaacbbcaaaaaaacbaabbbacccaccbcbccccbbcbbcccacaaabbcacacbaabbbcaccacccbbcaacababcabbaabacbcaaccbccaabbabccbbccbacabbacbabaabbaabcccbbcbbaabbbcaccccaaacbcbbaaccaccbbabcabaababaaccccacabbbcacccaccabcbccbacaaababaacbbabaacccbbcacbcababacbccbccaacabccabacccbbcbacaacaccbabbaaaacbbaacacbabbccbaacacbaabaababbbaabbcbcacbccacbbbabacaccbccacbccacbbbcbbcaccaccbacabcabababbcccaaaababcaaacbccbbacccacabacbacccbababbbbbaccabacbbbcccbacbcbcccbaaaacbcbbbbaaccbcbababbcbabbacabaabbbaacbaacccccacbbaccbccbbbccbcaaaccbaabbcbabcacbbbaabacbbabcabbbbaabcaccabbcabbaccccccbcbccbacbccaabcbccaaabccbbaaacbbbbbbbaaaaaccccabacbbcabaacccabbcbcbccbbacaaccbacbbabcbbacbbbabcbcacaccbaaccbbcccabcbcccbacaabccaacacccabcabcaaccaabbbcaacbabbcbbbccacabbbabaaacaaacbaacabbbccaacacaaacacccabacbbaacacaccccacaabcbbaaaccaacaccccabbccabbabcabacabcaabccbcbaababccabccabacccccabbcacabccbbbacbbcacbaccacaaaabcccbbbcbaacbcabcbbbaacccbcbcacbcbababcabcabbcbcccbcbcccbababbcbbaccaabbbbabacaaccbccaababacbabcabaccacbcaabbbaabcacabbbacbcccacbccccaacbcbaaabcaaacabacbcaccbacbabacbaaacaabaabaccbcbbbbbcacbbbccbbccaaabbcababaabacbabcbcccccbbbbccbbbaacbaabbbaaabccabccbbbabcaaaaacbabbbcbcabbcabcccbbaccaaaaabbaaaacaacabbccabcabcbcbcaabaaacccabbacccbacccaaaacacccaaccbbabcaccaabbbccacabcbbaaacbbbbccbaacccbbbbcabaaabacbcaccabbaaccbabaabcabcbbcbcacaccbccbccaccbaccbacccbccabbbacaabccaabcbbcbccabbcccabbcbaccacbbbbcbbaabbbbabaabbbccabaccacaccabbccbcbcbabcaaaccaccabaccccbaaabbabccaabaaababaaacaabaacbcabacbcbabccbcbbbbaccccaccbacbbcacccaababcbbbcbbccaacacbbbaacabbcbbbbabbabcbbbbbbbcccbbbcbabaacacbccacbbbacabbbaacbccbaacbbccbbaaccbbcaabcccbbbbbcaacaccaccccaababcccaccabaaaccabccaccacaacacbbccbaaababaaabaabccaabaaccaabaccbbababababbcaaabcaacccccbabbcabbabccccaaaabacbacccbbabbbaacccbbcaaabbcbcaccaacbcccaaacbacabccaccbcaccacbabbbbbbbbbaabccccbcbccabacaaaacbabcccbbbacccacbbcbbbbacbccbaabcaababaccbaccabaacbacbacaacbaabaaaccbaaaaacaaabbacaccccccbcbbcaccccacccbccbccaccbaacaaabaccaccabaabbcaccbbacccababacbbacaaabbccaccbbbcbbaaabaccaabcbabababcbabcacaacbaaaabccccabccccacabacaaabbbabbcacccbbccccbbbaabbccbcccccbcaccbccaaaccaacbacbbacaacacbaabcbbaccbcccaacabbaaaaaaabcbcccacabcbcaabcaaaabaabcbaacccccabcacaccabbccacabbbaabccabbaaccbaabcacaaacbabbcacabccacbaaabcbaacacccabbbbbcaabcaccacbbaacbaacacbccbccccbacbccacabbbcccbababbacbcaccbcabbcaaccbbabbbaacaabbacbacbaabcccbcbbbbaacbbaccaaaaabaccaacccaacaaabbccacababcabaabcacbcbbcabbaabcbbabaacaabccccbbbccbbcbcabcaacbabbbcabbaaabbbbaccaaaaaacacccbbbcaabaabcacaccabacacccbbcaaccaabcccbbbbbbacaaaaacbcacbbacbccbaccbbcbbcbbcbbaabbaaababcabcccabcccbacacccbbbbccbbcaacbacbcbbbbccbbbabbacabcaaacbcabaccbaaaccbbbbbaacccaabacbabbaacacacaacbcbacbabbbbcabcbaccbbbbcbcaaacbbcabbbccbbbcabacbbacaaabcaacacacaaaccabababacbccbacbcbbbcbbcbbaacccbcccbbcacaabbabaabbccbccccbccacaaabaaaccabaccaaacbcacccaccabbaacbbbbabaccaabbbccccbbabcccbabcabaaabaaabbacbaaaacabcaaccacaaaccbcbababbccaacabbcbaacbcbcabaaccccbbbabbbbbaabbccbaababbabcbbbbbbbcaabbacccccbcaaacbcaacbbbbccacacbabcabacbccacbaacacbacaabaccbcacabcbcbbacbccbbbaaaacbccccbbcbaacbaababacbbbccbbccbcccbaccacbabcbabaabcccbbcabccbacacbaabbbaacaccaabcccacbcbbaccaababccbacccccabbbbbcbbbcbaccbbabbaccbbbbccbacbbcabbcbaccababcbcababcabbcbcbabcbbaaaabcbbbbcbacaaabccbcbaacccabacbbcbbcbcaaaacbcccbcbabbabbbcccbbccaccbccbabbaacabacbacacababbcbbbacabbabcacaacbbaccabaccccabbaacacabcbcccbaaabcacbabaabaabbaccbcabccabacbbbbcbabbcbbacabbccaacccbbcccbabccbccccbacaacccbcbbbabcaccacbccccbbaaacacabcaaccaacaaabcbcbacbcabcbabaccacbbaccbabcacccbacccabbcbcbcccabccbbaabbabccccbabacaccacbcacabcacabbcbbbbabcbcbcbbbcabcaccbbaaaaabbbbccccaaabbcbbabccbabaccbacbbcabbaacccbbcbacccbcbbcbaaabbccccabbbbabcacbaacaaacbbaabcbaacbbcababccacbbcacbacabbbbbaccabcacccbabacabccaccbcabbabccacbcabbaabcbcccbacacbbbccccbcacbbbacabbabbbabaacbabcacabaaccacbabcccbababcbcccbcbbbabacabbcbaccbcbbaaaacabbccaacbcbcabbacccabaacacccbbbacbaaaaabcabbcbbccbcccabaaabccaabaabcbcbbabbccaaccacbbaaabbbbbabacbaccbcbbbccacbabbacbbbbbbacabbbbbaabacbcbabbaaacabccbbacbcbbaaacbbaabcbacbabbcbaccaccaabbaabbbcbbcacbbbbacbaabbaaaacbaaaabaababacaaacbbbbbbccacaaacbbbacbcbcaaacaababbaccbaaaacccacbacbaaaabbcaccbcabbccbbcaaccbbbbbcccaccaccbcbacaaaaaabacccbcabaabaacaaacabaababccabacbbababaaccccbaacaccbcabacaabbccbcbbaabbcaaacaccbacbbabaccacabcbbbccaacbbaabaaacbcccaabacaccaaacccabbbccacccbcacabacccabccaaababbaccbabaabacbbccbccbccabbbbaabbbcaaaacaccbcbabaaaabcaacbacababcbababccbcbaabcbbaaccacbacbaacbabcacbaaacacaccbaccaabcbaabcbabaacbacccbccaaaacbaaaaabccbccccacbbbaccacbabaacbbacbbbccabcccbcbbbaabccccbaacaabbcabcbbbbbbbaaaacabccccbcbababbaacbccaccbbabacbcabbbbabbacacbbaaaaabbacbbacccbbaacbccbbccaabbbccccaccbaaccacbbaaababacabbcbcbabaaacbcabcaacbaabbaababbcaccaccaababbcccacaaaaaaabbabcababcabccaccababcaaacacbcabaccacbcbccacbcbcccbbacabbbbbcbbacaababacabacccaaccbabaaabbccbbaababbccbacabcaccacbaabbbbbcbaabcbcbcbaabcccbabbcbaccacbcbbcbccabbacbcacbcbbccccabcbcbaccccbcbacaababccbcbcccbccabccababacbabbacaaacaabcccbcaabcbbcabbacbbcbbcbcaccaccbcbaabbacbacbabbbacccaacabcaacbbcababacacaccbccabcccbcbcbaabbaaababcaabbabcabaabbaababcaacbaaabbbaaaacababbaccacaabbcbccbbccacbbabaabcbbbcbabcbabaaaacabbbbbbacababcccccbcbaaccbbacbbbbbbacacaabbababcbccaacccacccaaccccababccaaaacaacabbcbcabcccabaababcccaaaccabbbaccbcabcbccabccbbaaabbcabcacaabcacbcaacccbbbbbabaccbbccbabbcbcbacbcaccbbcbccabbcbcbcacbcababbcaabaabaaaccbcbbccaacacaccbaabbccbbacbacaaccaabaabcaabbaabcabbbbbabccabcabcabccbbaabcbaabcaabbbbccaacbababbabccabaccccaaaacabbabccbabccbbbaabbccacbbaaaacacbacabaaabbacbcabbbabaabbabcbbacbcacbbcbacacabbacbbbbbaccbbabbaacabaacabcabcabcbaccbbcbcbabcaaacacacccaacbbbcbbcabbacbacbaabbcabcaaacccabcbcbbbcabbaaabbcbaaabcccccbccbcaaabbbbabbcccaaabaaabbbaabccacccbbcaaabaccaaaaabbababcbbacccccccbabbcbcacccbcccccabcababbabccababbabbaabacbbcbbbbbababcaaccbababccbaacbcaccbcccbaabcabcabbacbaaaacaccbccbcacabaaccbccbbacccacbabaabbcaaaaaaabaacccaccbbaababbaabcaaabcbbcccbcabcbabbaabbabbabaaccaabacbacbccbbaccaccaaaaccacbbbabbabbcbbbcaccccaabacabbbbcabcbabcbcccaabcaccabcbbababcccaccbcaaaabbbaacbacbcbaaabbbbaabbcabccccaabbabccccaacbaabcaabaaacbbccbabbcbaaccabbcbbbbabbbcababcbacbbaaaabaabacbbccaabcbbacaacabbacacbcbaaabbabacbacbbaacccaacbababbcaccaacaabaccaabcbabbbaaacabaaaabbbcbbbcccaababbcabaaccbaacbacbccbccbacbbabacabacbbbaaaaaccccacbbacaacabccbcccbacabbabbbaaacbabbacbabaccccccbaaaaccbbbcbaccabcbbcacbcbbbccbbbaabcbcbaababbcbcccacaababbbbbabccbababcacabcacbacbcbaabbabcccabaccbaccbccbababbcaacbcaabacaabbcbcbaccabbccbcabaaaaccbccbcccccccabaabcbcbccccacaccabbbacccababababcccaccaccccccaccbbaaaacbcccccaccbcacbcccbbacbaabcbabcacbcabcbccbabacbbcabcbabcabcbbabacccccabbbacabbacccbababbcbacbabaacccbabbcbaaabbccaabcabaababccacccbaacbcabbababccaaabbccaccaacacacbacbccaaaaccacacbaacccaaababcbbccbaccaacbbcabcbabbbcbacabcbccbcbbbaacaabbbcabcccacbbbabacccbbacaaacbccbcaccbbbbcbbbcbbcaabbcabcccacacbbcbccbcbbcabcbaaabbcbabaacbaabbcacbbcbabcacccbcbcaccabaacccaaaacaabcaabbccbbbccbcaccbbbabcbaababbabbaacababcccbbaabaccaaaaacacbbabbacaabbbbbabbcbbcaabccabcabbbbcbaabbbcabacabcbaabcccbccacccccbccabbbcabbabbcbaccbcbbbcbacbabbcbaaaaaccbacbcbabbacaabcacbcacbabaabcabbbbbbcccccabcbaabbccabcbacaccbbbbacabbcacaccccabcacbcbcababcaabbbbccbccacabbccaabccbaacbbababaaaaaaababacccbabccacbaabbabaacbbaccaccbbaabacccabbccaacaababccbaacacabaccacbbbaccccacbbccbccaababaabaababbbbacaacccbbcccccaabbcbcbbaaacacacbbbabccabcacacaccabbaacbbabaabbcccbccaaabbabbaacacbccccaacccccaccccacabacbabacaaccacacccacaccaaabacbcccacacbbbccbcbbbccbccaacacababbaaccbcccbbcaacabcccccaccabacaaccacbababbcbcaacabaacbbcaaaabbacbabaccbbcbaaabbcaaccabacbbcbaacbaacccbbbcabcbaacbccbbbbbbbbaacabaaacacabccaaacbaacbbbbcabcacaacacbabaaccbccacaabaacbaaaaabcbacabbcbcbcaaacaaaccaaaacaacbcbbcbcccaaccaabcabcbaaacbacbbbacaaaacbcbaaacbbcacbbaaaabccabcabccccbcabcabcaacbcababacbcabbcbabaabccbcbababcbabccbaaacacaaaaacccbcaccbbacccbbbbbabbbbbabccabbabcacccbcbcbabbabbababbabbcbcacacacbacbbabacccbcbaaabababaabcaaacacccabcabcacaacaccbbaaaaaacaacabbabacbbcccabcababaacbbabaaccbcbcbacacbccbcbcaccacbbbbccbaccaacaababcacbbbccbcccaaccaccacacabbbbbbcacbbbcccaaaaaaacbcbbccbabbbbbabbabaaabcacbaaabcccbbabbbacacacabacbcbacaaaaccaaaabcabaacbcaaccbacaccaabcaaaabaacccbcbaccacccacaababacacbcbcbabbabccbccaabacaacbccbaacbccbbccabccbbaaccbcbacabaaacacababbbaabbabbabbabccabaababccabbcaacbcababababccaabccbcaacbbcbaacccbabaaaaabccabaaaababbaccbbcbbaccbbaccbcbbcbccacbcbcaccbccacaaaababccbacbcabcaaabbbbabcbccccbcbaaacbabcaabbcbcbacaacbcbbcbabcabcabacbccabaccbcccbbbbabaccbcaabbcaaaacccccbabcacccaccbaabbabbabbabcbcbacacabacaababaacbaccbbccccabaacbabacbbabcbbccbbaaaacaacccabbabbabaaaaabcaaabbbccbcaaacbababcacccbaaaaabcacbcbabcbacaaccababacaabbabbaabacccaaabcccabccccbbcbcaacaaaccacabaaccbcaabcbbccaabbbbacbcbcacaaaaccabcbbccbbbbbacbbcabbbabaabccbbacbbabbbccabacbbaacacaacababaabbccbbcbbaccacbcbabbcbbcbbbaacacabacaaaacccabcbbbccbcbbbbbcbbcacbbbbcbbcabcbbcbcbaacccababbccbcbbacccaabaccaabcbbbbacbbbaacaaccabcabacbbbbbbabbccbaaaaabbbcbccaabcaabaaacababbbcbbbaacabcbcbabaccbaaacacbabbaabaccabcaaccacacabaacbcbbbbbaaaaaaccbcbaaacabbaacacbababbabbccbacbaaacbbababcabacabbacbacbaabbbccaacbaacbaaccbcbaabbcbbbcbcaccacbccccbcaaabaaabcacbbccccbcabbccbccacabaabccabbcbbaaacababbabbbaccaabcccbbbbbbaabbcccabcbbbabccbcabaaaacbbabcbbccaacabcacbabbacccababacccbbcaaaacabccabcaaaacbcacababbccacccbcbcbbbbbabaaababcccaaccccccccbbbcacbcccababbabcaabbabbbaabacbbaaacccbaccbcbcaaaaaccbbccccbbbaaccabcabbbaacbcccacccaccacccbcbbcabaacaacccbacabcbaacabcbabccabccbbbaccabbcaacbaababcabbbacbbcabcaaaaacaccbcccaabbcccaaabccbcbabaaacccbaabbbbbbcbaaabbbcaabccaaaaaaababcacbabaaaaabcabaacabcaccacbcbcabaaccbabacbabaababcbcccbaababcbcbaabbcaabbcbccacbabccbbbcbbbbbcbcbccacbabacabacacacbcccbbcccaccbcbaacbcabcbabbacbcacabaacacccbaaaccbbbbcabbabbaaaaabcbbbccbcaccaaacbcaabaabacbbaacbaabccabaabababacbabcccbbbccccabcbcccccbcacaabbbaaccbbcabacccabcaaabccbabaaacbbaaabbbaacccccbbabcbababccaabbbbbaccabbacacaabaacbacaacbabbaabcacabcbaaacabaaccccbacccbcabaabcccaccaacbcbcbaacabbaababbbcbcaccbcccaacabbccabcbccabaacaabcbbcabcbcbbbbbbabbcbbacbacacccccaabaccaabbaabcaccbccaaacbaabbaccaacbbccbcaaacccaccbbcbaaccbbcbcaabcaacbacbbabcaaaccaccacaacaacaacbabbcbacbbcbababcccacabcacccbacbbaaaacbacaaabcbcbabcccccacbbcbcbcaaacbccaabaaccbbbcabcccccabaacacaaabbbcacbbcaccccbaacbbbbccbabcbccccabcccbacabaababbabbcbaabbaabaabacbaccccabbbbbcaaabbacaacbcaaacacccbaaacacbbcccbbccbcbcaabbbbbcbaacbcaabbbaababccbbabababcabcbcabaababbbbbcbaacccbabbaabbaabbacaaabccacacaabaaabaccabbacbaabcbbcbaabbccbcccbaaabbcbcaaaabbcccbaccacabbcccbabbabcaaabcbacbccaabbbacacbbabbbacabababcabcaacbbcbcbaababacacccbbbccbcbccbacaaabbccaabbcacbacccccccbaabacbbbbbabcaaabbabacacbaabbbbcccacbbbcaaabbabacaabaacbcbabcaaaccabbbcbcaccbbbabcbbabcabbccbacbaabbaccbcaacabcbbaababbbacbbcabaacbaacacaaacbbccccacbabbbcaabaacabbaccbabcbaacccbbbaaabaacaaabbbbcccbbbbbbcabccaabcaaaccbaaaaaacccbaccabbabbbabcccbbcccbabccabcbbccabbacbbaaccbbacbbaacaaaccbacbaababccaabbcbbbacabcccababcbbbaabcbbabacbcccaabcbaabcbbaccbbabccbbcbbccaababacacccbbabbacabbabaaccbbacbcbcbbcccbcacccbaacccbbbbaccabccaccbccbbbcbbabbbcbabbbbcaaaccbacacbaabcbcbcccbcaccccacacccccaccbaabbbaccbbababcaccbcaaacbbabccbabaacabccbabccacaabcaccccbbbbabbaacabcbacccbcacbbaabacaababbcabacbccaccbcbaccbbcbcbabccaabcbbabbabaaccbbaccaaaaccbbcbabacccccacbcaababacbababbbcbababbbabcbbacbccccacaabbcabcccbbaacbcbacacabbbbcccbcabbaabbbbabacbbcabbbbccaaccbbbbcabcaaabaabbbccbbccbacccbabccbaaaaacaaabaaabbababccbbbabcccbccccaaaaaaccabcaabacbbaacaacbbbabbaabbaaaccbbcaaaaababcabaabccbabbccabaaccbacbbbcbbacbacbabbaccaaaaccccaaaccbcbabbbcbbccbbaaababacaababababbccacbaccbcacbccbacacabcaacbcccccbabababcabaacbcabbbbbaabbbacabbbbbcaabcaababbccccbbbacacaacccbcaaccabcbbaacbbbccccbabcbbcbabbcabcbacabacabaccbbababccababaaccaabccbcbaccbbacabccbacbcacbbaaabaaaabcabcbbacaccbabbaccccbabaabaccbbcaabaacacaabbcaccccacacacbcbabbcbabbcaaccabcabcaacbccbcbaccacaacaabbacbcccabbbbbcaccacbbaaaaacaaaacacbabbaaabbbcabbaacacaacbccbacccccaaaabcccaccaaacaaacabcbaabbcbaababbabcbcbacabbcbccabcbccccbabaccccbcbcccacaaacbbabaaaacbcabcbbccabbcbabcbbbaacbaabccbccacccbaabaabbcaaaccccbcabcbccccaaacbaaabbcbbaabcaccccbbabaacccaabacabcbcaaabbbbbabccbcbccababaccbcabbccacabcaacaababbaababcbacaccaaabacccbababbccacbcbaaacccaaabcaccaacaaaacbccbcbccbbcacaacabbcaaaaabbaccbacbbccbaabbbcbbbabcbbacbaabbcaaaccbaaabcaacacbabbbbaaabcbcaccbaabbbcccccbbbcccbcbcbbaccacbabcacbacacbaccaccbcbbcbbcacccacccabbccbbccbbaaabcabbbbbaccbabaacccabcccaccbcacbabccbbbbbbccbbbacaacbbbbcbbbcbacbcacbacbacbabbabcbccbccabbbababccaaacbacababacacbabcbbccbcbccacacaaaabcbcacacacbcccbccccbcbbbabbbabcaccbbaaabaacaccacbcbabbabbbbcccacbbbabcbbabbbaacbcbaccabccaaaacccaaccbccccaaaababbcabbccccabccababbbabcabcbbccccaabaccaaaccabaccabacacbbababcaabacbcabbccaccbcbcbaaacacacccacccbaccccccbacbcabbaaaaabcabbacbaaaabbcaacbcaacbaaccbacacabbcccbbcaabbcbaaccabbcabcabccacccccbbccaccacabbaccacbbcaacbabcaacbcccbccacbabcaccbcbccaaccaccbcababbaaaccbabbcbccababbccbaacbaaccccbbabbaaacaccaaccaacccacbaaaccacbaaabbabababaabbaaabaaaabaabbcbbbcbabccbcbbcbbcbbbabbbccaaaabcbbaccaacaaaabbcabcbcaaaccacbbaabaccabbacbaabcabbbcaaccccaacbabaaaaccccccaabaaabbbabccbacccacabcccababaaaacbcabbacaaabcbacbccbbbbabccbbbcbabbababbbcbbbbabaabcaacabbbaaabacbabbccbcbcaccaacbccbbbbcbbcaaccabbbbcbccbbbccaaacaccbacbaccabcbcababbacbaaabaacbccbaaacccccccccbacaabbbcbcaabaacbbccbaaaabaaabcbbbbbbcabcaabcacabbabaccbaacbbacaaaacbabcaacbbbabcccbcaccaccabccccacbbaabbcbabcbacbbabbaacbcaaaaabbcbcbbbcaccaacbcbbcabbccbbbaacaabcbcbcacbacbaacbbbabcbbbbbababbbaacabbbcacabaaaccbbbaacaacacbacbbabbbaccabaacbabaacbacacbabcabbcacabacbbbbaccccbabbcabbcaacabcbccbbcabbcabbcaccccacbcaaaabbbabbcbaaaabbbbabbcaaaccbbaaaaaccbaccbacccabbcbcccabbaaacbabcaccabbccbbcacaabcbcacacaccccbccaaaccbabcaabbbbaaabacabcababccaccaaaaabccabcbbacabcbbbbcbcbbaabcaabbaccaacaacbabbabbbcacbcacbbacbacacacbbabccaacacccacbaabaaaacaababcbacccccccaabaccaaaaaabacababaabbaaaabacaabccbbcacbbaaaccacabcbccbbcbbbaaabbccbcbbcabccbaabbbcbbbbccbabacabaabacaccbcabcabacababbbaabcabcabcbcbbccbcbaabbcbbbbaabbcbccbaabababcccacbaaacaccccbaaaacbcaccbbabaaabbacaaccababacaaacbabaacbcbbabbaababbbcbabaaccbaaccacbcaccbbcbbbbbcbbaababccbaacababbacaccbcbaabacbcbbbaaccababbcbaccabcabbaccaccbababcbcaaaaacaaabbccaacbccabbcabbaacbaacabccabcaabaccbaccbcbcbacabbbacbcbccbcbbbaaccbbacaccbbbcaabbcabbccaaccbacaaacbbabccbcabaaccbccacccacacbcbabacbbcabbcbbacccccacacbbabaaacaaacacabaacbaacbcaccaabaabababccabbbbabccbbacbbbabaacabbabccccaaabcaabacaccbcabccabccabbbbbabbbccbccabcccbacbcbcbbaccacacccaacaaacabaccccababbbbbbbacccbabcccabbbcacabbaccbbcaccaaccccaccbaacccbbcbaccbabcbacababacbaccbccacacccaaabcbaacabacbbcaabbbaaabccbabbaaacbacaccabbcccbbbbaacbbbcbbbacbbcacccbbbaababcbaaaaabbabcaabbbaaabbaaabbbabbacacccbbccbcbcacbcbbcaabcabccbcaaccbcaaacbacbcbabbbcbbcccaabbacbaabcaacabaabbbaccbaabcababcbbacacbbaababacbbcbbaccbbccbaaabbaccabaaaaaccbcbaccaacaaccbccbbabbcaaabbaccbabbccccbbcbcbaacbbcbababacbabcccaccacbccabaaccacabcbcaacccaccacabbbabcbcbbbbacccbcbbbcabaaccaabaaaacaccbccacbcacabaabbcaaccbacacabaacbbbbcbabcabbaaaacaacbabaabbbabaaccbcaaacabcabccacbbbcbcabcabbccaacbacaabbccbcbcbbcacccabcbccbbbaccacbaabbbcacccabccbbacacaacbcacabcabccabbbbbabaacbaabacabaabccaaaacccbacccccacaccabbcbcbaccaababbaaacabcbbcbbbcbbaabbaaacbcbbaabcbbaccbbabcbcbcabcccbaaacaaccbaccaaacccbbcabbabcbcaabcabbabaaaccaacabaabbcbbbbbaaacaabacaaabbcacbcabbccccbcbbcbcbbcaabaaacaaacaacbababbaabaaacaabcbbabcbcbacbabcabbcbbaaabcbcccccaacaacabacbcacaccccabacbbaabbcccaccbbbccaccbccabccacbcaabaaaacbccabcbabaaccaabcaacbbbacbcbaaabcbabcaaaccbcaacaaacbaabaaaccabcabcbcacbbcaabccccbbbacbbaaaaacabcbacccbcaaaabbbcbbcbcbabccabcccaacccbacccaacccabacbccbbacccabbabacbacbbcacbaaaabbcbbaabbbacbcbbcbabbbbacbccabbcbbccbabbccbcccabccbacababccacbcbccaaaabcaacacbabbcbccbcbbcabbbbbbabbacbcbcbccabbccbaccaaabbbabcbaacbccabcaaabbabaccbaaabbbabcacccbacbbbcabbbcbbabcaabcbbcaacccbacccaabbcbabccacbbccacbacbabcaabbbcaaabbccbaacacbcaaaaaaaccabcabcccbaacabbcacccbbcacaaaccacabacbbaabacaaacccaaaabaaccaacbaaaacacaccabcbbbaacbbbcbcacaabaccaaaccaccacacaaabaabbbacabbaaacabcbabccaaaaccbacaccaccacbccababcbcbaaccbabcaacbccccaacaaabbccbabccaacccccbcbbcabaccbaacbcbcbcbacababaabcbaaccabbcacbaabaacaabababbbaccbacbaccacccbcbcbcabcbbbbbbacbbaabcaccbaacbbcccaababaacbccaaccaabcabaaabbaacbaccaacaabbacabbacccccccacbacaacabaabcabcbcacccbbbbcbacbcaaabacbaabccbbabbcbbccacaaabbbaccabaaababccbccabccbcacababcbbcbccbccabbacabccaabaaaacaaabbbbcaaaaccbcaabbbabaccbaaccaacbaaaabbcbccbabaaacababccbcbcbabaacbcbaccbbcbacbbbbaacbbabbcabaaaccbbbcababbbaaabababcbaccccacccccbbbbacaaaacaaacaabcbacbacbababbccbbabcbacbbbacbcbaccaaababcaaaccbbabcabbbacaccaaabcaabbabbabaccbccbbacbbcacbbccbbcaaababcacccaacaaaccbcbacbaccabcaccabccccaccbcabcbcacbbccbbcbccabcbaabccbabbbbabaacacacaabcccbaccabcbaccacabacacabccccaaaaaabcccabaabccaacbbccacabbbbcaababccbbacacbccbbaaacbbabcbacbaaabbbabbaacaaabbbbaaaacababbbbcacbbcacaabbcabbaabcbbacccbccbaaaacabababaccbaacabcbaabcbcacbbbcbabaacaaacccabbaabcbbccacacbbcabcabbcccaaaacccabbbaccacbcacabbaccccccabaccccbabbacaaaacababaaacabbcbbbcbcbabbaccbbcbbaaabccbbabccabcbbbbaabcaaaaccbcbcccbcacaccaabcaabbaccccacbaabaaaaaaacacabaccbccaacbabcacbbabcccbaaacccbacacbaccbcabcbbaaacbcbccbbbbbbcbaacbccaaabacbcacaccabcbcbacaacabbaccaccaccababcaccbcababcbabaaaaabbbbbbcabbcacaccbaccbabbbbacbcaacaccacbcbcacbcacbaabaccabbaacabcbacbcbabcbbccccabcbabaccbbbcaacbcbccbaabcbccbcbcccccacababbbaccbcabcabcccaccbbabccabacccabbbccacccacacbaaaacbbaabcbcbabcbbbcbabbacbcbccbcbbbabbbacccacbaccbbcbbbacbbaaaccbabbcbccbccbccaccabaaaaacbbbcaacbcacabababbcaabbcbbbacaccacbacbcacaabbabaacbccababaabbbacaaabcabbaacbcaacabbaccbabbbcbbcccbabbbbbabbcbacacaaccabaaaaccbcbbbbcbbacaacbcbacbbcaabbacacaccabbacbbacbbbaacbbbabccabbcbccbcacacbaabbacbbbbcaaabccbbaabbbcabaabbcbbabcbaaacccabccbabacbbcacacccbaccaabccabbabccbabcbbbbaccabacbaccbcbbaaababbcbcabbaaacccabcbcabccacabbccbccabbabbcabcbbcbabcabcbaccacabbcbbbbbcabcacabacbcacacbbbbaaabaccbaacccbbbcccabbaacacccaaccccaacccbaabbbacacacabcbcbacccabbbaacccbaaacacbccccaabbcabaccaabaacaacccbcaacbcabbbbccacbbabacaaccacabbcbabcabbaaaabaacbaabcaabccccacabbccbccababcccbccbabcbbaabaaaccacaaaaaccacccccbbaacbbabbbacacbbccabbaabaacccaabcccbcbaaaacccabbbabbaabcbccabcbbacaabacbabcabbaababcbbbbcaacbaabcbbbcbabcaacacbcacaacbcbacbabbabcabbaccacabbbabccacbccabbcbbccaccbabbbcbcacbcbaaacabcacbcaaaccbbbaaaabaaabbccbbbbcaccccabbbcababbabcbbabbbbcacccacccbabccabcabbcaabcbbaaaacbcabacacabbbcbbcacababcbbaaccbcbcbacaccbbccabccbcaccacbbaccbccaaabcaaacaabaacacccbaaccacbbabbaacbbbcbbcbaabaabcaacbabbcbcaccaccabaacbcacacabaabbbcbcbbbaaabcccbaacbaaababcaaabbbccbcbbbcccbbcabcccacaababcbcbbcbaacccabccccccbaacaaccaacbcccccaccbacabcbabccbbcbbbabccbbcbabacccabacabaabababccbabbbcaaabbbbcbbacbaacbcabbacbaccbcaabbcabcccaaaaaccacaacabaaabacbbaccccbcaabcccbbaabaaaaccccacabaccbbaaabcccabacbbcabcaaabcbcaacbabacccccbbcbacbaccacabaaacabaaaccaaccbbaaaaccbcccbcbbbaababcbabbacbacccbcaacaacccacbcbcbbbcccccaccbabcabbbaabcbbaccbabbbcbcababbcabcbacbcbbabbcbbccbabaaccbbabacbbbbcbabbabbccaacbcbbaaccbabbcbcbbccaaaccbaacbccabbbcacacacbbbbacbcacbaaababccaacabbcbccbbbbaabaabbccbbbbbbbaaabcbbbccaababbabbcaabcbbccbabcbaaabcaacbbbbbabccabbaaacbccbbcbcacccabbaabbccccabcaacbacacccbbccaabcbcbcccaabacbcabaccaabbbcbcaabaccbbacacbaccabacccbcaaacccabacbcabcbbccabccccbababcbaaabbaaccacacccabcaaccbbcccccabbcacaccccacccacbbcaabbbbcbbabbacacbcbaabbccccccabcbbcbccccbbbccbacbabaaacccacaaccbaacbaaccccacacaccababcbabbacccaccbbbcbccbccbccbbbabaccacacbbabaccababbcbcbbccaabacbcbaccbcbabbcbaacabbaacabbbbcacbccbabcccbabaaacbaaaccbbbabaacaaccaccbbcbcacacabcbaabbaccaaabbcccccbcacabcaacccacababcabcbccccbabbacaaacccccacbbcccbbababbcbbacaccccbbccbcacabacccbbbcaacccaaacabbabcaccbcccabcbabaabbcbaacbbabacbcaabbaaabbbbbaccaaacaaababccbabbcbaabbcbcccaaaabbaaababbcacccbcbbacaacbabbbaacbccaaabcbbbacbbcbcccccaccacbcacacbabaacbabbbaabbbbbabcbbbacaaabbacaaacabbbabaccbcccabcaacacbccbacacabaacacababbcbbabbbbbcaccbaabbbcbbbababbccbbcaaaccbacabaababaacccaccbcacbacaaabcccabbacccaacbacabcccbaaacbbbccccaaacabbcbbaccbaaabacaccacbbbbccbaacababccbabbacbbbccbccccaaaaaaabcbaaacabcbabccbabbababacbccbcbcbaaaababacccbcbbbcacaabccbbbababaaabcbcabbbbcbcbbcacbcabbaacaccbbbcbaccbcbcbaaacbaaabcbaaabbcbcbaacbacabbcabaaaacbabcaaaabaabbaabbaccacbacabcaaaabbccaabbbcbaccabaaaabcaaaabbacbbbcbaccaacccaaacabbabcbbcbaaaccbabbbabcabbcacbbcabbaaaacccabcccbbcbccababccabbbcaaaaababcbcbbcacbccacbbaccbbcaabcabccbacbcccbbcbcabcbacccacbbcaaaacbccccbabbcbbabaccbbcacacabbcbaccccbbcababcaccaccaabcacaaaacbcbbaabaaccacbbacabcacbcbccbbbcbaacacbcacbcbbabaabbaabccacbcabaaababccccbaccaaccaccabbbcbbbbabacacacbccbbcbbabbbbaacacbaccaacacbbbabccbcbbbcbbcbcbabbacbbcaaabcabababacbcccbcbccaaccbbaccbabcbbbaccabbbbcbcbacaabcaacbbacaabbbaacccacacbccbcaabaaabbbacaaabaccbbacbccaacaabccbcaaacbccbaacaccbcccaccaacbabbcbaaaaccbcaacbbaccbcaacbbcbacabaccabcbaacaabcbcbbcbacaaacaaaaabbbaaccbabcabcbbabbacacccbbbcbbabbcbcababccabbaabaabbccbcaaabaabcabbaabbbccabacbbbbcbabaacccbabcbbcbaabcaacccbcaccbbbabbacaabcabbabbaacbacbbcaaaacbacccbbcaabcbbbcbcabbbbcabacaababccaaccccababacccacaacccaacabbcccaccabcbabacbaccaabbabaaaacccaccccabaaabcbbbbcccbaccbcccbcccaaaababbbcaaacabcacacbcacbabcccccbabccacabababaaaacbacbccabacabbaaabacaaabcabbbbcaacbccaccccacbcababbcaccbacabcbbabbababccbbccccccbcbbcbcaaacaccaccacbcbbaabaabbbaacaccbcbcaccbbccacababbcbabcbbcbbcbccabccbabbaccbcabbaccaccaabcaccccccacacbbaccabaccbbbcbbbabbbacaababacaacbaccbcbcccbbaaccbcbccabccccaacabbbbabcaaacaaccbcbcaabbbbbccbccababcabbbbbbcbabbabbbccbccabaaccbacacbacccccbaccccbccaabcccbccabbabbacbcacabbccbccbaaabbcbbabbcaabcababacccbaacaccabbcaccbcaaabbcbbcabcbcabcacabaaccbacaaaaacbccacccccccacccaccabbbacccacbbabcbcabbcaccbbaabbababacababababbbcbabbcbcacaababaabaacbacacacacccaabcaccbcbbbccccacacaaacaccaccbaccbacacbbabcbcaaabcacccabccacabccabaabccabacbccaabaabaaaacbcabcaccacbbabcbcaccbbbccbabcacbccabcacccbababcacabcabacabcbcbabcabbacababababcacccbacccabaaacabbcabbaccbbbacccbabcccccbbbcacaccaaccaababcabbcacabcbcbcaababccbbcbaaaacbbccaabbbccaccbbcbcbcbacbaccbcaaacacbbccacccbbbccacaaaaccabaacaacbaacaaabaabcbcbbabaaaccaccbaaaabbabbabbbbabaabbbccaabcaccbbabbcbbbcabaccbaacacacbbbcbaccabacbaaabbbcaabacccccacabbbbbabababaccaacbaababccaababbaaccaccbbccbbbbaccbccbcbbbbbaabbbbaccbccacaccccaacacabbbaababbcbccbacbbaabaaabaacccbbcbbcaccababcbcbcbcbabcacbaabbcabaabbbabbabaaaccabcaccbcbcccbacbccbccccabaccbbabababbabbaabacabacbbcccbabcccacccccbacbacabbbbcbaacbbaaacacacbbccbccbbabbbccacacabcbbccaacbbbacaccbcccbbcbacbcbabacbccaabccbabcbbbbcbaaccccaccacbaabccbabbabbaabbccbcbccbbbccbaaabcbcbbaabccbacbbbbcccacbbabbaaabbbcbbccabbaaabccbabccbbbacccacccacccbbccaaaccabaaaabbccabbabcbbbccccaaacbbbaacbbbbacbbbcbbabbcabccaacaaacbaacbcaccaacaaabacbaacbcacaaabbbbbaabbcaacbbabcacbaababcbcbbbbacaabbabcacaccbccbbacacccaacbccaacaaacaaaabbbababaaacbacccccaacbcacabaaccbacbcaccbbccccaabaaaabbacaccbbcbbcbbaaaaabaccccaaccbccaccbccabccbacbaaaccccbcbbbaabcbaabbcbacaaccccbccbbbbacacabccbcbacaacbcaaccaabacabbabcaaacccccacbbccbabcabaccababbbaacbcbccbccacbcccacbacbabacabcbacbcabcacbcbccbcbbbbbabaaababbccababcbccbabbaaabbcababcaabaaacccaaccabacccbcccbcabcabcaccaaabcabbaccabacbccbaabcbbacccabbbabaaaccaaacbcbccbababbbacaacaaabcacaababbcaabbacbabbbacacbaabbccbababbcaabcbababccccbabcbbbcbcbacbcbcabaccbccccbaaabbaacabcbbacaccbaaabcbaaacbcaabaaccabbcabbbabaacbcccbcabbcacccababcbbbbcabcbacaacabbacbbabcaabacbbbabbccaaaaacbabbbbcbcccbaacaaabacbacbabbbccabcbabbabbaccbbacacbacbccacbaabbcbccbbbaabbcacccbabbbabbbcaacababccaccacbbcaaaabbbccbbcbcaccabbaacccbacbcacabbcbbbacbaaccccaaaccaacbcbacbbccacbbcacccacbabaaabbbcaabccaacbbcbccbbaabacaccacaacaaaaaabbbcccbbcbbbbcabababbcbccbcbbbbcaabbccbcaaaccbbccabcaaacacbcbcaabbbbabacbaabbcacbbacccabaacaacaabbabacaaccccbccbccbbaaaaabcaacbccbcccaaabacacbbacaacccbcbcaaaccabbbabcbcaacbaccacbbbaccbacbacbcbcabccccccaaabbaacabccaaababbbbaabbbbaabcacccacabbcbcacbbbaabccbaabacccacaaccaccbabccbcbababbcaaccaaaaabbbacccbbbaaabcabbbcabaccccabbbabaabaaccbaaabcbbbcaaaccbcabbaaaaccccbcbbcbacbbbabbcbaabcccccaaacabbcaacbcccbacbbaaabcbcabbacabbcbabbcaacaccbaabccaaacbaaaabcbbbbabcccbbbbbcabccaabbbaababaccbbbbbbcbcbacaaaabcccccbaccbbbbacacbabcabcababcccccbaccccbbcababcbabaacbaabcababcbcbcbaabaacaccccabcbaacbabcbbabcbcabcaaacccacaaabccbcbacbcbbccbbacaccbbcccaccaaaacbcbcaabcbbcbccbacbcacabacccabcaababcabbabcbbbbcbcbcabcabbcabbbcccabaaaababababaacbbabcbcbaaaabccaacabcccbbaacbccababcbaabbbababbbabbbcbaacacbabacaaabbbcbabcacacccbbbccacaabcacccacbabbacbacbbaacaaababbcabaabbcccacbccaaaacbccbabcbacbbabbbabbbacaabccbcbbccccbacbaccaaaacaaccaccabaabcbbbbccbcbccbcacbcacbccbccbcbacccacbbcbaacacccaabbbabcaabbbabcacbbcabbcbbaabbacaccaaabcbbaaccbccccbbcbaaaaaacabcacbcbccaabcacbcaaaacaabacacccbcbbbcaabbcbbcababcacbacacaaabcccbbbcabccaccaabcbbbccaccacacacbccaaaabcbcbbbccabcabbcbbccbbbcaccccabbaabacabbbcbaacccbbcbcaaabbabcccacabbbabcaaaaacacbbcaacccccacacbcbbcbbabccabaacbabccbbbcaabbccabcbaccbbaacbbabaabcbbbabccccbaabbcbcacacbccbccaabbcccbcbabcabcabcababbcccbacbccacabbccccabacbcaaaabacbacbcbaccbaaaabcbcbbbbcbbbaacbacbacaacccbabacccccbcbbabbcbcabcccbacaabaaabcccabcaccbcaababcccbabbabccbcccbacbaacaacacacaacbcabbabbcbaaaaabcbccabccaabcbaccaaaccbacacabacbaaabccbcabcbaabbaccbaabcbccabcacaaacbcbbabccbcaccabcacbacbbacaccccbccbccccbbabccbcacaacabaabaccabcbbccacbcbcaacbaccccaacbaacaccaacaaababaabcbcabaccbbaaabbaabaccbccbbbcbcbbbcbccccabacbcbabbbbcbbbabbacbccaccccaacccaccccaabccacbcbbcccaaaabababbcaacbbaababbcaacbbaacaabcbbbaaaacbcabcabbcaaccaacbcccbcabcaaababbcbbbcbbbcacacbabacccbacabacbcbccaabcabaabcaacbcbabcbcababbbabbbbabcacabccaacaacabcccbbabbcaabcbacabbabcabaacccbbccbcabbbaccacbbabcaaabbbcbabcaabcbcababcbbabaaaabacaaabbbacccbbbbcabacacaacbccaccaabbabacbcaacbbacabaacaacaaabcacacbbbbccbabbcbccbcaccbabcbaacacbcbcacabbbaabccccaaccbccbaaaabccbbabcababacabbccbcabcbcccabbcaababccbbabcabcbcacbabacccbbaabccbcababcbaacabacaccbbbbbcbcbaacbccacccccbccbbaccabccbcbacccabcbaababaaabbcbcacabaaaababacccacbcccbaccacbabcacacccabaaaacbbaccbabbbbbbbcaccccbbaabcccbbaaabaabbcbabbcabaabbabbabbcbcacaaaaababcabcccacbbccbbacbbabacbbccbbcbaabbabbcbaacaaacbababbaacabaabbbbacccaabaabccabcabababbaababaccabccaccaccabaaababacbbbaaccbbcccaaacabbabccbcbcaaaccccabcbabbaaaaacabacacaacbbcbabacaabccbcbcaaabacbbcbabcccaacacaccccaabcacbbcaaaabbacaabcbaaaacaacccbccbcabcaacabcabcaaaaabbaaaabbabaabacbcaaaabbacbaaccbbcbbcccbbaabccacabacccccbbbbabbbbbcaccbcacaaabbacaaaacccccbccbaacacabccacbabaabbcbcabcbaacacbcbccbbaccaacaabaacabccccbbcbacbcaabbbbbbcbbbcaacaaccabbccbcbabbacaacaaccbacbbcbbcbbbccaaababcacabbabaacbcbaacbacbaacaaaaabccacbbbbaaaaccacaacbcacccacabcccbaabbaccbbbbbbbcacbaacbcacbabcaaaacbbcbabbbabcccabbbaaaaacccccacacccbbbcbacbbbaabaccbcaaabccccbcaacbaacccaababccccbbbcabcbbbaaabbcbcabcaaaaabcaaacbcbaccbcbaabcaabbacbaacbbacaaacccbbcacacacbbcbacacccbcccabcabbcabbabcccbbacbacababaccabababbcbaaaabbcaaaaacbaaacacaaaaccabacabbaaaabbbaacccbbacccbacbacabcabcaaacaaaacaaccbbaabbbcabbcbcacbaccacacabbcabcacbcbccccacbaacaccbccbbcabcbabaaabaabcbaccaababbcaacbaabcabbbcbcaaaacbaccacaccaccacbaa\nbcbbbabaacbbccabbabbacabaababacbbcaacababbaaacccaccbcabaaabbabaaacaaabbbcacbbbaccabbcacabbabaabacbbbccacacbcbabcacacccccbabcaaccabacbacbcbbacaccabbacabcaccabaccaaabacaacbacabcabcaababbcbcbbbacbabaacbaccccbaacbabaacbcabcbacaccbccbcaaababaabacbacccbcabaabcccaabcaccabacaacbbccbbacabcaaabbabbcccabbcbaabbbccabacaaaacacbbccbbcaaaabbbbaaccccbbacccbcbacacbacbbcabaabccbbbacacbbcabcacabccbacacbababccbbbbbccccbababbcacaccababcbaaabbbbbbacbcbaaccbcbabcaaaabbbbaccaacaacbbbcaacacaabbcbbabbbacababaabaaacbbbabbcbbbbbaccabbbcbaaabbcccbaacaaacbbbbacbccacabcbccbccaccbcccabacbbaacccbbabaaccbbbaaaabcaabacbacacacabccccbbcbabccbaabcccaaacabbcaaabbcaaacaabcbbaabbccbbabccacaacbabbcbbaccabccccaaaacccacbbccbcbaaacaaabbababcbbbcbcbbcbcbccacaabacbbaacccacacaaccbaaabccaabcabbacbbacaacacbbcaaabcabbbacaaaaabccaabbaacbcccbbbacabcaaacacbbbbacabcabcbcbaabababbcabaabcaabaabbcbbabbcabbccacaabcaacaaabacccbaaabccbabbccbbbacbbcacbbccbbccbacbccbbaaaacbaacbcabbcaaacacbacbbccbbacbaaaacbbaabcabcccabcbcabccaacaaabccabcbcccacbacabcabcabcccbbaabbabaabcbcaabbbcabababaaaacabcbbaacaaabcbaabcacabbcbcbbcabcbcccbcabcbaaaccbbbbcaabbbcaaaabbaacbcbabaaabccbbacbcaaabbccccbcbacaccaaaaacccabccbbbbacabcabaaabaaaacccccabababcacabcccaabacbcaabbccbbbaabcbacbbbccbccbbbbaabcbacacbcbbbababacababbaaaabacaccbbcaabbbbacacbccaaacbcacbaaccabaacbbcacabcbccbaabbbaaacaabbcaacaaabacbbbbbbbbbaaacaacbacbbcaacccabbacacbacbbbbaabccbcbbbbcbcaacccbcbcabaabcbcbbcaabcabbbcacbabbaacaaccbbcbabaacbbcbbabacbcacbbaabaacabcccbcaccccbcccbacabbcabacbbaacbcccaaaaaabcbcbcabcacacacccabaccacabbabcbbaaaaccacabbcbbbcbccacbaabbcacbcabcaabccaccbaabcccbbcbbbbcccabbaccbaaabbcaaaaccbccaababaabbbcbccaaccccacabacbbaaabbbbcbcacbaccabbcbbcaabaaccbbcaabbaacaacbaabcbccbccabccbacbcbaccbccccbbbbcaaabacacacbaccaaaaccaaccabacacaababcaaccababccacbcccbbbbbcbcaaaccaabaabacccbcbbaaccccbacbbacacccaccccacaaabbcbaabaaccabbbbcbccaaaacccbabbaabbcccacccbabaaaccccaccbbaccbaaaccbcbcbbbbaacaabacacbbcabcaaccbbaacaccbabcaccaabbababaacbccbaaccbcbaabcbacbbbaabbabbccabcaabacbccaaccbabcacbbccaccababcbbacacbcbaccbcbabcaabbcbbababbbabbbccbcbcbbbabccaacabbabaaaabbbbbacbbcabcabccbcbcbcaabbbbcabcbbbcacbbcabbbacbabaaccbbacacbacaaaaacaacaacbabbbcacabcbbcaaaaabbcccbbcbbbcacabaaabacbbbccbbcbccccabbbabbbabcccaccaaabcacacaccbcaaaacababcaacaaabbbcaccacbaaccacccbabcbbabacabbbbcccbacaacacabaaaaacbbcabbaacaaccababbcacbbbccaaabcccacaabaaaccbcbabccbbbcccbbbaccaaacaabccacaabbccbacaabababaaaccbccbcaaaaabababcbbacbaaaabaaacbbcbbaaccbbbbaaacabcaaccabbcaccbcccbacaabacabbaccbacbaabcbcaaabbbcbcabbacaccabaabbbabcacbabccabaabbcbcacbbbbcbbbcaaabbbabaaccbbacabaaacbbabaaaccacacabcccccbbcbbbbbccabcbaaccccbbbaccababbbacbccccccbacacabcacbbbacbbacbccccbaabbbcacbacacbccbcabbbcacacacabaacaaaabccbcaacaababcbbaabccbccbabccbaabbcbbbaabcbababbcacbbcbbbbabcbabbcbcccababbaaaccabccbaaacbaccbbcbaaacccbbaaacaabcbbcbbcccbcbacacbcbbaabbaaacbbcababbaccabbbbbcaccbbbcccaaabbaabcccbbaaaacbcbabcaaccaacaaccaaabcbccbbbcabccbacbbccaabbaaccaccbcbbaaccbcabcacaacbacabbccaabbaacabcacabbcaacbbcaaaaaaacbaabbbacccaccbcbccccbbcbbcccacaaabbcacacbaabbbcaccacccbbcaacababcabbaabacbcaaccbccaabbabccbbccbacabbacbabaabbaabcccbbcbbaabbbcaccccaaacbcbbaaccaccbbabcabaababaaccccacabbbcacccaccabcbccbacaaababaacbbabaacccbbcacbcababacbccbccaacabccabacccbbcbacaacaccbabbaaaacbbaacacbabbccbaacacbaabaababbbaabbcbcacbccacbbbabacaccbccacbccacbbbcbbcaccaccbacabcabababbcccaaaababcaaacbccbbacccacabacbacccbababbbbbaccabacbbbcccbacbcbcccbaaaacbcbbbbaaccbcbababbcbabbacabaabbbaacbaacccccacbbaccbccbbbccbcaaaccbaabbcbabcacbbbaabacbbabcabbbbaabcaccabbcabbaccccccbcbccbacbccaabcbccaaabccbbaaacbbbbbbbaaaaaccccabacbbcabaacccabbcbcbccbbacaaccbacbbabcbbacbbbabcbcacaccbaaccbbcccabcbcccbacaabccaacacccabcabcaaccaabbbcaacbabbcbbbccacabbbabaaacaaacbaacabbbccaacacaaacacccabacbbaacacaccccacaabcbbaaaccaacaccccabbccabbabcabacabcaabccbcbaababccabccabacccccabbcacabccbbbacbbcacbaccacaaaabcccbbbcbaacbcabcbbbaacccbcbcacbcbababcabcabbcbcccbcbcccbababbcbbaccaabbbbabacaaccbccaababacbabcabaccacbcaabbbaabcacabbbacbcccacbccccaacbcbaaabcaaacabacbcaccbacbabacbaaacaabaabaccbcbbbbbcacbbbccbbccaaabbcababaabacbabcbcccccbbbbccbbbaacbaabbbaaabccabccbbbabcaaaaacbabbbcbcabbcabcccbbaccaaaaabbaaaacaacabbccabcabcbcbcaabaaacccabbacccbacccaaaacacccaaccbbabcaccaabbbccacabcbbaaacbbbbccbaacccbbbbcabaaabacbcaccabbaaccbabaabcabcbbcbcacaccbccbccaccbaccbacccbccabbbacaabccaabcbbcbccabbcccabbcbaccacbbbbcbbaabbbbabaabbbccabaccacaccabbccbcbcbabcaaaccaccabaccccbaaabbabccaabaaababaaacaabaacbcabacbcbabccbcbbbbaccccaccbacbbcacccaababcbbbcbbccaacacbbbaacabbcbbbbabbabcbbbbbbbcccbbbcbabaacacbccacbbbacabbbaacbccbaacbbccbbaaccbbcaabcccbbbbbcaacaccaccccaababcccaccabaaaccabccaccacaacacbbccbaaababaaabaabccaabaaccaabaccbbababababbcaaabcaacccccbabbcabbabccccaaaabacbacccbbabbbaacccbbcaaabbcbcaccaacbcccaaacbacabccaccbcaccacbabbbbbbbbbaabccccbcbccabacaaaacbabcccbbbacccacbbcbbbbacbccbaabcaababaccbaccabaacbacbacaacbaabaaaccbaaaaacaaabbacaccccccbcbbcaccccacccbccbccaccbaacaaabaccaccabaabbcaccbbacccababacbbacaaabbccaccbbbcbbaaabaccaabcbabababcbabcacaacbaaaabccccabccccacabacaaabbbabbcacccbbccccbbbaabbccbcccccbcaccbccaaaccaacbacbbacaacacbaabcbbaccbcccaacabbaaaaaaabcbcccacabcbcaabcaaaabaabcbaacccccabcacaccabbccacabbbaabccabbaaccbaabcacaaacbabbcacabccacbaaabcbaacacccabbbbbcaabcaccacbbaacbaacacbccbccccbacbccacabbbcccbababbacbcaccbcabbcaaccbbabbbaacaabbacbacbaabcccbcbbbbaacbbaccaaaaabaccaacccaacaaabbccacababcabaabcacbcbbcabbaabcbbabaacaabccccbbbccbbcbcabcaacbabbbcabbaaabbbbaccaaaaaacacccbbbcaabaabcacaccabacacccbbcaaccaabcccbbbbbbacaaaaacbcacbbacbccbaccbbcbbcbbcbbaabbaaababcabcccabcccbacacccbbbbccbbcaacbacbcbbbbccbbbabbacabcaaacbcabaccbaaaccbbbbbaacccaabacbabbaacacacaacbcbacbabbbbcabcbaccbbbbcbcaaacbbcabbbccbbbcabacbbacaaabcaacacacaaaccabababacbccbacbcbbbcbbcbbaacccbcccbbcacaabbabaabbccbccccbccacaaabaaaccabaccaaacbcacccaccabbaacbbbbabaccaabbbccccbbabcccbabcabaaabaaabbacbaaaacabcaaccacaaaccbcbababbccaacabbcbaacbcbcabaaccccbbbabbbbbaabbccbaababbabcbbbbbbbcaabbacccccbcaaacbcaacbbbbccacacbabcabacbccacbaacacbacaabaccbcacabcbcbbacbccbbbaaaacbccccbbcbaacbaababacbbbccbbccbcccbaccacbabcbabaabcccbbcabccbacacbaabbbaacaccaabcccacbcbbaccaababccbacccccabbbbbcbbbcbaccbbabbaccbbbbccbacbbcabbcbaccababcbcababcabbcbcbabcbbaaaabcbbbbcbacaaabccbcbaacccabacbbcbbcbcaaaacbcccbcbabbabbbcccbbccaccbccbabbaacabacbacacababbcbbbacabbabcacaacbbaccabaccccabbaacacabcbcccbaaabcacbabaabaabbaccbcabccabacbbbbcbabbcbbacabbccaacccbbcccbabccbccccbacaacccbcbbbabcaccacbccccbbaaacacabcaaccaacaaabcbcbacbcabcbabaccacbbaccbabcacccbacccabbcbcbcccabccbbaabbabccccbabacaccacbcacabcacabbcbbbbabcbcbcbbbcabcaccbbaaaaabbbbccccaaabbcbbabccbabaccbacbbcabbaacccbbcbacccbcbbcbaaabbccccabbbbabcacbaacaaacbbaabcbaacbbcababccacbbcacbacabbbbbaccabcacccbabacabccaccbcabbabccacbcabbaabcbcccbacacbbbccccbcacbbbacabbabbbabaacbabcacabaaccacbabcccbababcbcccbcbbbabacabbcbaccbcbbaaaacabbccaacbcbcabbacccabaacacccbbbacbaaaaabcabbcbbccbcccabaaabccaabaabcbcbbabbccaaccacbbaaabbbbbabacbaccbcbbbccacbabbacbbbbbbacabbbbbaabacbcbabbaaacabccbbacbcbbaaacbbaabcbacbabbcbaccaccaabbaabbbcbbcacbbbbacbaabbaaaacbaaaabaababacaaacbbbbbbccacaaacbbbacbcbcaaacaababbaccbaaaacccacbacbaaaabbcaccbcabbccbbcaaccbbbbbcccaccaccbcbacaaaaaabacccbcabaabaacaaacabaababccabacbbababaaccccbaacaccbcabacaabbccbcbbaabbcaaacaccbacbbabaccacabcbbbccaacbbaabaaacbcccaabacaccaaacccabbbccacccbcacabacccabccaaababbaccbabaabacbbccbccbccabbbbaabbbcaaaacaccbcbabaaaabcaacbacababcbababccbcbaabcbbaaccacbacbaacbabcacbaaacacaccbaccaabcbaabcbabaacbacccbccaaaacbaaaaabccbccccacbbbaccacbabaacbbacbbbccabcccbcbbbaabccccbaacaabbcabcbbbbbbbaaaacabccccbcbababbaacbccaccbbabacbcabbbbabbacacbbaaaaabbacbbacccbbaacbccbbccaabbbccccaccbaaccacbbaaababacabbcbcbabaaacbcabcaacbaabbaababbcaccaccaababbcccacaaaaaaabbabcababcabccaccababcaaacacbcabaccacbcbccacbcbcccbbacabbbbbcbbacaababacabacccaaccbabaaabbccbbaababbccbacabcaccacbaabbbbbcbaabcbcbcbaabcccbabbcbaccacbcbbcbccabbacbcacbcbbccccabcbcbaccccbcbacaababccbcbcccbccabccababacbabbacaaacaabcccbcaabcbbcabbacbbcbbcbcaccaccbcbaabbacbacbabbbacccaacabcaacbbcababacacaccbccabcccbcbcbaabbaaababcaabbabcabaabbaababcaacbaaabbbaaaacababbaccacaabbcbccbbccacbbabaabcbbbcbabcbabaaaacabbbbbbacababcccccbcbaaccbbacbbbbbbacacaabbababcbccaacccacccaaccccababccaaaacaacabbcbcabcccabaababcccaaaccabbbaccbcabcbccabccbbaaabbcabcacaabcacbcaacccbbbbbabaccbbccbabbcbcbacbcaccbbcbccabbcbcbcacbcababbcaabaabaaaccbcbbccaacacaccbaabbccbbacbacaaccaabaabcaabbaabcabbbbbabccabcabcabccbbaabcbaabcaabbbbccaacbababbabccabaccccaaaacabbabccbabccbbbaabbccacbbaaaacacbacabaaabbacbcabbbabaabbabcbbacbcacbbcbacacabbacbbbbbaccbbabbaacabaacabcabcabcbaccbbcbcbabcaaacacacccaacbbbcbbcabbacbacbaabbcabcaaacccabcbcbbbcabbaaabbcbaaabcccccbccbcaaabbbbabbcccaaabaaabbbaabccacccbbcaaabaccaaaaabbababcbbacccccccbabbcbcacccbcccccabcababbabccababbabbaabacbbcbbbbbababcaaccbababccbaacbcaccbcccbaabcabcabbacbaaaacaccbccbcacabaaccbccbbacccacbabaabbcaaaaaaabaacccaccbbaababbaabcaaabcbbcccbcabcbabbaabbabbabaaccaabacbacbccbbaccaccaaaaccacbbbabbabbcbbbcaccccaabacabbbbcabcbabcbcccaabcaccabcbbababcccaccbcaaaabbbaacbacbcbaaabbbbaabbcabccccaabbabccccaacbaabcaabaaacbbccbabbcbaaccabbcbbbbabbbcababcbacbbaaaabaabacbbccaabcbbacaacabbacacbcbaaabbabacbacbbaacccaacbababbcaccaacaabaccaabcbabbbaaacabaaaabbbcbbbcccaababbcabaaccbaacbacbccbccbacbbabacabacbbbaaaaaccccacbbacaacabccbcccbacabbabbbaaacbabbacbabaccccccbaaaaccbbbcbaccabcbbcacbcbbbccbbbaabcbcbaababbcbcccacaababbbbbabccbababcacabcacbacbcbaabbabcccabaccbaccbccbababbcaacbcaabacaabbcbcbaccabbccbcabaaaaccbccbcccccccabaabcbcbccccacaccabbbacccababababcccaccaccccccaccbbaaaacbcccccaccbcacbcccbbacbaabcbabcacbcabcbccbabacbbcabcbabcabcbbabacccccabbbacabbacccbababbcbacbabaacccbabbcbaaabbccaabcabaababccacccbaacbcabbababccaaabbccaccaacacacbacbccaaaaccacacbaacccaaababcbbccbaccaacbbcabcbabbbcbacabcbccbcbbbaacaabbbcabcccacbbbabacccbbacaaacbccbcaccbbbbcbbbcbbcaabbcabcccacacbbcbccbcbbcabcbaaabbcbabaacbaabbcacbbcbabcacccbcbcaccabaacccaaaacaabcaabbccbbbccbcaccbbbabcbaababbabbaacababcccbbaabaccaaaaacacbbabbacaabbbbbabbcbbcaabccabcabbbbcbaabbbcabacabcbaabcccbccacccccbccabbbcabbabbcbaccbcbbbcbacbabbcbaaaaaccbacbcbabbacaabcacbcacbabaabcabbbbbbcccccabcbaabbccabcbacaccbbbbacabbcacaccccabcacbcbcababcaabbbbccbccacabbccaabccbaacbbababaaaaaaababacccbabccacbaabbabaacbbaccaccbbaabacccabbccaacaababccbaacacabaccacbbbaccccacbbccbccaababaabaababbbbacaacccbbcccccaabbcbcbbaaacacacbbbabccabcacacaccabbaacbbabaabbcccbccaaabbabbaacacbccccaacccccaccccacabacbabacaaccacacccacaccaaabacbcccacacbbbccbcbbbccbccaacacababbaaccbcccbbcaacabcccccaccabacaaccacbababbcbcaacabaacbbcaaaabbacbabaccbbcbaaabbcaaccabacbbcbaacbaacccbbbcabcbaacbccbbbbbbbbaacabaaacacabccaaacbaacbbbbcabcacaacacbabaaccbccacaabaacbaaaaabcbacabbcbcbcaaacaaaccaaaacaacbcbbcbcccaaccaabcabcbaaacbacbbbacaaaacbcbaaacbbcacbbaaaabccabcabccccbcabcabcaacbcababacbcabbcbabaabccbcbababcbabccbaaacacaaaaacccbcaccbbacccbbbbbabbbbbabccabbabcacccbcbcbabbabbababbabbcbcacacacbacbbabacccbcbaaabababaabcaaacacccabcabcacaacaccbbaaaaaacaacabbabacbbcccabcababaacbbabaaccbcbcbacacbccbcbcaccacbbbbccbaccaacaababcacbbbccbcccaaccaccacacabbbbbbcacbbbcccaaaaaaacbcbbccbabbbbbabbabaaabcacbaaabcccbbabbbacacacabacbcbacaaaaccaaaabcabaacbcaaccbacaccaabcaaaabaacccbcbaccacccacaababacacbcbcbabbabccbccaabacaacbccbaacbccbbccabccbbaaccbcbacabaaacacababbbaabbabbabbabccabaababccabbcaacbcababababccaabccbcaacbbcbaacccbabaaaaabccabaaaababbaccbbcbbaccbbaccbcbbcbccacbcbcaccbccacaaaababccbacbcabcaaabbbbabcbccccbcbaaacbabcaabbcbcbacaacbcbbcbabcabcabacbccabaccbcccbbbbabaccbcaabbcaaaacccccbabcacccaccbaabbabbabbabcbcbacacabacaababaacbaccbbccccabaacbabacbbabcbbccbbaaaacaacccabbabbabaaaaabcaaabbbccbcaaacbababcacccbaaaaabcacbcbabcbacaaccababacaabbabbaabacccaaabcccabccccbbcbcaacaaaccacabaaccbcaabcbbccaabbbbacbcbcacaaaaccabcbbccbbbbbacbbcabbbabaabccbbacbbabbbccabacbbaacacaacababaabbccbbcbbaccacbcbabbcbbcbbbaacacabacaaaacccabcbbbccbcbbbbbcbbcacbbbbcbbcabcbbcbcbaacccababbccbcbbacccaabaccaabcbbbbacbbbaacaaccabcabacbbbbbbabbccbaaaaabbbcbccaabcaabaaacababbbcbbbaacabcbcbabaccbaaacacbabbaabaccabcaaccacacabaacbcbbbbbaaaaaaccbcbaaacabbaacacbababbabbccbacbaaacbbababcabacabbacbacbaabbbccaacbaacbaaccbcbaabbcbbbcbcaccacbccccbcaaabaaabcacbbccccbcabbccbccacabaabccabbcbbaaacababbabbbaccaabcccbbbbbbaabbcccabcbbbabccbcabaaaacbbabcbbccaacabcacbabbacccababacccbbcaaaacabccabcaaaacbcacababbccacccbcbcbbbbbabaaababcccaaccccccccbbbcacbcccababbabcaabbabbbaabacbbaaacccbaccbcbcaaaaaccbbccccbbbaaccabcabbbaacbcccacccaccacccbcbbcabaacaacccbacabcbaacabcbabccabccbbbaccabbcaacbaababcabbbacbbcabcaaaaacaccbcccaabbcccaaabccbcbabaaacccbaabbbbbbcbaaabbbcaabccaaaaaaababcacbabaaaaabcabaacabcaccacbcbcabaaccbabacbabaababcbcccbaababcbcbaabbcaabbcbccacbabccbbbcbbbbbcbcbccacbabacabacacacbcccbbcccaccbcbaacbcabcbabbacbcacabaacacccbaaaccbbbbcabbabbaaaaabcbbbccbcaccaaacbcaabaabacbbaacbaabccabaabababacbabcccbbbccccabcbcccccbcacaabbbaaccbbcabacccabcaaabccbabaaacbbaaabbbaacccccbbabcbababccaabbbbbaccabbacacaabaacbacaacbabbaabcacabcbaaacabaaccccbacccbcabaabcccaccaacbcbcbaacabbaababbbcbcaccbcccaacabbccabcbccabaacaabcbbcabcbcbbbbbbabbcbbacbacacccccaabaccaabbaabcaccbccaaacbaabbaccaacbbccbcaaacccaccbbcbaaccbbcbcaabcaacbacbbabcaaaccaccacaacaacaacbabbcbacbbcbababcccacabcacccbacbbaaaacbacaaabcbcbabcccccacbbcbcbcaaacbccaabaaccbbbcabcccccabaacacaaabbbcacbbcaccccbaacbbbbccbabcbccccabcccbacabaababbabbcbaabbaabaabacbaccccabbbbbcaaabbacaacbcaaacacccbaaacacbbcccbbccbcbcaabbbbbcbaacbcaabbbaababccbbabababcabcbcabaababbbbbcbaacccbabbaabbaabbacaaabccacacaabaaabaccabbacbaabcbbcbaabbccbcccbaaabbcbcaaaabbcccbaccacabbcccbabbabcaaabcbacbccaabbbacacbbabbbacabababcabcaacbbcbcbaababacacccbbbccbcbccbacaaabbccaabbcacbacccccccbaabacbbbbbabcaaabbabacacbaabbbbcccacbbbcaaabbabacaabaacbcbabcaaaccabbbcbcaccbbbabcbbabcabbccbacbaabbaccbcaacabcbbaababbbacbbcabaacbaacacaaacbbccccacbabbbcaabaacabbaccbabcbaacccbbbaaabaacaaabbbbcccbbbbbbcabccaabcaaaccbaaaaaacccbaccabbabbbabcccbbcccbabccabcbbccabbacbbaaccbbacbbaacaaaccbacbaababccaabbcbbbacabcccababcbbbaabcbbabacbcccaabcbaabcbbaccbbabccbbcbbccaababacacccbbabbacabbabaaccbbacbcbcbbcccbcacccbaacccbbbbaccabccaccbccbbbcbbabbbcbabbbbcaaaccbacacbaabcbcbcccbcaccccacacccccaccbaabbbaccbbababcaccbcaaacbbabccbabaacabccbabccacaabcaccccbbbbabbaacabcbacccbcacbbaabacaababbcabacbccaccbcbaccbbcbcbabccaabcbbabbabaaccbbaccaaaaccbbcbabacccccacbcaababacbababbbcbababbbabcbbacbccccacaabbcabcccbbaacbcbacacabbbbcccbcabbaabbbbabacbbcabbbbccaaccbbbbcabcaaabaabbbccbbccbacccbabccbaaaaacaaabaaabbababccbbbabcccbccccaaaaaaccabcaabacbbaacaacbbbabbaabbaaaccbbcaaaaababcabaabccbabbccabaaccbacbbbcbbacbacbabbaccaaaaccccaaaccbcbabbbcbbccbbaaababacaababababbccacbaccbcacbccbacacabcaacbcccccbabababcabaacbcabbbbbaabbbacabbbbbcaabcaababbccccbbbacacaacccbcaaccabcbbaacbbbccccbabcbbcbabbcabcbacabacabaccbbababccababaaccaabccbcbaccbbacabccbacbcacbbaaabaaaabcabcbbacaccbabbaccccbabaabaccbbcaabaacacaabbcaccccacacacbcbabbcbabbcaaccabcabcaacbccbcbaccacaacaabbacbcccabbbbbcaccacbbaaaaacaaaacacbabbaaabbbcabbaacacaacbccbacccccaaaabcccaccaaacaaacabcbaabbcbaababbabcbcbacabbcbccabcbccccbabaccccbcbcccacaaacbbabaaaacbcabcbbccabbcbabcbbbaacbaabccbccacccbaabaabbcaaaccccbcabcbccccaaacbaaabbcbbaabcaccccbbabaacccaabacabcbcaaabbbbbabccbcbccababaccbcabbccacabcaacaababbaababcbacaccaaabacccbababbccacbcbaaacccaaabcaccaacaaaacbccbcbccbbcacaacabbcaaaaabbaccbacbbccbaabbbcbbbabcbbacbaabbcaaaccbaaabcaacacbabbbbaaabcbcaccbaabbbcccccbbbcccbcbcbbaccacbabcacbacacbaccaccbcbbcbbcacccacccabbccbbccbbaaabcabbbbbaccbabaacccabcccaccbcacbabccbbbbbbccbbbacaacbbbbcbbbcbacbcacbacbacbabbabcbccbccabbbababccaaacbacababacacbabcbbccbcbccacacaaaabcbcacacacbcccbccccbcbbbabbbabcaccbbaaabaacaccacbcbabbabbbbcccacbbbabcbbabbbaacbcbaccabccaaaacccaaccbccccaaaababbcabbccccabccababbbabcabcbbccccaabaccaaaccabaccabacacbbababcaabacbcabbccaccbcbcbaaacacacccacccbaccccccbacbcabbaaaaabcabbacbaaaabbcaacbcaacbaaccbacacabbcccbbcaabbcbaaccabbcabcabccacccccbbccaccacabbaccacbbcaacbabcaacbcccbccacbabcaccbcbccaaccaccbcababbaaaccbabbcbccababbccbaacbaaccccbbabbaaacaccaaccaacccacbaaaccacbaaabbabababaabbaaabaaaabaabbcbbbcbabccbcbbcbbcbbbabbbccaaaabcbbaccaacaaaabbcabcbcaaaccacbbaabaccabbacbaabcabbbcaaccccaacbabaaaaccccccaabaaabbbabccbacccacabcccababaaaacbcabbacaaabcbacbccbbbbabccbbbcbabbababbbcbbbbabaabcaacabbbaaabacbabbccbcbcaccaacbccbbbbcbbcaaccabbbbcbccbbbccaaacaccbacbaccabcbcababbacbaaabaacbccbaaacccccccccbacaabbbcbcaabaacbbccbaaaabaaabcbbbbbbcabcaabcacabbabaccbaacbbacaaaacbabcaacbbbabcccbcaccaccabccccacbbaabbcbabcbacbbabbaacbcaaaaabbcbcbbbcaccaacbcbbcabbccbbbaacaabcbcbcacbacbaacbbbabcbbbbbababbbaacabbbcacabaaaccbbbaacaacacbacbbabbbaccabaacbabaacbacacbabcabbcacabacbbbbaccccbabbcabbcaacabcbccbbcabbcabbcaccccacbcaaaabbbabbcbaaaabbbbabbcaaaccbbaaaaaccbaccbacccabbcbcccabbaaacbabcaccabbccbbcacaabcbcacacaccccbccaaaccbabcaabbbbaaabacabcababccaccaaaaabccabcbbacabcbbbbcbcbbaabcaabbaccaacaacbabbabbbcacbcacbbacbacacacbbabccaacacccacbaabaaaacaababcbacccccccaabaccaaaaaabacababaabbaaaabacaabccbbcacbbaaaccacabcbccbbcbbbaaabbccbcbbcabccbaabbbcbbbbccbabacabaabacaccbcabcabacababbbaabcabcabcbcbbccbcbaabbcbbbbaabbcbccbaabababcccacbaaacaccccbaaaacbcaccbbabaaabbacaaccababacaaacbabaacbcbbabbaababbbcbabaaccbaaccacbcaccbbcbbbbbcbbaababccbaacababbacaccbcbaabacbcbbbaaccababbcbaccabcabbaccaccbababcbcaaaaacaaabbccaacbccabbcabbaacbaacabccabcaabaccbaccbcbcbacabbbacbcbccbcbbbaaccbbacaccbbbcaabbcabbccaaccbacaaacbbabccbcabaaccbccacccacacbcbabacbbcabbcbbacccccacacbbabaaacaaacacabaacbaacbcaccaabaabababccabbbbabccbbacbbbabaacabbabccccaaabcaabacaccbcabccabccabbbbbabbbccbccabcccbacbcbcbbaccacacccaacaaacabaccccababbbbbbbacccbabcccabbbcacabbaccbbcaccaaccccaccbaacccbbcbaccbabcbacababacbaccbccacacccaaabcbaacabacbbcaabbbaaabccbabbaaacbacaccabbcccbbbbaacbbbcbbbacbbcacccbbbaababcbaaaaabbabcaabbbaaabbaaabbbabbacacccbbccbcbcacbcbbcaabcabccbcaaccbcaaacbacbcbabbbcbbcccaabbacbaabcaacabaabbbaccbaabcababcbbacacbbaababacbbcbbaccbbccbaaabbaccabaaaaaccbcbaccaacaaccbccbbabbcaaabbaccbabbccccbbcbcbaacbbcbababacbabcccaccacbccabaaccacabcbcaacccaccacabbbabcbcbbbbacccbcbbbcabaaccaabaaaacaccbccacbcacabaabbcaaccbacacabaacbbbbcbabcabbaaaacaacbabaabbbabaaccbcaaacabcabccacbbbcbcabcabbccaacbacaabbccbcbcbbcacccabcbccbbbaccacbaabbbcacccabccbbacacaacbcacabcabccabbbbbabaacbaabacabaabccaaaacccbacccccacaccabbcbcbaccaababbaaacabcbbcbbbcbbaabbaaacbcbbaabcbbaccbbabcbcbcabcccbaaacaaccbaccaaacccbbcabbabcbcaabcabbabaaaccaacabaabbcbbbbbaaacaabacaaabbcacbcabbccccbcbbcbcbbcaabaaacaaacaacbababbaabaaacaabcbbabcbcbacbabcabbcbbaaabcbcccccaacaacabacbcacaccccabacbbaabbcccaccbbbccaccbccabccacbcaabaaaacbccabcbabaaccaabcaacbbbacbcbaaabcbabcaaaccbcaacaaacbaabaaaccabcabcbcacbbcaabccccbbbacbbaaaaacabcbacccbcaaaabbbcbbcbcbabccabcccaacccbacccaacccabacbccbbacccabbabacbacbbcacbaaaabbcbbaabbbacbcbbcbabbbbacbccabbcbbccbabbccbcccabccbacababccacbcbccaaaabcaacacbabbcbccbcbbcabbbbbbabbacbcbcbccabbccbaccaaabbbabcbaacbccabcaaabbabaccbaaabbbabcacccbacbbbcabbbcbbabcaabcbbcaacccbacccaabbcbabccacbbccacbacbabcaabbbcaaabbccbaacacbcaaaaaaaccabcabcccbaacabbcacccbbcacaaaccacabacbbaabacaaacccaaaabaaccaacbaaaacacaccabcbbbaacbbbcbcacaabaccaaaccaccacacaaabaabbbacabbaaacabcbabccaaaaccbacaccaccacbccababcbcbaaccbabcaacbccccaacaaabbccbabccaacccccbcbbcabaccbaacbcbcbcbacababaabcbaaccabbcacbaabaacaabababbbaccbacbaccacccbcbcbcabcbbbbbbacbbaabcaccbaacbbcccaababaacbccaaccaabcabaaabbaacbaccaacaabbacabbacccccccacbacaacabaabcabcbcacccbbbbcbacbcaaabacbaabccbbabbcbbccacaaabbbaccabaaababccbccabccbcacababcbbcbccbccabbacabccaabaaaacaaabbbbcaaaaccbcaabbbabaccbaaccaacbaaaabbcbccbabaaacababccbcbcbabaacbcbaccbbcbacbbbbaacbbabbcabaaaccbbbcababbbaaabababcbaccccacccccbbbbacaaaacaaacaabcbacbacbababbccbbabcbacbbbacbcbaccaaababcaaaccbbabcabbbacaccaaabcaabbabbabaccbccbbacbbcacbbccbbcaaababcacccaacaaaccbcbacbaccabcaccabccccaccbcabcbcacbbccbbcbccabcbaabccbabbbbabaacacacaabcccbaccabcbaccacabacacabccccaaaaaabcccabaabccaacbbccacabbbbcaababccbbacacbccbbaaacbbabcbacbaaabbbabbaacaaabbbbaaaacababbbbcacbbcacaabbcabbaabcbbacccbccbaaaacabababaccbaacabcbaabcbcacbbbcbabaacaaacccabbaabcbbccacacbbcabcabbcccaaaacccabbbaccacbcacabbaccccccabaccccbabbacaaaacababaaacabbcbbbcbcbabbaccbbcbbaaabccbbabccabcbbbbaabcaaaaccbcbcccbcacaccaabcaabbaccccacbaabaaaaaaacacabaccbccaacbabcacbbabcccbaaacccbacacbaccbcabcbbaaacbcbccbbbbbbcbaacbccaaabacbcacaccabcbcbacaacabbaccaccaccababcaccbcababcbabaaaaabbbbbbcabbcacaccbaccbabbbbacbcaacaccacbcbcacbcacbaabaccabbaacabcbacbcbabcbbccccabcbabaccbbbcaacbcbccbaabcbccbcbcccccacababbbaccbcabcabcccaccbbabccabacccabbbccacccacacbaaaacbbaabcbcbabcbbbcbabbacbcbccbcbbbabbbacccacbaccbbcbbbacbbaaaccbabbcbccbccbccaccabaaaaacbbbcaacbcacabababbcaabbcbbbacaccacbacbcacaabbabaacbccababaabbbacaaabcabbaacbcaacabbaccbabbbcbbcccbabbbbbabbcbacacaaccabaaaaccbcbbbbcbbacaacbcbacbbcaabbacacaccabbacbbacbbbaacbbbabccabbcbccbcacacbaabbacbbbbcaaabccbbaabbbcabaabbcbbabcbaaacccabccbabacbbcacacccbaccaabccabbabccbabcbbbbaccabacbaccbcbbaaababbcbcabbaaacccabcbcabccacabbccbccabbabbcabcbbcbabcabcbaccacabbcbbbbbcabcacabacbcacacbbbbaaabaccbaacccbbbcccabbaacacccaaccccaacccbaabbbacacacabcbcbacccabbbaacccbaaacacbccccaabbcabaccaabaacaacccbcaacbcabbbbccacbbabacaaccacabbcbabcabbaaaabaacbaabcaabccccacabbccbccababcccbccbabcbbaabaaaccacaaaaaccacccccbbaacbbabbbacacbbccabbaabaacccaabcccbcbaaaacccabbbabbaabcbccabcbbacaabacbabcabbaababcbbbbcaacbaabcbbbcbabcaacacbcacaacbcbacbabbabcabbaccacabbbabccacbccabbcbbccaccbabbbcbcacbcbaaacabcacbcaaaccbbbaaaabaaabbccbbbbcaccccabbbcababbabcbbabbbbcacccacccbabccabcabbcaabcbbaaaacbcabacacabbbcbbcacababcbbaaccbcbcbacaccbbccabccbcaccacbbaccbccaaabcaaacaabaacacccbaaccacbbabbaacbbbcbbcbaabaabcaacbabbcbcaccaccabaacbcacacabaabbbcbcbbbaaabcccbaacbaaababcaaabbbccbcbbbcccbbcabcccacaababcbcbbcbaacccabccccccbaacaaccaacbcccccaccbacabcbabccbbcbbbabccbbcbabacccabacabaabababccbabbbcaaabbbbcbbacbaacbcabbacbaccbcaabbcabcccaaaaaccacaacabaaabacbbaccccbcaabcccbbaabaaaaccccacabaccbbaaabcccabacbbcabcaaabcbcaacbabacccccbbcbacbaccacabaaacabaaaccaaccbbaaaaccbcccbcbbbaababcbabbacbacccbcaacaacccacbcbcbbbcccccaccbabcabbbaabcbbaccbabbbcbcababbcabcbacbcbbabbcbbccbabaaccbbabacbbbbcbabbabbccaacbcbbaaccbabbcbcbbccaaaccbaacbccabbbcacacacbbbbacbcacbaaababccaacabbcbccbbbbaabaabbccbbbbbbbaaabcbbbccaababbabbcaabcbbccbabcbaaabcaacbbbbbabccabbaaacbccbbcbcacccabbaabbccccabcaacbacacccbbccaabcbcbcccaabacbcabaccaabbbcbcaabaccbbacacbaccabacccbcaaacccabacbcabcbbccabccccbababcbaaabbaaccacacccabcaaccbbcccccabbcacaccccacccacbbcaabbbbcbbabbacacbcbaabbccccccabcbbcbccccbbbccbacbabaaacccacaaccbaacbaaccccacacaccababcbabbacccaccbbbcbccbccbccbbbabaccacacbbabaccababbcbcbbccaabacbcbaccbcbabbcbaacabbaacabbbbcacbccbabcccbabaaacbaaaccbbbabaacaaccaccbbcbcacacabcbaabbaccaaabbcccccbcacabcaacccacababcabcbccccbabbacaaacccccacbbcccbbababbcbbacaccccbbccbcacabacccbbbcaacccaaacabbabcaccbcccabcbabaabbcbaacbbabacbcaabbaaabbbbbaccaaacaaababccbabbcbaabbcbcccaaaabbaaababbcacccbcbbacaacbabbbaacbccaaabcbbbacbbcbcccccaccacbcacacbabaacbabbbaabbbbbabcbbbacaaabbacaaacabbbabaccbcccabcaacacbccbacacabaacacababbcbbabbbbbcaccbaabbbcbbbababbccbbcaaaccbacabaababaacccaccbcacbacaaabcccabbacccaacbacabcccbaaacbbbccccaaacabbcbbaccbaaabacaccacbbbbccbaacababccbabbacbbbccbccccaaaaaaabcbaaacabcbabccbabbababacbccbcbcbaaaababacccbcbbbcacaabccbbbababaaabcbcabbbbcbcbbcacbcabbaacaccbbbcbaccbcbcbaaacbaaabcbaaabbcbcbaacbacabbcabaaaacbabcaaaabaabbaabbaccacbacabcaaaabbccaabbbcbaccabaaaabcaaaabbacbbbcbaccaacccaaacabbabcbbcbaaaccbabbbabcabbcacbbcabbaaaacccabcccbbcbccababccabbbcaaaaababcbcbbcacbccacbbaccbbcaabcabccbacbcccbbcbcabcbacccacbbcaaaacbccccbabbcbbabaccbbcacacabbcbaccccbbcababcaccaccaabcacaaaacbcbbaabaaccacbbacabcacbcbccbbbcbaacacbcacbcbbabaabbaabccacbcabaaababccccbaccaaccaccabbbcbbbbabacacacbccbbcbbabbbbaacacbaccaacacbbbabccbcbbbcbbcbcbabbacbbcaaabcabababacbcccbcbccaaccbbaccbabcbbbaccabbbbcbcbacaabcaacbbacaabbbaacccacacbccbcaabaaabbbacaaabaccbbacbccaacaabccbcaaacbccbaacaccbcccaccaacbabbcbaaaaccbcaacbbaccbcaacbbcbacabaccabcbaacaabcbcbbcbacaaacaaaaabbbaaccbabcabcbbabbacacccbbbcbbabbcbcababccabbaabaabbccbcaaabaabcabbaabbbccabacbbbbcbabaacccbabcbbcbaabcaacccbcaccbbbabbacaabcabbabbaacbacbbcaaaacbacccbbcaabcbbbcbcabbbbcabacaababccaaccccababacccacaacccaacabbcccaccabcbabacbaccaabbabaaaacccaccccabaaabcbbbbcccbaccbcccbcccaaaababbbcaaacabcacacbcacbabcccccbabccacabababaaaacbacbccabacabbaaabacaaabcabbbbcaacbccaccccacbcababbcaccbacabcbbabbababccbbccccccbcbbcbcaaacaccaccacbcbbaabaabbbaacaccbcbcaccbbccacababbcbabcbbcbbcbccabccbabbaccbcabbaccaccaabcaccccccacacbbaccabaccbbbcbbbabbbacaababacaacbaccbcbcccbbaaccbcbccabccccaacabbbbabcaaacaaccbcbcaabbbbbccbccababcabbbbbbcbabbabbbccbccabaaccbacacbacccccbaccccbccaabcccbccabbabbacbcacabbccbccbaaabbcbbabbcaabcababacccbaacaccabbcaccbcaaabbcbbcabcbcabcacabaaccbacaaaaacbccacccccccacccaccabbbacccacbbabcbcabbcaccbbaabbababacababababbbcbabbcbcacaababaabaacbacacacacccaabcaccbcbbbccccacacaaacaccaccbaccbacacbbabcbcaaabcacccabccacabccabaabccabacbccaabaabaaaacbcabcaccacbbabcbcaccbbbccbabcacbccabcacccbababcacabcabacabcbcbabcabbacababababcacccbacccabaaacabbcabbaccbbbacccbabcccccbbbcacaccaaccaababcabbcacabcbcbcaababccbbcbaaaacbbccaabbbccaccbbcbcbcbacbaccbcaaacacbbccacccbbbccacaaaaccabaacaacbaacaaabaabcbcbbabaaaccaccbaaaabbabbabbbbabaabbbccaabcaccbbabbcbbbcabaccbaacacacbbbcbaccabacbaaabbbcaabacccccacabbbbbabababaccaacbaababccaababbaaccaccbbccbbbbaccbccbcbbbbbaabbbbaccbccacaccccaacacabbbaababbcbccbacbbaabaaabaacccbbcbbcaccababcbcbcbcbabcacbaabbcabaabbbabbabaaaccabcaccbcbcccbacbccbccccabaccbbabababbabbaabacabacbbcccbabcccacccccbacbacabbbbcbaacbbaaacacacbbccbccbbabbbccacacabcbbccaacbbbacaccbcccbbcbacbcbabacbccaabccbabcbbbbcbaaccccaccacbaabccbabbabbaabbccbcbccbbbccbaaabcbcbbaabccbacbbbbcccacbbabbaaabbbcbbccabbaaabccbabccbbbacccacccacccbbccaaaccabaaaabbccabbabcbbbccccaaacbbbaacbbbbacbbbcbbabbcabccaacaaacbaacbcaccaacaaabacbaacbcacaaabbbbbaabbcaacbbabcacbaababcbcbbbbacaabbabcacaccbccbbacacccaacbccaacaaacaaaabbbababaaacbacccccaacbcacabaaccbacbcaccbbccccaabaaaabbacaccbbcbbcbbaaaaabaccccaaccbccaccbccabccbacbaaaccccbcbbbaabcbaabbcbacaaccccbccbbbbacacabccbcbacaacbcaaccaabacabbabcaaacccccacbbccbabcabaccababbbaacbcbccbccacbcccacbacbabacabcbacbcabcacbcbccbcbbbbbabaaababbccababcbccbabbaaabbcababcaabaaacccaaccabacccbcccbcabcabcaccaaabcabbaccabacbccbaabcbbacccabbbabaaaccaaacbcbccbababbbacaacaaabcacaababbcaabbacbabbbacacbaabbccbababbcaabcbababccccbabcbbbcbcbacbcbcabaccbccccbaaabbaacabcbbacaccbaaabcbaaacbcaabaaccabbcabbbabaacbcccbcabbcacccababcbbbbcabcbacaacabbacbbabcaabacbbbabbccaaaaacbabbbbcbcccbaacaaabacbacbabbbccabcbabbabbaccbbacacbacbccacbaabbcbccbbbaabbcacccbabbbabbbcaacababccaccacbbcaaaabbbccbbcbcaccabbaacccbacbcacabbcbbbacbaaccccaaaccaacbcbacbbccacbbcacccacbabaaabbbcaabccaacbbcbccbbaabacaccacaacaaaaaabbbcccbbcbbbbcabababbcbccbcbbbbcaabbccbcaaaccbbccabcaaacacbcbcaabbbbabacbaabbcacbbacccabaacaacaabbabacaaccccbccbccbbaaaaabcaacbccbcccaaabacacbbacaacccbcbcaaaccabbbabcbcaacbaccacbbbaccbacbacbcbcabccccccaaabbaacabccaaababbbbaabbbbaabcacccacabbcbcacbbbaabccbaabacccacaaccaccbabccbcbababbcaaccaaaaabbbacccbbbaaabcabbbcabaccccabbbabaabaaccbaaabcbbbcaaaccbcabbaaaaccccbcbbcbacbbbabbcbaabcccccaaacabbcaacbcccbacbbaaabcbcabbacabbcbabbcaacaccbaabccaaacbaaaabcbbbbabcccbbbbbcabccaabbbaababaccbbbbbbcbcbacaaaabcccccbaccbbbbacacbabcabcababcccccbaccccbbcababcbabaacbaabcababcbcbcbaabaacaccccabcbaacbabcbbabcbcabcaaacccacaaabccbcbacbcbbccbbacaccbbcccaccaaaacbcbcaabcbbcbccbacbcacabacccabcaababcabbabcbbbbcbcbcabcabbcabbbcccabaaaababababaacbbabcbcbaaaabccaacabcccbbaacbccababcbaabbbababbbabbbcbaacacbabacaaabbbcbabcacacccbbbccacaabcacccacbabbacbacbbaacaaababbcabaabbcccacbccaaaacbccbabcbacbbabbbabbbacaabccbcbbccccbacbaccaaaacaaccaccabaabcbbbbccbcbccbcacbcacbccbccbcbacccacbbcbaacacccaabbbabcaabbbabcacbbcabbcbbaabbacaccaaabcbbaaccbccccbbcbaaaaaacabcacbcbccaabcacbcaaaacaabacacccbcbbbcaabbcbbcababcacbacacaaabcccbbbcabccaccaabcbbbccaccacacacbccaaaabcbcbbbccabcabbcbbccbbbcaccccabbaabacabbbcbaacccbbcbcaaabbabcccacabbbabcaaaaacacbbcaacccccacacbcbbcbbabccabaacbabccbbbcaabbccabcbaccbbaacbbabaabcbbbabccccbaabbcbcacacbccbccaabbcccbcbabcabcabcababbcccbacbccacabbccccabacbcaaaabacbacbcbaccbaaaabcbcbbbbcbbbaacbacbacaacccbabacccccbcbbabbcbcabcccbacaabaaabcccabcaccbcaababcccbabbabccbcccbacbaacaacacacaacbcabbabbcbaaaaabcbccabccaabcbaccaaaccbacacabacbaaabccbcabcbaabbaccbaabcbccabcacaaacbcbbabccbcaccabcacbacbbacaccccbccbccccbbabccbcacaacabaabaccabcbbccacbcbcaacbaccccaacbaacaccaacaaababaabcbcabaccbbaaabbaabaccbccbbbcbcbbbcbccccabacbcbabbbbcbbbabbacbccaccccaacccaccccaabccacbcbbcccaaaabababbcaacbbaababbcaacbbaacaabcbbbaaaacbcabcabbcaaccaacbcccbcabcaaababbcbbbcbbbcacacbabacccbacabacbcbccaabcabaabcaacbcbabcbcababbbabbbbabcacabccaacaacabcccbbabbcaabcbacabbabcabaacccbbccbcabbbaccacbbabcaaabbbcbabcaabcbcababcbbabaaaabacaaabbbacccbbbbcabacacaacbccaccaabbabacbcaacbbacabaacaacaaabcacacbbbbccbabbcbccbcaccbabcbaacacbcbcacabbbaabccccaaccbccbaaaabccbbabcababacabbccbcabcbcccabbcaababccbbabcabcbcacbabacccbbaabccbcababcbaacabacaccbbbbbcbcbaacbccacccccbccbbaccabccbcbacccabcbaababaaabbcbcacabaaaababacccacbcccbaccacbabcacacccabaaaacbbaccbabbbbbbbcaccccbbaabcccbbaaabaabbcbabbcabaabbabbabbcbcacaaaaababcabcccacbbccbbacbbabacbbccbbcbaabbabbcbaacaaacbababbaacabaabbbbacccaabaabccabcabababbaababaccabccaccaccabaaababacbbbaaccbbcccaaacabbabccbcbcaaaccccabcbabbaaaaacabacacaacbbcbabacaabccbcbcaaabacbbcbabcccaacacaccccaabcacbbcaaaabbacaabcbaaaacaacccbccbcabcaacabcabcaaaaabbaaaabbabaabacbcaaaabbacbaaccbbcbbcccbbaabccacabacccccbbbbabbbbbcaccbcacaaabbacaaaacccccbccbaacacabccacbabaabbcbcabcbaacacbcbccbbaccaacaabaacabccccbbcbacbcaabbbbbbcbbbcaacaaccabbccbcbabbacaacaaccbacbbcbbcbbbccaaababcacabbabaacbcbaacbacbaacaaaaabccacbbbbaaaaccacaacbcacccacabcccbaabbaccbbbbbbbcacbaacbcacbabcaaaacbbcbabbbabcccabbbaaaaacccccacacccbbbcbacbbbaabaccbcaaabccccbcaacbaacccaababccccbbbcabcbbbaaabbcbcabcaaaaabcaaacbcbaccbcbaabcaabbacbaacbbacaaacccbbcacacacbbcbacacccbcccabcabbcabbabcccbbacbacababaccabababbcbaaaabbcaaaaacbaaacacaaaaccabacabbaaaabbbaacccbbacccbacbacabcabcaaacaaaacaaccbbaabbbcabbcbcacbaccacacabbcabcacbcbccccacbaacaccbccbbcabcbabaaabaabcbaccaababbcaacbaabcabbbcbcaaaacbaccacaccaccacbaa\nbbcccab", "287\r\n1585\r\n3612\r\n4294\r\n10800\r\n12025\r\n20604\r\n26894\r\n")] + public void Test1(string input, string expected) { var stringWriter = new StringWriter(); Console.SetOut(stringWriter); diff --git a/CourseApp/Module2/BubleSort.cs b/CourseApp/Module2/BubleSort.cs index 3449a77..f3b705a 100644 --- a/CourseApp/Module2/BubleSort.cs +++ b/CourseApp/Module2/BubleSort.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; namespace CourseApp.Module2 diff --git a/CourseApp/Module3/FindString.cs b/CourseApp/Module3/FindString.cs index 5e4637e..914e765 100644 --- a/CourseApp/Module3/FindString.cs +++ b/CourseApp/Module3/FindString.cs @@ -1,22 +1,57 @@ using System; -using System.Collections.Generic; -using System.Linq; namespace CourseApp.Module3 { public class FindString { - public static void FindStr() + public static long Get_hash(string str, int b, int q, int t) + { + long res = 0; + for (int i = 0; i < b; i++) + { + res = ((res * t) + str[i]) % q; + } + + return res; + } + + public static void Rabin_karp(string e, string k, int o, int v) { - var a = Console.ReadLine(); - var b = Console.ReadLine(); - List result = new List(); - for (int i = 0; ; i += b.Length) + long ht = Get_hash(k, k.Length, o, v); + + long hs = Get_hash(e, k.Length, o, v); + + long xt = 1; + + for (int i = 0; i < k.Length; i++) { - result.Add(a.IndexOf(b, i).ToString()); + xt = (xt * v) % o; } - Console.WriteLine(result.Aggregate((d, c) => d + " " + c) + "\r\n"); + for (int i = 0; i <= e.Length - k.Length; i++) + { + if (ht == hs) + { + Console.Write("{0} ", i); + } + + if (i + k.Length < e.Length) + { + hs = ((hs * v) - (e[i] * xt) + e[i + k.Length]) % o; + hs = (hs + o) % o; + } + } + } + + public static void FindStr() + { + string str = Console.ReadLine(); + string subStr = Console.ReadLine(); + + int o = 67953405; + int v = 26; + + Rabin_karp(str, subStr, o, v); } } -} +} \ No newline at end of file From 41f5fc2847f958f5dca70508ae68ae38cf880049 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Sun, 9 Apr 2023 03:13:32 +0300 Subject: [PATCH 17/28] Add Kmp method, but it is not working right --- CourseApp/Module3/CycleOfStr.cs | 52 +++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 5 +++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 CourseApp/Module3/CycleOfStr.cs diff --git a/CourseApp/Module3/CycleOfStr.cs b/CourseApp/Module3/CycleOfStr.cs new file mode 100644 index 0000000..502985d --- /dev/null +++ b/CourseApp/Module3/CycleOfStr.cs @@ -0,0 +1,52 @@ +using System; + +namespace CourseApp.Module3 +{ + public class CycleOfStr + { + public static int[] Kmp(string str) + { + int[] p = new int[str.Length]; + for (var i = 1; i < str.Length; i++) + { + int j = p[i - 1]; + while (j > 0 && str[i] != str[j]) + { + j = p[j - 1]; + } + + if (str[i] == str[j]) + { + j++; + } + + p[i] = j; + } + + return p; + } + + public static int Find(string s, string t) + { + int n = s.Length; + string r = t + "#" + s + s; + int[] p = Kmp(r); + if (p[n + 1 + t.Length - 1] == t.Length) + { + return n - t.Length; + } + else + { + return -1; + } + } + + public void Ass() + { + var str = Console.ReadLine(); + var subStr = Console.ReadLine(); + var res = Find(str, subStr); + Console.WriteLine(res); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 6361f17..5a9cd4d 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -8,7 +8,10 @@ public class Program { public static void Main() { - FindString.FindStr(); + var str = Console.ReadLine(); + var subStr = Console.ReadLine(); + var res = CycleOfStr.Find(str, subStr); + Console.WriteLine(res); } } } \ No newline at end of file From 2265e6e39c232db3b9a1fc7917b11234b37580a0 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Sun, 9 Apr 2023 03:45:57 +0300 Subject: [PATCH 18/28] GPT genered code for Kmp --- CourseApp/Module3/CycleOfStr.cs | 45 +++++++++++++++++---------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/CourseApp/Module3/CycleOfStr.cs b/CourseApp/Module3/CycleOfStr.cs index 502985d..3056c0a 100644 --- a/CourseApp/Module3/CycleOfStr.cs +++ b/CourseApp/Module3/CycleOfStr.cs @@ -4,49 +4,50 @@ namespace CourseApp.Module3 { public class CycleOfStr { - public static int[] Kmp(string str) + public static int[] Kmp(string s) { - int[] p = new int[str.Length]; - for (var i = 1; i < str.Length; i++) + int n = s.Length; + int[] pi = new int[n]; + for (int i = 1; i < n; i++) { - int j = p[i - 1]; - while (j > 0 && str[i] != str[j]) + int j = pi[i - 1]; + while (j > 0 && s[i] != s[j]) { - j = p[j - 1]; + j = pi[j - 1]; } - if (str[i] == str[j]) + if (s[i] == s[j]) { j++; } - p[i] = j; + pi[i] = j; } - return p; + return pi; } public static int Find(string s, string t) { int n = s.Length; - string r = t + "#" + s + s; - int[] p = Kmp(r); - if (p[n + 1 + t.Length - 1] == t.Length) + int m = t.Length; + if (n != m) { - return n - t.Length; + return -1; } - else + + s = s + '#' + s; + int[] pi = Kmp(s); + for (int i = 0; i < m; i++) { - return -1; + int j = pi[n + i + 1]; + if (t[i] != s[j]) + { + return -1; + } } - } - public void Ass() - { - var str = Console.ReadLine(); - var subStr = Console.ReadLine(); - var res = Find(str, subStr); - Console.WriteLine(res); + return n - pi[n * 2]; } } } \ No newline at end of file From 69968a23731e55d832f3d489d9cc92b16fbce812 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Fri, 21 Apr 2023 21:43:20 +0300 Subject: [PATCH 19/28] Shiftstring by Rabin-Karp metgod is working right now --- CourseApp/Module2/BorderOut.cs | 50 +++++++++++++++++ CourseApp/Module2/MergeBorderOutput.cs | 2 +- CourseApp/Module3/CycleOfStr.cs | 57 +++++++++----------- CourseApp/Module3/Shiftstring.cs | 74 ++++++++++++++++++++++++++ CourseApp/Program.cs | 5 +- 5 files changed, 152 insertions(+), 36 deletions(-) create mode 100644 CourseApp/Module2/BorderOut.cs create mode 100644 CourseApp/Module3/Shiftstring.cs diff --git a/CourseApp/Module2/BorderOut.cs b/CourseApp/Module2/BorderOut.cs new file mode 100644 index 0000000..2cc9bb9 --- /dev/null +++ b/CourseApp/Module2/BorderOut.cs @@ -0,0 +1,50 @@ +using System; + +namespace CourseApp.Module2 +{ + public class BorderOut + { + public static int[] Merge(int[] arr1, int[] arr2) + { + var res = new int[arr1.Length + arr2.Length]; + int k = 0, i = 0, j = 0; + while (k < res.Length) + { + if ((j == arr2.Length) || (i < arr1.Length && arr1[i] <= arr2[j])) + { + res[k] = arr1[i]; + i++; + } + else + { + res[k] = arr2[j]; + j++; + } + + k++; + } + + return res; + } + + public static int[] MergeSort(int[] arr) + { + if (arr.Length == 1) + { + return arr; + } + + var mid = arr.Length / 2; + var left = new int[mid]; + var right = new int[arr.Length - mid]; + + Array.Copy(arr, 0, left, 0, left.Length); + Array.Copy(arr, left.Length, right, 0, right.Length); + + left = MergeSort(left); + right = MergeSort(right); + + return Merge(left, right); + } + } +} \ No newline at end of file diff --git a/CourseApp/Module2/MergeBorderOutput.cs b/CourseApp/Module2/MergeBorderOutput.cs index 8288ab4..2f6d7b8 100644 --- a/CourseApp/Module2/MergeBorderOutput.cs +++ b/CourseApp/Module2/MergeBorderOutput.cs @@ -4,7 +4,7 @@ namespace CourseApp.Module2 { public class MergeBorderOutput { - public static void Gain() + public static void Gain() // Main() method { MergeSortMethod(); } diff --git a/CourseApp/Module3/CycleOfStr.cs b/CourseApp/Module3/CycleOfStr.cs index 3056c0a..f949504 100644 --- a/CourseApp/Module3/CycleOfStr.cs +++ b/CourseApp/Module3/CycleOfStr.cs @@ -1,53 +1,48 @@ using System; +using System.Globalization; namespace CourseApp.Module3 { public class CycleOfStr { - public static int[] Kmp(string s) + public static int GetHash(string s, int n) { - int n = s.Length; - int[] pi = new int[n]; - for (int i = 1; i < n; i++) + int res = 0, p = 2803, x = 31; + for (int i = 0; i < n; i++) { - int j = pi[i - 1]; - while (j > 0 && s[i] != s[j]) - { - j = pi[j - 1]; - } - - if (s[i] == s[j]) - { - j++; - } - - pi[i] = j; + res = ((res * x) + s[i]) % p; } - return pi; + return res; } - public static int Find(string s, string t) + public static int RabinKarp(string s, string t) { - int n = s.Length; - int m = t.Length; - if (n != m) - { - return -1; - } + int ht = GetHash(t, t.Length); + int hs = GetHash(s, s.Length); + int p = 2803, x = 27; - s = s + '#' + s; - int[] pi = Kmp(s); - for (int i = 0; i < m; i++) + for (int i = 0; i < s.Length; i++) { - int j = pi[n + i + 1]; - if (t[i] != s[j]) + if (ht == hs) { - return -1; + return i; } + + ht = ((ht * x) - (t[i] * ht) + t[i]) % p; + ht = (ht + p) % p; } - return n - pi[n * 2]; + return -1; + } + + public static void Pain() // Main method + { + var s = Console.ReadLine(); + var t = Console.ReadLine(); + + var res = RabinKarp(s, t); + Console.WriteLine(res); } } } \ No newline at end of file diff --git a/CourseApp/Module3/Shiftstring.cs b/CourseApp/Module3/Shiftstring.cs new file mode 100644 index 0000000..4bee3de --- /dev/null +++ b/CourseApp/Module3/Shiftstring.cs @@ -0,0 +1,74 @@ +using System; +using System.Linq; + +namespace CourseApp.Module3 +{ + public class ShiftString + { + public static int Rabin_Karp(string str, string subStr) + { + if (str == subStr) + { + return 0; // случай, когда строки изначально совпали + } + + subStr = string.Concat(Enumerable.Repeat(subStr, 2)); // умножаем подстроку (паттерн) на 2 (как в Python) + + long w = 13; + long b = 1; + long t = 100000000; + + long first_hash = 0; + long second_hash = 0; + long xt = 1; + + foreach (char i in str.Reverse()) + { + first_hash = (first_hash + (i * b)) % t; // высчитываем хэш 1 строки + b = (b * w) % t; + } + + b = 1; + + for (int i = str.Length - 1; i >= 0; i--) + { + second_hash = (second_hash + (subStr[i] * b)) % t; // высчитываем хэш 2 строки + b = (b * w) % t; + } + + for (int i = 0; i < str.Length - 1; i++) + { + xt = (xt * w) % t; + } + + for (int i = 1; i < subStr.Length - str.Length + 1; i++) + { + if (first_hash == second_hash) + { + return i - 1; // находим циклическое + } + + second_hash = w * (second_hash - (subStr[i - 1] * xt)); // второй хэш + second_hash += subStr[i + str.Length - 1]; + second_hash = second_hash % t; // избавляемся от переполнения + + if ((second_hash < 0 && t > 0) || (second_hash > 0 && t < 0)) + { + second_hash += t; + } + } + + return -1; // ничего не нашли((( + } + + public static void EnterValues() + { + string r = Console.ReadLine(); + string q = Console.ReadLine(); + + int result = Rabin_Karp(r, q); + + Console.WriteLine(result); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 5a9cd4d..42d7429 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -8,10 +8,7 @@ public class Program { public static void Main() { - var str = Console.ReadLine(); - var subStr = Console.ReadLine(); - var res = CycleOfStr.Find(str, subStr); - Console.WriteLine(res); + Shiftstring.Zain(); } } } \ No newline at end of file From 81a6542a717f091089d04caa127b45a5e721a51f Mon Sep 17 00:00:00 2001 From: Kraiben Date: Fri, 21 Apr 2023 23:29:10 +0300 Subject: [PATCH 20/28] CircleString Method by prefix funhion of string --- CourseApp/Module3/CircleStr.cs | 52 ++++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 CourseApp/Module3/CircleStr.cs diff --git a/CourseApp/Module3/CircleStr.cs b/CourseApp/Module3/CircleStr.cs new file mode 100644 index 0000000..8303990 --- /dev/null +++ b/CourseApp/Module3/CircleStr.cs @@ -0,0 +1,52 @@ +using System; +using System.Linq; + +namespace CourseApp.Module3 +{ + public class CircleStr + { + public static int Pain() // Main + { + var res = 0; + var str = Console.ReadLine(); + var pup = KnutMP(str); + if (str.Distinct().Count() == 1) + { + res = str.Length; + } + else + { + res = str.Length - pup[str.Length - 1]; + } + + Console.WriteLine(res); + return res; + } + + public static int[] KnutMP(string str) + { + int j = -1; + var res = new int[str.Length]; + for (int i = 0; i < str.Length - 1; i++) + { + j = res[i]; + + while (j > 0 && str[i + 1] != str[j]) + { + j = res[i - 1]; + } + + if (str[i + 1] == str[j]) + { + res[i + 1] = j + 1; + } + else + { + res[i + 1] = 0; + } + } + + return res; + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 42d7429..83b0032 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -8,7 +8,7 @@ public class Program { public static void Main() { - Shiftstring.Zain(); + CircleStr.Pain(); } } } \ No newline at end of file From eb7eaff00862a9f83e0ed38990652fd3dda37ca6 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 25 Apr 2023 15:05:09 +0300 Subject: [PATCH 21/28] Add Prefix function by JsConst --- CourseApp/Module3/CircleStr.cs | 52 ---------------------------------- CourseApp/Module3/Prefix.cs | 52 ++++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 2 ++ 3 files changed, 54 insertions(+), 52 deletions(-) delete mode 100644 CourseApp/Module3/CircleStr.cs create mode 100644 CourseApp/Module3/Prefix.cs diff --git a/CourseApp/Module3/CircleStr.cs b/CourseApp/Module3/CircleStr.cs deleted file mode 100644 index 8303990..0000000 --- a/CourseApp/Module3/CircleStr.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Linq; - -namespace CourseApp.Module3 -{ - public class CircleStr - { - public static int Pain() // Main - { - var res = 0; - var str = Console.ReadLine(); - var pup = KnutMP(str); - if (str.Distinct().Count() == 1) - { - res = str.Length; - } - else - { - res = str.Length - pup[str.Length - 1]; - } - - Console.WriteLine(res); - return res; - } - - public static int[] KnutMP(string str) - { - int j = -1; - var res = new int[str.Length]; - for (int i = 0; i < str.Length - 1; i++) - { - j = res[i]; - - while (j > 0 && str[i + 1] != str[j]) - { - j = res[i - 1]; - } - - if (str[i + 1] == str[j]) - { - res[i + 1] = j + 1; - } - else - { - res[i + 1] = 0; - } - } - - return res; - } - } -} diff --git a/CourseApp/Module3/Prefix.cs b/CourseApp/Module3/Prefix.cs new file mode 100644 index 0000000..7a5484f --- /dev/null +++ b/CourseApp/Module3/Prefix.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Reflection.PortableExecutable; +using System.Text; + +namespace CourseApp.Module3 +{ + public class Prefix + { + public static int[] Period(string str) + { + var length = str.Length; + var result = new int[length]; + for (int i = 0; i < length - 1; i++) + { + var j = result[i]; + while ((j > 0) && (str[i + 1] != str[j])) + { + j = result[i - 1]; + } + + if (str[i + 1] == str[j]) + { + result[i + 1] = j + 1; + } + else + { + result[i + 1] = 0; + } + } + + return result; + } + + public static void Pain() + { + var str = Console.ReadLine(); + var pref = Period(str); + var res = str.Length - pref[str.Length - 1]; + + if (str.Length % res == 0) + { + Console.WriteLine(str.Length / res); + } + else + { + Console.WriteLine(1); + } + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 83b0032..2186712 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -1,4 +1,6 @@ using System; +using System.Globalization; +using System.Linq; using CourseApp.Module2; using CourseApp.Module3; From 6f88cd58561454ee492b8e9b4664d9707293248a Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 2 May 2023 20:04:52 +0300 Subject: [PATCH 22/28] Add 4th task of 3rd module (Z-functoin of str, named CyclingString). And Add Tree class (binary tree realisation from lecture) --- CourseApp/Module3/CyclingString.cs | 45 ++++++++++++++++++++++++++++++ CourseApp/Module5/Tree.cs | 30 ++++++++++++++++++++ CourseApp/Program.cs | 2 +- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 CourseApp/Module3/CyclingString.cs create mode 100644 CourseApp/Module5/Tree.cs diff --git a/CourseApp/Module3/CyclingString.cs b/CourseApp/Module3/CyclingString.cs new file mode 100644 index 0000000..99f23cd --- /dev/null +++ b/CourseApp/Module3/CyclingString.cs @@ -0,0 +1,45 @@ +using System; + +namespace CourseApp.Module3 +{ + public class CyclingString + { + public static int[] Prefix_function(string str) // Z-function finder + { + int[] res = new int[str.Length]; + res[0] = 0; + + for (int i = 0; i < str.Length - 1; i++) + { + int j = res[i]; + + while (j > 0 && str[i + 1] != str[j]) + { + j = res[j - 1]; + } + + if (str[i + 1] == str[j]) + { + res[i + 1] = j + 1; + } + else + { + res[i + 1] = 0; + } + } + + return res; + } + + public static void Pain() + { + string str = Console.ReadLine(); + + int[] prefixs = Prefix_function(str); + + int result = str.Length - prefixs[str.Length - 1]; + + Console.WriteLine(result); + } + } +} \ No newline at end of file diff --git a/CourseApp/Module5/Tree.cs b/CourseApp/Module5/Tree.cs new file mode 100644 index 0000000..7e27f36 --- /dev/null +++ b/CourseApp/Module5/Tree.cs @@ -0,0 +1,30 @@ +namespace CourseApp.Module5 +{ + public class Tree + { + public Tree(int value) + { + this.Value = value; + this.Left = null; + this.Right = null; + } + + public Tree Left { get; set; } + + public Tree Right { get; set; } + + public int Value { get; set; } + + public int GetVal(int value) + { + return this.Value; + } + + public void SetVal(int val) + { + this.Value = val; + } + + public Tree GetLeft(Tree elem) => elem.Left == null ? null : elem.Left; + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 2186712..e5b9edb 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -10,7 +10,7 @@ public class Program { public static void Main() { - CircleStr.Pain(); + Prefix.Pain(); } } } \ No newline at end of file From 5e381f719f76f41c13331adf70367c5821de6cb7 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Tue, 2 May 2023 21:26:42 +0300 Subject: [PATCH 23/28] Add tests for ZFunc finder(do not working now) --- CourseApp.Tests/Module3/ZFuncTest1.cs | 41 +++++++++++++++++++++++++++ CourseApp/Module3/ZFuncTest.cs | 41 +++++++++++++++++++++++++++ CourseApp/Program.cs | 2 +- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 CourseApp.Tests/Module3/ZFuncTest1.cs create mode 100644 CourseApp/Module3/ZFuncTest.cs diff --git a/CourseApp.Tests/Module3/ZFuncTest1.cs b/CourseApp.Tests/Module3/ZFuncTest1.cs new file mode 100644 index 0000000..02f26c0 --- /dev/null +++ b/CourseApp.Tests/Module3/ZFuncTest1.cs @@ -0,0 +1,41 @@ +using System; +using System.IO; +using Xunit; +using CourseApp.Module3; + +namespace CourseApp.Tests.Module3 +{ + [Collection("Sequential")] + public class ZFuncTest1 : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData( + "zbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzbzz", + 113)] + [InlineData("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", 1)] + + public void Test1(string input, int expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + ZFuncTest.Pain(); + + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} \ No newline at end of file diff --git a/CourseApp/Module3/ZFuncTest.cs b/CourseApp/Module3/ZFuncTest.cs new file mode 100644 index 0000000..a2a337d --- /dev/null +++ b/CourseApp/Module3/ZFuncTest.cs @@ -0,0 +1,41 @@ +using System; + +namespace CourseApp.Module3 +{ + public class ZFuncTest + { + public static int[] ZFunc(string str) + { + var res = new int[str.Length]; + res[0] = 0; + + for (int i = 0; i > str.Length - 1; i++) + { + int j = res[i]; + while (j > 0 && str[i + 1] != str[j]) + { + j = res[j - 1]; + } + + if (str[i + 1] == str[j]) + { + res[i + 1] = j + 1; + } + else + { + res[i + 1] = 0; + } + } + + return res; + } + + public static void Pain() + { + var str = Console.ReadLine(); + int[] pref = ZFunc(str); + int res = str.Length - pref[str.Length - 1]; + Console.WriteLine(res); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index e5b9edb..970f05f 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -10,7 +10,7 @@ public class Program { public static void Main() { - Prefix.Pain(); + ZFuncTest.Pain(); } } } \ No newline at end of file From 4d4d096714c227d2e8adfa37dd6d6e2efd4076e1 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Wed, 3 May 2023 22:27:19 +0300 Subject: [PATCH 24/28] Fix code, now tests are working --- CourseApp/Module3/ZFuncTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CourseApp/Module3/ZFuncTest.cs b/CourseApp/Module3/ZFuncTest.cs index a2a337d..8c61e05 100644 --- a/CourseApp/Module3/ZFuncTest.cs +++ b/CourseApp/Module3/ZFuncTest.cs @@ -9,7 +9,7 @@ public static int[] ZFunc(string str) var res = new int[str.Length]; res[0] = 0; - for (int i = 0; i > str.Length - 1; i++) + for (int i = 0; i < str.Length - 1; i++) { int j = res[i]; while (j > 0 && str[i + 1] != str[j]) From 1e9956c2e701bde50945ae86405c0b42f3a3502e Mon Sep 17 00:00:00 2001 From: Kraiben Date: Wed, 3 May 2023 23:44:00 +0300 Subject: [PATCH 25/28] Start to write BalsCount method. (4 module 1 task) why stach is empty??? ((( --- CourseApp/Module4/BalsCount.cs | 44 ++++++++++++++++++++++++++++++++++ CourseApp/Program.cs | 5 +++- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 CourseApp/Module4/BalsCount.cs diff --git a/CourseApp/Module4/BalsCount.cs b/CourseApp/Module4/BalsCount.cs new file mode 100644 index 0000000..dc94395 --- /dev/null +++ b/CourseApp/Module4/BalsCount.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; + +namespace CourseApp.Module4 +{ + public class BalsCount + { + public static int Count(string nums) + { + var myStack = new Stack(); + var resStack = new Stack(); + var count = 1; + var res = 0; + + for (int i = 2; i < nums.Length; i += 2) + { + myStack.Push(Convert.ToInt16(nums[i])); + } + + var length = myStack.Count; + + while (myStack.Count > 0 || res != length / 3) + { + resStack.Push(myStack.Pop()); + if (resStack.Pop() == myStack.Peek()) + { + count++; + if (count == 3) + { + res++; + resStack.Clear(); + } + } + else + { + resStack.Clear(); + count = 1; + } + } + + return res * 3; + } + } +} diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 970f05f..efd6418 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -1,8 +1,10 @@ using System; +using System.Collections.Generic; using System.Globalization; using System.Linq; using CourseApp.Module2; using CourseApp.Module3; +using CourseApp.Module4; namespace CourseApp { @@ -10,7 +12,8 @@ public class Program { public static void Main() { - ZFuncTest.Pain(); + var i = BalsCount.Count("5 1 3 3 3 2"); + Console.WriteLine(i); } } } \ No newline at end of file From e9e8de095e1e999e651afaddd4785802f8508d17 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Fri, 5 May 2023 12:50:27 +0300 Subject: [PATCH 26/28] Add 1 Task of 4 Module and Tests for it --- CourseApp.Tests/Module4/PspTest.cs | 39 ++++++++++++++++++++++++++++++ CourseApp/Module4/BalsCount.cs | 11 +++++---- CourseApp/Module4/PSP.cs | 34 ++++++++++++++++++++++++++ CourseApp/Program.cs | 3 +-- 4 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 CourseApp.Tests/Module4/PspTest.cs create mode 100644 CourseApp/Module4/PSP.cs diff --git a/CourseApp.Tests/Module4/PspTest.cs b/CourseApp.Tests/Module4/PspTest.cs new file mode 100644 index 0000000..47a5f05 --- /dev/null +++ b/CourseApp.Tests/Module4/PspTest.cs @@ -0,0 +1,39 @@ +using System; +using System.IO; +using Xunit; + +namespace CourseApp.Tests.Module3 +{ + [Collection("Sequential")] + public class PspTest : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData("())(()", "2")] + [InlineData("))(((", "5")] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + PSP.Psp(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} diff --git a/CourseApp/Module4/BalsCount.cs b/CourseApp/Module4/BalsCount.cs index dc94395..3ff70f6 100644 --- a/CourseApp/Module4/BalsCount.cs +++ b/CourseApp/Module4/BalsCount.cs @@ -5,8 +5,9 @@ namespace CourseApp.Module4 { public class BalsCount { - public static int Count(string nums) + public static void Count() { + var nums = Console.ReadLine(); var myStack = new Stack(); var resStack = new Stack(); var count = 1; @@ -19,10 +20,10 @@ public static int Count(string nums) var length = myStack.Count; - while (myStack.Count > 0 || res != length / 3) + while (myStack.Count > 0) { - resStack.Push(myStack.Pop()); - if (resStack.Pop() == myStack.Peek()) + resStack.Push(myStack.Peek()); + if (resStack.Pop() == myStack.Pop()) { count++; if (count == 3) @@ -38,7 +39,7 @@ public static int Count(string nums) } } - return res * 3; + Console.WriteLine(res * 3); } } } diff --git a/CourseApp/Module4/PSP.cs b/CourseApp/Module4/PSP.cs new file mode 100644 index 0000000..aaa860d --- /dev/null +++ b/CourseApp/Module4/PSP.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; + +namespace CourseApp +{ + public class PSP + { + public static void Psp() + { + var s = Console.ReadLine(); + Stack stack = new Stack(); + foreach (char c in s) + { + if (c == '(') + { + stack.Push(c); + } + else if (c == ')') + { + if (stack.Count > 0 && stack.Peek() == '(') + { + stack.Pop(); + } + else + { + stack.Push(c); + } + } + } + + Console.WriteLine(stack.Count); + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index efd6418..f382cb5 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -12,8 +12,7 @@ public class Program { public static void Main() { - var i = BalsCount.Count("5 1 3 3 3 2"); - Console.WriteLine(i); + PSP.Psp(); } } } \ No newline at end of file From 1f6e4a8010798fd3b6ac20c7cd409aa602551d6a Mon Sep 17 00:00:00 2001 From: Kraiben Date: Fri, 5 May 2023 13:13:02 +0300 Subject: [PATCH 27/28] fix naming in PSP class and rewrite it for understand more --- CourseApp/Module4/PSP.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CourseApp/Module4/PSP.cs b/CourseApp/Module4/PSP.cs index aaa860d..b3b705c 100644 --- a/CourseApp/Module4/PSP.cs +++ b/CourseApp/Module4/PSP.cs @@ -7,15 +7,16 @@ public class PSP { public static void Psp() { - var s = Console.ReadLine(); - Stack stack = new Stack(); - foreach (char c in s) + var str = Console.ReadLine(); + var stack = new Stack(); + + foreach (char symbol in str) { - if (c == '(') + if (symbol == '(') { - stack.Push(c); + stack.Push(symbol); } - else if (c == ')') + else if (symbol == ')') { if (stack.Count > 0 && stack.Peek() == '(') { @@ -23,7 +24,7 @@ public static void Psp() } else { - stack.Push(c); + stack.Push(symbol); } } } From 151f3d617c28f508cab2b09af176e9d82d7777d9 Mon Sep 17 00:00:00 2001 From: Kraiben Date: Mon, 15 May 2023 01:50:35 +0300 Subject: [PATCH 28/28] Task 2 From 4 module (Sort) and tests --- CourseApp.Tests/Module4/SortTest.cs | 41 ++++++++++++++++++++++++ CourseApp/Module4/Sort.cs | 48 +++++++++++++++++++++++++++++ CourseApp/Program.cs | 2 +- 3 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 CourseApp.Tests/Module4/SortTest.cs create mode 100644 CourseApp/Module4/Sort.cs diff --git a/CourseApp.Tests/Module4/SortTest.cs b/CourseApp.Tests/Module4/SortTest.cs new file mode 100644 index 0000000..b691277 --- /dev/null +++ b/CourseApp.Tests/Module4/SortTest.cs @@ -0,0 +1,41 @@ +namespace CourseApp.Tests.Module4 +{ + using System; + using System.IO; + using CourseApp.Module4; + using Xunit; + + [Collection("Sequential")] + public class SortTest : IDisposable + { + public void Dispose() + { + var standardOut = new StreamWriter(Console.OpenStandardOutput()); + standardOut.AutoFlush = true; + var standardIn = new StreamReader(Console.OpenStandardInput()); + Console.SetOut(standardOut); + Console.SetIn(standardIn); + } + + [Theory] + [InlineData("3\n3 2 1", "YES")] + [InlineData("4\n4 1 3 2", "YES")] + [InlineData("3\n2 3 1", "NO")] + public void Test1(string input, string expected) + { + var stringWriter = new StringWriter(); + Console.SetOut(stringWriter); + + var stringReader = new StringReader(input); + Console.SetIn(stringReader); + + // act + Sort.Pain(); + + // assert + var output = stringWriter.ToString().Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries); + Assert.Equal($"{expected}", output[0]); + var standardOutput = new StreamWriter(Console.OpenStandardOutput()); + } + } +} diff --git a/CourseApp/Module4/Sort.cs b/CourseApp/Module4/Sort.cs new file mode 100644 index 0000000..556fb40 --- /dev/null +++ b/CourseApp/Module4/Sort.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace CourseApp.Module4 +{ + public class Sort + { + public static void Pain() + { + var count = Convert.ToInt16(Console.ReadLine()); + var mass = Console.ReadLine().Split(" "); + + var a = Pup(count, mass); + + var str = a ? "YES" : "NO"; + + Console.WriteLine(str); + } + + public static bool Pup(int count, string[] mass) + { + var res = false; + var stack = new Stack(); + var ind = 0; + var start = 1; + + while (count >= ind + 1) + { + stack.Push(Convert.ToInt16(mass[ind])); + ind++; + + while (stack.Count != 0 && stack.Peek() == start) + { + stack.Pop(); + start++; + } + } + + if (stack.Count == 0) + { + res = true; + } + + return res; + } + } +} \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index f382cb5..ef15117 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -12,7 +12,7 @@ public class Program { public static void Main() { - PSP.Psp(); + Sort.Pain(); } } } \ No newline at end of file