Compare commits
51 Commits
e458f6e51e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 238f8048e0 | |||
| 231a37be9e | |||
| 3678af68c0 | |||
| d8154da7a9 | |||
| ddba0fc8b5 | |||
| dec9762ba2 | |||
| 380611c4df | |||
| 1e5c8fab61 | |||
| ab6616b619 | |||
| 6f5907b244 | |||
| 304f238a8a | |||
| b3dd5ae4c7 | |||
| 29c361725e | |||
| 868a206eb1 | |||
| 21d9d2c105 | |||
| 5ef52d793b | |||
| 5945b021f2 | |||
| e197eb2690 | |||
| 7b3f22216f | |||
| 6c42ebab03 | |||
| 8173cf4dab | |||
| 971119da82 | |||
| ab51c1a3dc | |||
| 826ab5a4d9 | |||
| 03dabc9dee | |||
| de97058fe9 | |||
| 4807af64d9 | |||
| 4be68698dd | |||
| 4488a76813 | |||
| 02aefc2a89 | |||
| 8b7b78ee4d | |||
| 26ce449302 | |||
| 04af91b4a7 | |||
| 8414aeb924 | |||
| f655cc480c | |||
| d1eac5b8b5 | |||
| 8a5c2a28c6 | |||
| c411372ec7 | |||
| f211ef6073 | |||
| 3bc865b923 | |||
| 0622e7e215 | |||
| ade99c8153 | |||
| 46d9e93e13 | |||
| ffb7d736ca | |||
| 8bb1a8ac0a | |||
| cb731abee6 | |||
| 3b830c7dd6 | |||
| 5fe95f078f | |||
| f3c258a2fc | |||
| 6e604740a5 | |||
| d407f92497 |
22
.gitea/workflows/fast-reverse.yml
Normal file
22
.gitea/workflows/fast-reverse.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Fast Reverse Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile Java
|
||||||
|
run: |
|
||||||
|
mkdir -p out
|
||||||
|
javac -d out $(find java -name "*.java")
|
||||||
|
|
||||||
|
- name: Run Fast Reverse tests
|
||||||
|
run: |
|
||||||
|
java -ea -cp out reverse.FastReverseTest Base 3233
|
||||||
22
.gitea/workflows/reverse.yml
Normal file
22
.gitea/workflows/reverse.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Reverse Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile Java
|
||||||
|
run: |
|
||||||
|
mkdir -p out
|
||||||
|
javac -d out $(find java -name "*.java")
|
||||||
|
|
||||||
|
- name: Run Reverse tests
|
||||||
|
run: |
|
||||||
|
java -ea -cp out reverse.ReverseTest Base 3233 3435 3637 3839 4142
|
||||||
22
.gitea/workflows/sum.yml
Normal file
22
.gitea/workflows/sum.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Sum Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile Java
|
||||||
|
run: |
|
||||||
|
mkdir -p out
|
||||||
|
javac -d out $(find java -name "*.java")
|
||||||
|
|
||||||
|
- name: Run Sum tests
|
||||||
|
run: |
|
||||||
|
java -ea -cp out sum.SumTest Base 3233 3435 3637 3839 4142 4749
|
||||||
22
.gitea/workflows/word-stat.yml
Normal file
22
.gitea/workflows/word-stat.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Word Stat Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile Java
|
||||||
|
run: |
|
||||||
|
mkdir -p out
|
||||||
|
javac -d out $(find java -name "*.java")
|
||||||
|
|
||||||
|
- name: Run Word Stat tests
|
||||||
|
run: |
|
||||||
|
java -ea -cp out wordStat.WordStatTest Base 3233 3435 3637 3839 4142 4749
|
||||||
22
.gitea/workflows/wspp.yml
Normal file
22
.gitea/workflows/wspp.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Word Stat++ Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Compile Java
|
||||||
|
run: |
|
||||||
|
mkdir -p out
|
||||||
|
javac -d out $(find java -name "*.java")
|
||||||
|
|
||||||
|
- name: Run Word Stat++ tests
|
||||||
|
run: |
|
||||||
|
java -ea -cp out wspp.WsppTest Base 3233
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
|||||||
*.xml
|
*.xml
|
||||||
java/out/*
|
java/out/
|
||||||
*.iml
|
*.iml
|
||||||
|
*.idea*
|
||||||
|
*out*
|
||||||
|
|||||||
63
README.md
63
README.md
@@ -7,7 +7,6 @@ include_toc: true
|
|||||||
|
|
||||||
[Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html)
|
[Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html)
|
||||||
|
|
||||||
|
|
||||||
## Домашнее задание 14. Обработка ошибок
|
## Домашнее задание 14. Обработка ошибок
|
||||||
|
|
||||||
Модификации
|
Модификации
|
||||||
@@ -276,10 +275,11 @@ include_toc: true
|
|||||||
* Класс должен иметь имя `WsppPosition`
|
* Класс должен иметь имя `WsppPosition`
|
||||||
|
|
||||||
|
|
||||||
## Домашнее задание 5. Свой сканнер
|
## Домашнее задание 5. Свой сканнер [](https://git.fymio.us/me/prog-intro-2025/actions)
|
||||||
|
|
||||||
|
|
||||||
Модификации
|
Модификации
|
||||||
* *Base*
|
* *Base* ✅
|
||||||
* Исходный код тестов: [FastReverseTest.java](java/reverse/FastReverseTest.java)
|
* Исходный код тестов: [FastReverseTest.java](java/reverse/FastReverseTest.java)
|
||||||
* Откомпилированные тесты: [FastReverseTest.jar](artifacts/FastReverseTest.jar)
|
* Откомпилированные тесты: [FastReverseTest.jar](artifacts/FastReverseTest.jar)
|
||||||
* Аргументы командной строки: модификации
|
* Аргументы командной строки: модификации
|
||||||
@@ -311,7 +311,7 @@ include_toc: true
|
|||||||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||||||
скобками
|
скобками
|
||||||
* Класс должен иметь имя `ReverseRotate`
|
* Класс должен иметь имя `ReverseRotate`
|
||||||
* *3233*
|
* *3233* ✅
|
||||||
* Выведите (в реверсивном порядке) только числа,
|
* Выведите (в реверсивном порядке) только числа,
|
||||||
у которых сумма номеров строки и столбца четная
|
у которых сумма номеров строки и столбца четная
|
||||||
* Числа дополнительно могут разделяться
|
* Числа дополнительно могут разделяться
|
||||||
@@ -337,10 +337,11 @@ include_toc: true
|
|||||||
* Класс должен иметь имя `ReverseSum`
|
* Класс должен иметь имя `ReverseSum`
|
||||||
|
|
||||||
|
|
||||||
## Домашнее задание 4. Подсчет слов
|
## Домашнее задание 4. Подсчет слов [](https://git.fymio.us/me/prog-intro-2025/actions)
|
||||||
|
|
||||||
|
|
||||||
Модификации
|
Модификации
|
||||||
* *Base*
|
* *Base* ✅
|
||||||
* Класс должен иметь имя `WordStat`
|
* Класс должен иметь имя `WordStat`
|
||||||
* Исходный код тестов:
|
* Исходный код тестов:
|
||||||
[WordStatTest.java](java/wordStat/WordStatTest.java),
|
[WordStatTest.java](java/wordStat/WordStatTest.java),
|
||||||
@@ -348,10 +349,10 @@ include_toc: true
|
|||||||
[WordStatChecker.java](java/wordStat/WordStatChecker.java)
|
[WordStatChecker.java](java/wordStat/WordStatChecker.java)
|
||||||
* Откомпилированные тесты: [WordStatTest.jar](artifacts/WordStatTest.jar)
|
* Откомпилированные тесты: [WordStatTest.jar](artifacts/WordStatTest.jar)
|
||||||
* Аргументы командной строки: модификации
|
* Аргументы командной строки: модификации
|
||||||
* *FastSort*
|
* *FastSort* ✅
|
||||||
* Пусть _n_ – число слов во входном файле,
|
* Пусть _n_ – число слов во входном файле,
|
||||||
тогда программа должна работать за O(_n_ log _n_).
|
тогда программа должна работать за O(_n_ log _n_).
|
||||||
* *3637*
|
* *3637* ✅
|
||||||
* Назовём _серединой слова_ подстроку, полученную удалением
|
* Назовём _серединой слова_ подстроку, полученную удалением
|
||||||
первых и последних 3 символов слова.
|
первых и последних 3 символов слова.
|
||||||
Слова длины меньшей 7 игнорируются.
|
Слова длины меньшей 7 игнорируются.
|
||||||
@@ -359,7 +360,7 @@ include_toc: true
|
|||||||
середины слов, встречающихся во входном файле,
|
середины слов, встречающихся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthMiddle`
|
* Класс должен иметь имя `WordStatLengthMiddle`
|
||||||
* *3839*
|
* *3839* ✅
|
||||||
* Назовём _аффиксами слова_
|
* Назовём _аффиксами слова_
|
||||||
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
|
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
|
||||||
Слова длины один игнорируются.
|
Слова длины один игнорируются.
|
||||||
@@ -367,7 +368,7 @@ include_toc: true
|
|||||||
аффиксы слов, встречающихся во входном файле,
|
аффиксы слов, встречающихся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthAffix`
|
* Класс должен иметь имя `WordStatLengthAffix`
|
||||||
* *3435*
|
* *3435* ✅
|
||||||
* Назовём _суффиксом слова_ подстроку,
|
* Назовём _суффиксом слова_ подстроку,
|
||||||
состоящую из `n / 2` последних символов слова, где `n` — длина слова.
|
состоящую из `n / 2` последних символов слова, где `n` — длина слова.
|
||||||
Слова длины один игнорируются.
|
Слова длины один игнорируются.
|
||||||
@@ -375,12 +376,12 @@ include_toc: true
|
|||||||
суффиксы слов, встречающихся во входном файле,
|
суффиксы слов, встречающихся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthSuffix`
|
* Класс должен иметь имя `WordStatLengthSuffix`
|
||||||
* *3233*
|
* *3233* ✅
|
||||||
* Выходной файл должен содержать все различные
|
* Выходной файл должен содержать все различные
|
||||||
слова встречающиеся во входном файле,
|
слова встречающиеся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLength`
|
* Класс должен иметь имя `WordStatLength`
|
||||||
* *4142*
|
* *4142* ✅
|
||||||
* Назовём _серединой слова_ подстроку, полученную удалением
|
* Назовём _серединой слова_ подстроку, полученную удалением
|
||||||
первых и последних 3 символов слова.
|
первых и последних 3 символов слова.
|
||||||
Слова длины меньшей 7 игнорируются.
|
Слова длины меньшей 7 игнорируются.
|
||||||
@@ -388,7 +389,7 @@ include_toc: true
|
|||||||
середины слов, встречающихся во входном файле,
|
середины слов, встречающихся во входном файле,
|
||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthMiddle`
|
* Класс должен иметь имя `WordStatLengthMiddle`
|
||||||
* *4749*
|
* *4749* ✅
|
||||||
* Назовём _префиксом слова_ подстроку,
|
* Назовём _префиксом слова_ подстроку,
|
||||||
состоящую из `n / 2` первых символов слова, где `n` — длина слова.
|
состоящую из `n / 2` первых символов слова, где `n` — длина слова.
|
||||||
Слова длины один игнорируются.
|
Слова длины один игнорируются.
|
||||||
@@ -397,24 +398,24 @@ include_toc: true
|
|||||||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||||||
* Класс должен иметь имя `WordStatLengthPrefix`
|
* Класс должен иметь имя `WordStatLengthPrefix`
|
||||||
|
|
||||||
|
## Домашнее задание 3. Реверс [](https://git.fymio.us/me/prog-intro-2025/actions)
|
||||||
|
|
||||||
## Домашнее задание 3. Реверс
|
|
||||||
|
|
||||||
Модификации
|
Модификации
|
||||||
* *Base*
|
* *Base* ✅
|
||||||
* Исходный код тестов:
|
* Исходный код тестов:
|
||||||
[ReverseTest.java](java/reverse/ReverseTest.java),
|
[ReverseTest.java](java/reverse/ReverseTest.java),
|
||||||
[ReverseTester.java](java/reverse/ReverseTester.java)
|
[ReverseTester.java](java/reverse/ReverseTester.java)
|
||||||
* Откомпилированные тесты: [ReverseTest.jar](artifacts/ReverseTest.jar)
|
* Откомпилированные тесты: [ReverseTest.jar](artifacts/ReverseTest.jar)
|
||||||
* Аргументы командной строки: модификации
|
* Аргументы командной строки: модификации
|
||||||
* *Memory*
|
* *Memory* ✅
|
||||||
* Программа должна сначала считывать все данные в память,
|
* Программа должна сначала считывать все данные в память,
|
||||||
и только потом обрабатывать их.
|
и только потом обрабатывать их.
|
||||||
* Пусть _M_ – объём памяти, необходимый для сохранения ввода
|
* Пусть _M_ – объём памяти, необходимый для сохранения ввода
|
||||||
в двумерном массиве `int` минимального размера.
|
в двумерном массиве `int` минимального размера.
|
||||||
Ваша программа должна использовать не более 4_M_ + 1024 байт памяти.
|
Ваша программа должна использовать не более 4_M_ + 1024 байт памяти.
|
||||||
* Накладные расходы на запуск вашей программы JVM не учитываются.
|
* Накладные расходы на запуск вашей программы JVM не учитываются.
|
||||||
* *3637*
|
* *3637* ✅
|
||||||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||||||
вместо каждого числа выведите максимум из чисел,
|
вместо каждого числа выведите максимум из чисел,
|
||||||
находящихся в его столбце в последующих строках, и его самого
|
находящихся в его столбце в последующих строках, и его самого
|
||||||
@@ -424,7 +425,7 @@ include_toc: true
|
|||||||
вместо каждого числа выведите максимум из чисел
|
вместо каждого числа выведите максимум из чисел
|
||||||
текущее число — правый нижний угол матрицы
|
текущее число — правый нижний угол матрицы
|
||||||
* Класс должен иметь имя `ReverseMax`
|
* Класс должен иметь имя `ReverseMax`
|
||||||
* *3435*
|
* *3435* ✅
|
||||||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||||||
выведите ее поворот по часовой стрелке, например для ввода
|
выведите ее поворот по часовой стрелке, например для ввода
|
||||||
```
|
```
|
||||||
@@ -440,38 +441,37 @@ include_toc: true
|
|||||||
4
|
4
|
||||||
```
|
```
|
||||||
* Класс должен иметь имя `ReverseRotate`
|
* Класс должен иметь имя `ReverseRotate`
|
||||||
* *3233*
|
* *3233* ✅
|
||||||
* Выведите (в реверсивном порядке) только числа,
|
* Выведите (в реверсивном порядке) только числа,
|
||||||
у которых сумма номеров строки и столбца четная
|
у которых сумма номеров строки и столбца четная
|
||||||
* Класс должен иметь имя `ReverseEven`
|
* Класс должен иметь имя `ReverseEven`
|
||||||
* *4142*
|
* *4142* ✅
|
||||||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||||||
вместо каждого числа выведите среднее из чисел в его столбце и строке
|
вместо каждого числа выведите среднее из чисел в его столбце и строке
|
||||||
* Класс должен иметь имя `ReverseAvg`
|
* Класс должен иметь имя `ReverseAvg`
|
||||||
* *4749*
|
* *4749* ❌
|
||||||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||||||
вместо каждого числа выведите сумму чиселв его столбце и строке
|
вместо каждого числа выведите сумму чиселв его столбце и строке
|
||||||
* Класс должен иметь имя `ReverseSum`
|
* Класс должен иметь имя `ReverseSum`
|
||||||
|
|
||||||
|
## Домашнее задание 2. Сумма чисел [](https://git.fymio.us/me/prog-intro-2025/actions)
|
||||||
## Домашнее задание 2. Сумма чисел
|
|
||||||
|
|
||||||
Модификации
|
Модификации
|
||||||
* *Base*
|
* *Base* ✅
|
||||||
* Исходный код тестов:
|
* Исходный код тестов:
|
||||||
[SumTest.java](java/sum/SumTest.java),
|
[SumTest.java](java/sum/SumTest.java),
|
||||||
[SumTester.java](java/sum/SumTester.java),
|
[SumTester.java](java/sum/SumTester.java),
|
||||||
[базовые классы](java/base/)
|
[базовые классы](java/base/)
|
||||||
* Откомпилированные тесты: [SumTest.jar](artifacts/SumTest.jar)
|
* Откомпилированные тесты: [SumTest.jar](artifacts/SumTest.jar)
|
||||||
* Аргументы командной строки: модификации
|
* Аргументы командной строки: модификации
|
||||||
* *3637*
|
* *3637* ✅
|
||||||
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
||||||
* На вход подаются десятичные и шестнадцатеричные числа
|
* На вход подаются десятичные и шестнадцатеричные числа
|
||||||
* Шестнадцатеричные числа имеют префикс `0x`,
|
* Шестнадцатеричные числа имеют префикс `0x`,
|
||||||
например `0xa.bp2` равно (10+11/16)·4 равно 42.75
|
например `0xa.bp2` равно (10+11/16)·4 равно 42.75
|
||||||
* Ввод регистронезависим
|
* Ввод регистронезависим
|
||||||
* Класс должен иметь имя `SumDoubleHex`
|
* Класс должен иметь имя `SumDoubleHex`
|
||||||
* *3839*
|
* *3839* ✅
|
||||||
* Входные данные помещаются в тип [BigDecimal](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html)
|
* Входные данные помещаются в тип [BigDecimal](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html)
|
||||||
* На вход подаются десятичные и шестнадцатеричные числа
|
* На вход подаются десятичные и шестнадцатеричные числа
|
||||||
* Шестнадцатеричные числа имеют префикс `0x`,
|
* Шестнадцатеричные числа имеют префикс `0x`,
|
||||||
@@ -479,22 +479,23 @@ include_toc: true
|
|||||||
(мантисса и порядок являются целыми числами)
|
(мантисса и порядок являются целыми числами)
|
||||||
* Ввод регистронезависим
|
* Ввод регистронезависим
|
||||||
* Класс должен иметь имя `SumBigDecimalHex`
|
* Класс должен иметь имя `SumBigDecimalHex`
|
||||||
* *3435*
|
* *3435* ✅
|
||||||
* На вход подаются десятичные и шестнадцатеричные числа
|
* На вход подаются десятичные и шестнадцатеричные числа
|
||||||
* Шестнадцатеричные числа имеют префикс `0x`
|
* Шестнадцатеричные числа имеют префикс `0x`
|
||||||
* Ввод регистронезависим
|
* Ввод регистронезависим
|
||||||
* Класс должен иметь имя `SumHex`
|
* Класс должен иметь имя `SumHex`
|
||||||
* *3233*
|
* *3233* ✅
|
||||||
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
||||||
* Класс должен иметь имя `SumDouble`
|
* Класс должен иметь имя `SumDouble`
|
||||||
* *4142*
|
* *4142* ✅
|
||||||
* Входные данные помещаются в тип [BigInteger](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html)
|
* Входные данные помещаются в тип [BigInteger](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html)
|
||||||
* восьмеричные числа имеют суффикс `o`
|
* восьмеричные числа имеют суффикс `o`
|
||||||
* Класс должен иметь имя `SumBigIntegerOctal`
|
* Класс должен иметь имя `SumBigIntegerOctal`
|
||||||
* *4749*
|
* *4749* ✅
|
||||||
* Входные данные являются 64-битными целыми числами
|
* Входные данные являются 64-битными целыми числами
|
||||||
* восьмеричные числа имеют суффикс `o`
|
* восьмеричные числа имеют суффикс `o`
|
||||||
* Класс должен иметь имя `SumLongOctal`
|
* Класс должен иметь имя `SumLongOctal`
|
||||||
|
<!--
|
||||||
|
|
||||||
|
|
||||||
Для того, чтобы протестировать программу:
|
Для того, чтобы протестировать программу:
|
||||||
@@ -548,3 +549,5 @@ include_toc: true
|
|||||||
1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте
|
1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте
|
||||||
1. Сдайте скрипт преподавателю
|
1. Сдайте скрипт преподавателю
|
||||||
1. Вы можете получить больше плюсиков, модифицируя код `RunMe.java`
|
1. Вы можете получить больше плюсиков, модифицируя код `RunMe.java`
|
||||||
|
|
||||||
|
-->
|
||||||
|
|||||||
10
java/.idea/.gitignore
generated
vendored
10
java/.idea/.gitignore
generated
vendored
@@ -1,10 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Ignored default folder with query files
|
|
||||||
/queries/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
54
java/reverse/FastScanner.java
Normal file
54
java/reverse/FastScanner.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
public class FastScanner {
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
String line = null;
|
||||||
|
int pos = 0;
|
||||||
|
|
||||||
|
boolean hasNextLine() throws IOException {
|
||||||
|
if (line != null && pos < line.length()) return true;
|
||||||
|
line = br.readLine();
|
||||||
|
pos = 0;
|
||||||
|
return line != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasNextInt() {
|
||||||
|
if (line == null) return false;
|
||||||
|
while (pos < line.length() && (Character.isWhitespace(line.charAt(pos)) ||
|
||||||
|
Character.getType(line.charAt(pos)) == Character.START_PUNCTUATION ||
|
||||||
|
Character.getType(line.charAt(pos)) == Character.END_PUNCTUATION)) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
return pos < line.length() && (Character.isDigit(line.charAt(pos)) || line.charAt(pos) == '-');
|
||||||
|
}
|
||||||
|
|
||||||
|
int nextInt() {
|
||||||
|
while (pos < line.length() && (Character.isWhitespace(line.charAt(pos)) ||
|
||||||
|
Character.getType(line.charAt(pos)) == Character.START_PUNCTUATION ||
|
||||||
|
Character.getType(line.charAt(pos)) == Character.END_PUNCTUATION)) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int start = pos;
|
||||||
|
boolean negative = line.charAt(pos) == '-';
|
||||||
|
if (negative) pos++;
|
||||||
|
|
||||||
|
while (pos < line.length() && Character.isDigit(line.charAt(pos))) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
|
for (int i = negative ? start + 1 : start; i < pos; i++) {
|
||||||
|
result = result * 10 + (line.charAt(i) - '0');
|
||||||
|
}
|
||||||
|
return negative ? -result : result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void nextLine() {
|
||||||
|
pos = line.length();
|
||||||
|
}
|
||||||
|
}
|
||||||
43
java/reverse/Reverse.java
Normal file
43
java/reverse/Reverse.java
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class Reverse {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
for (int i = linesCount - 1; i >= 0; i--) {
|
||||||
|
int[] line = lines[i];
|
||||||
|
for (int j = line.length - 1; j >= 0; j--) {
|
||||||
|
if (j < line.length - 1) out.print(" ");
|
||||||
|
out.print(line[j]);
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
67
java/reverse/ReverseAvg.java
Normal file
67
java/reverse/ReverseAvg.java
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReverseAvg {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
printResult(linesCount, lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void printResult(int linesCount, int[][] lines) {
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
|
||||||
|
for (int i = 0; i < linesCount; i++) {
|
||||||
|
int[] line = lines[i];
|
||||||
|
|
||||||
|
for (int j = 0; j < line.length; j++) {
|
||||||
|
if (j > 0) out.print(" ");
|
||||||
|
|
||||||
|
long sum = 0;
|
||||||
|
long count = 0;
|
||||||
|
|
||||||
|
for (int m = 0; m < lines[i].length; m++) {
|
||||||
|
sum += lines[i][m];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int k = 0; k < linesCount; k++) {
|
||||||
|
if (k != i && lines[k].length > j) {
|
||||||
|
sum += lines[k][j];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.print(sum / count);
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
46
java/reverse/ReverseEven.java
Normal file
46
java/reverse/ReverseEven.java
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReverseEven {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
for (int i = linesCount - 1; i >= 0; i--) {
|
||||||
|
int[] line = lines[i];
|
||||||
|
for (int j = line.length - 1; j >= 0; j--) {
|
||||||
|
if ((i + j) % 2 == 0) {
|
||||||
|
if (j < line.length - 1) out.print(" ");
|
||||||
|
out.print(line[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
63
java/reverse/ReverseMax.java
Normal file
63
java/reverse/ReverseMax.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReverseMax {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintWriter out = getPrintWriter(linesCount, lines);
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PrintWriter getPrintWriter(int linesCount, int[][] lines) {
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
|
||||||
|
for (int i = 0; i < linesCount; i++) {
|
||||||
|
int[] line = lines[i];
|
||||||
|
|
||||||
|
for (int j = 0; j < line.length; j++) {
|
||||||
|
|
||||||
|
if (j > 0) out.print(" ");
|
||||||
|
|
||||||
|
int maxValue = lines[i][j];
|
||||||
|
|
||||||
|
for (int k = i; k < linesCount; k++) {
|
||||||
|
for (int m = j; m < lines[k].length; m++) {
|
||||||
|
if (lines[k][m] > maxValue) {
|
||||||
|
maxValue = lines[k][m];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.print(maxValue);
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
61
java/reverse/ReverseMaxC.java
Normal file
61
java/reverse/ReverseMaxC.java
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReverseMaxC {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintWriter out = getPrintWriter(linesCount, lines);
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PrintWriter getPrintWriter(int linesCount, int[][] lines) {
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
|
||||||
|
for (int i = 0; i < linesCount; i++) {
|
||||||
|
int[] line = lines[i];
|
||||||
|
|
||||||
|
for (int j = 0; j < line.length; j++) {
|
||||||
|
|
||||||
|
if (j > 0) out.print(" ");
|
||||||
|
|
||||||
|
int maxRow = lines[i][j];
|
||||||
|
|
||||||
|
for (int k = i + 1; k < linesCount; k++) {
|
||||||
|
if (lines[k].length > j && lines[k][j] > maxRow) {
|
||||||
|
maxRow = lines[k][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out.print(maxRow);
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
java/reverse/ReverseRotate.java
Normal file
52
java/reverse/ReverseRotate.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package reverse;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ReverseRotate {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
FastScanner sc = new FastScanner();
|
||||||
|
int[][] lines = new int[8][];
|
||||||
|
int linesCount = 0;
|
||||||
|
int maxCols = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
int[] line = new int[8];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
while (sc.hasNextInt()) {
|
||||||
|
if (count >= line.length) {
|
||||||
|
line = Arrays.copyOf(line, line.length * 2);
|
||||||
|
}
|
||||||
|
line[count++] = sc.nextInt();
|
||||||
|
}
|
||||||
|
sc.nextLine();
|
||||||
|
|
||||||
|
line = Arrays.copyOf(line, count);
|
||||||
|
|
||||||
|
if (linesCount >= lines.length) {
|
||||||
|
lines = Arrays.copyOf(lines, lines.length * 2);
|
||||||
|
}
|
||||||
|
lines[linesCount++] = line;
|
||||||
|
|
||||||
|
if (count > maxCols) {
|
||||||
|
maxCols = count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter out = new PrintWriter(System.out);
|
||||||
|
|
||||||
|
for (int j = 0; j < maxCols; j++) {
|
||||||
|
for (int i = linesCount - 1; i >= 0; i--) {
|
||||||
|
if (lines[i].length > j) {
|
||||||
|
out.print(lines[i][j] + " ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
out.flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
10
java/sum/.idea/.gitignore
generated
vendored
10
java/sum/.idea/.gitignore
generated
vendored
@@ -1,10 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Ignored default folder with query files
|
|
||||||
/queries/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
6
java/sum/.idea/misc.xml
generated
6
java/sum/.idea/misc.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="25" project-jdk-type="JavaSDK">
|
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
8
java/sum/.idea/modules.xml
generated
8
java/sum/.idea/modules.xml
generated
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/sum.iml" filepath="$PROJECT_DIR$/sum.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
6
java/sum/.idea/vcs.xml
generated
6
java/sum/.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
package sum;
|
package sum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
public class Sum {
|
public class Sum {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|||||||
57
java/sum/SumBigDecimalHex.java
Normal file
57
java/sum/SumBigDecimalHex.java
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumBigDecimalHex {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
BigDecimal res = new BigDecimal("0");
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res = res.add(compute(builder.toString()));
|
||||||
|
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res = res.add(compute(builder.toString()));
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BigDecimal compute(String num) {
|
||||||
|
BigDecimal res = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
if (num == null || num.isEmpty()) {
|
||||||
|
return res;
|
||||||
|
} else if (num.startsWith("0x") || num.startsWith("0X")) {
|
||||||
|
num = num.toLowerCase();
|
||||||
|
num = num.substring(2);
|
||||||
|
if (num.contains("s")) {
|
||||||
|
|
||||||
|
int sIndex = num.indexOf('s');
|
||||||
|
|
||||||
|
String mantissaHex = num.substring(0, sIndex);
|
||||||
|
String exponentHex = num.substring(sIndex + 1);
|
||||||
|
|
||||||
|
BigInteger mantissa = new BigInteger(mantissaHex, 16);
|
||||||
|
BigInteger exponent = new BigInteger(exponentHex, 16);
|
||||||
|
|
||||||
|
res = res.add(new BigDecimal(mantissa).scaleByPowerOfTen(exponent.negate().intValueExact()));
|
||||||
|
} else {
|
||||||
|
res = res.add(new BigDecimal(new BigInteger(num, 16)));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
res = new BigDecimal(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
40
java/sum/SumBigIntegerOctal.java
Normal file
40
java/sum/SumBigIntegerOctal.java
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumBigIntegerOctal {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
BigInteger res = new BigInteger("0");
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res = res.add(compute(builder.toString()));
|
||||||
|
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res = res.add(compute(builder.toString()));
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BigInteger compute(String num) {
|
||||||
|
BigInteger res = new BigInteger("0");
|
||||||
|
if (num.isEmpty()) {
|
||||||
|
res = res.add(BigInteger.ZERO);
|
||||||
|
} else if (num.endsWith("o") || num.endsWith("O")) {
|
||||||
|
res = res.add(new BigInteger(num.substring(0, num.length() - 1), 8));
|
||||||
|
} else {
|
||||||
|
res = res.add(new BigInteger(num));
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
java/sum/SumDouble.java
Normal file
23
java/sum/SumDouble.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumDouble {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
double res = 0.0; // 0_0
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res += (!builder.toString().isEmpty()) ? Double.parseDouble(builder.toString()) : 0;
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += (!builder.toString().isEmpty()) ? Double.parseDouble(builder.toString()) : 0;
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
37
java/sum/SumDoubleHex.java
Normal file
37
java/sum/SumDoubleHex.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumDoubleHex {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
double res = 0;
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res += compute(builder.toString());
|
||||||
|
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += compute(builder.toString());
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static double compute(String num) {
|
||||||
|
double res = 0;
|
||||||
|
if (num.isEmpty()) {
|
||||||
|
res += 0;
|
||||||
|
} else if (num.startsWith("0x") || num.startsWith("0X")) {
|
||||||
|
res += (num.contains(".")) ? Double.parseDouble(num) : Long.decode(num);
|
||||||
|
} else {
|
||||||
|
res += Double.parseDouble(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
37
java/sum/SumHex.java
Normal file
37
java/sum/SumHex.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumHex {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
int res = 0;
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res += compute(builder.toString());
|
||||||
|
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += compute(builder.toString());
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int compute(String num) {
|
||||||
|
int res = 0;
|
||||||
|
if (num.isEmpty()) {
|
||||||
|
res += 0;
|
||||||
|
} else if (num.startsWith("0x") || num.startsWith("0X")) {
|
||||||
|
res += Long.decode(num);
|
||||||
|
} else {
|
||||||
|
res += Integer.parseInt(num);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
41
java/sum/SumLongOctal.java
Normal file
41
java/sum/SumLongOctal.java
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package sum;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nikita Doschennikov (me@fymio.us)
|
||||||
|
*/
|
||||||
|
public class SumLongOctal {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
long res = 0;
|
||||||
|
for (String arg : args) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
for (char c : arg.toCharArray()) {
|
||||||
|
if (!Character.isWhitespace(c)) {
|
||||||
|
builder.append(c);
|
||||||
|
} else {
|
||||||
|
res += compute(builder.toString());
|
||||||
|
builder = new StringBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += compute(builder.toString());
|
||||||
|
}
|
||||||
|
System.out.println(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
static long compute(String num) {
|
||||||
|
if (num.isEmpty()) {
|
||||||
|
return 0L;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num.endsWith("o") || num.endsWith("O")) {
|
||||||
|
String oct = num.substring(0, num.length() - 1);
|
||||||
|
|
||||||
|
BigInteger bi = new BigInteger(oct, 8);
|
||||||
|
|
||||||
|
return bi.longValue();
|
||||||
|
} else {
|
||||||
|
return Long.parseLong(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
java/wordStat/WordInfo.java
Normal file
11
java/wordStat/WordInfo.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
public class WordInfo {
|
||||||
|
String word;
|
||||||
|
int count;
|
||||||
|
int firstIndex;
|
||||||
|
|
||||||
|
WordInfo(String word, int count, int firstIndex) {
|
||||||
|
this.word = word;
|
||||||
|
this.count = count;
|
||||||
|
this.firstIndex = firstIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
54
java/wordStat/WordStat.java
Normal file
54
java/wordStat/WordStat.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStat {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
LinkedHashMap<String, Integer> wordCount = new LinkedHashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (!sb.isEmpty()) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, StandardCharsets.UTF_8);
|
||||||
|
|
||||||
|
for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
int value = entry.getValue();
|
||||||
|
writer.println(key + " " + value);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
java/wordStat/WordStatLength.java
Normal file
71
java/wordStat/WordStatLength.java
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLength {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new HashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int wordIndex = 0;
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
|
||||||
|
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
|
||||||
|
.thenComparingInt(w -> w.firstIndex));
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
|
||||||
|
|
||||||
|
for (WordInfo info : sortedWords) {
|
||||||
|
writer.println(info.word + " " + info.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
94
java/wordStat/WordStatLengthAffix.java
Normal file
94
java/wordStat/WordStatLengthAffix.java
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLengthAffix {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new HashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int wordIndex = 0;
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
String suffix = word.substring(word.length() - word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
if (wordMap.containsKey(suffix)) {
|
||||||
|
wordMap.get(suffix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(suffix, new WordInfo(suffix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
String suffix = word.substring(word.length() - word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
if (wordMap.containsKey(suffix)) {
|
||||||
|
wordMap.get(suffix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(suffix, new WordInfo(suffix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
|
||||||
|
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
|
||||||
|
.thenComparingInt(w -> w.firstIndex));
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
|
||||||
|
|
||||||
|
for (WordInfo info : sortedWords) {
|
||||||
|
writer.println(info.word + " " + info.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
java/wordStat/WordStatLengthMiddle.java
Normal file
79
java/wordStat/WordStatLengthMiddle.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLengthMiddle {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new HashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int wordIndex = 0;
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() >= 7) {
|
||||||
|
word = word.substring(3, word.length() - 3);
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() >= 7) {
|
||||||
|
word = word.substring(3, word.length() - 3);
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
|
||||||
|
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
|
||||||
|
.thenComparingInt(w -> w.firstIndex));
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
|
||||||
|
|
||||||
|
for (WordInfo info : sortedWords) {
|
||||||
|
writer.println(info.word + " " + info.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
java/wordStat/WordStatLengthPrefix.java
Normal file
79
java/wordStat/WordStatLengthPrefix.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLengthPrefix {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new HashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int wordIndex = 0;
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
String prefix = word.substring(0, word.length() / 2);
|
||||||
|
if (wordMap.containsKey(prefix)) {
|
||||||
|
wordMap.get(prefix).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(prefix, new WordInfo(prefix, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
|
||||||
|
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
|
||||||
|
.thenComparingInt(w -> w.firstIndex));
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
|
||||||
|
|
||||||
|
for (WordInfo info : sortedWords) {
|
||||||
|
writer.println(info.word + " " + info.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
79
java/wordStat/WordStatLengthSuffix.java
Normal file
79
java/wordStat/WordStatLengthSuffix.java
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WordStatLengthSuffix {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("incorrect input!");
|
||||||
|
System.err.println("usage: java WordStat inputFile outputFile");
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFileName = args[0];
|
||||||
|
String outputFileName = args[1];
|
||||||
|
try {
|
||||||
|
BufferedReader r = new BufferedReader(new FileReader(inputFileName));
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new HashMap<>();
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int wordIndex = 0;
|
||||||
|
|
||||||
|
int data = r.read();
|
||||||
|
while (data != -1) {
|
||||||
|
char c = (char) data;
|
||||||
|
|
||||||
|
if (Character.getType(c) == Character.DASH_PUNCTUATION ||
|
||||||
|
Character.isLetter(c) || c == '\'') {
|
||||||
|
sb.append(c);
|
||||||
|
} else {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
word = word.substring(word.length() - word.length() / 2);
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.setLength(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data = r.read();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
String word = sb.toString().toLowerCase();
|
||||||
|
if (word.length() != 1) {
|
||||||
|
word = word.substring(word.length() - word.length() / 2);
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
wordMap.get(word).count++;
|
||||||
|
} else {
|
||||||
|
wordMap.put(word, new WordInfo(word, 1, wordIndex));
|
||||||
|
wordIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r.close();
|
||||||
|
|
||||||
|
List<WordInfo> sortedWords = new ArrayList<>(wordMap.values());
|
||||||
|
sortedWords.sort(Comparator.comparingInt((WordInfo w) -> w.word.length())
|
||||||
|
.thenComparingInt(w -> w.firstIndex));
|
||||||
|
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(outputFileName, "UTF-8");
|
||||||
|
|
||||||
|
for (WordInfo info : sortedWords) {
|
||||||
|
writer.println(info.word + " " + info.count);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
System.err.println("An error occured: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
java/wspp/IntList.java
Normal file
28
java/wspp/IntList.java
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package wspp;
|
||||||
|
|
||||||
|
public class IntList {
|
||||||
|
private int[] array;
|
||||||
|
private int size;
|
||||||
|
|
||||||
|
public IntList() {
|
||||||
|
array = new int[10];
|
||||||
|
size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(int value) {
|
||||||
|
if (size >= array.length) {
|
||||||
|
int[] newArray = new int[array.length * 2];
|
||||||
|
System.arraycopy(array, 0, newArray, 0, size);
|
||||||
|
array = newArray;
|
||||||
|
}
|
||||||
|
array[size++] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int get(int index) {
|
||||||
|
return array[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
java/wspp/WordInfo.java
Normal file
6
java/wspp/WordInfo.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package wspp;
|
||||||
|
|
||||||
|
public class WordInfo {
|
||||||
|
int count;
|
||||||
|
IntList positions;
|
||||||
|
}
|
||||||
74
java/wspp/WordScanner.java
Normal file
74
java/wspp/WordScanner.java
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
package wspp;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
public class WordScanner {
|
||||||
|
private BufferedReader br;
|
||||||
|
private String line = null;
|
||||||
|
private int pos = 0;
|
||||||
|
private int lineNumber = 0;
|
||||||
|
|
||||||
|
public WordScanner(String fileName) throws IOException {
|
||||||
|
br = new BufferedReader(new InputStreamReader(
|
||||||
|
new FileInputStream(fileName), StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasNextLine() throws IOException {
|
||||||
|
if (line != null && pos < line.length()) return true;
|
||||||
|
line = br.readLine();
|
||||||
|
if (line != null) {
|
||||||
|
lineNumber++;
|
||||||
|
}
|
||||||
|
pos = 0;
|
||||||
|
return line != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isWordChar(char c) {
|
||||||
|
return Character.isLetter(c) || Character.isDigit(c) ||
|
||||||
|
c == '\'' || c == '$' || c == '_' ||
|
||||||
|
Character.getType(c) == Character.DASH_PUNCTUATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasNextWord() throws IOException {
|
||||||
|
while (hasNextLine()) {
|
||||||
|
while (pos < line.length() && !isWordChar(line.charAt(pos))) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
if (pos < line.length()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String nextWord() {
|
||||||
|
while (pos < line.length() && !isWordChar(line.charAt(pos))) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int start = pos;
|
||||||
|
while (pos < line.length() && isWordChar(line.charAt(pos))) {
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return line.substring(start, pos).toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLineNumber() {
|
||||||
|
return lineNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() throws IOException {
|
||||||
|
br.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset(String fileName) throws IOException {
|
||||||
|
br.close();
|
||||||
|
br = new BufferedReader(new InputStreamReader(
|
||||||
|
new FileInputStream(fileName), StandardCharsets.UTF_8));
|
||||||
|
line = null;
|
||||||
|
pos = 0;
|
||||||
|
lineNumber = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
64
java/wspp/Wspp.java
Normal file
64
java/wspp/Wspp.java
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package wspp;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class Wspp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("Usage: java Wspp inputFile outputFile");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFile = args[0];
|
||||||
|
String outputFile = args[1];
|
||||||
|
|
||||||
|
try {
|
||||||
|
WordScanner scanner = new WordScanner(inputFile);
|
||||||
|
|
||||||
|
Map<String, WordInfo> wordMap = new LinkedHashMap<>();
|
||||||
|
int wordPosition = 1;
|
||||||
|
|
||||||
|
while (scanner.hasNextWord()) {
|
||||||
|
String word = scanner.nextWord();
|
||||||
|
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
WordInfo info = wordMap.get(word);
|
||||||
|
info.count++;
|
||||||
|
info.positions.add(wordPosition);
|
||||||
|
} else {
|
||||||
|
WordInfo info = new WordInfo();
|
||||||
|
info.count = 1;
|
||||||
|
info.positions = new IntList();
|
||||||
|
info.positions.add(wordPosition);
|
||||||
|
wordMap.put(word, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
wordPosition++;
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.close();
|
||||||
|
|
||||||
|
PrintWriter writer = new PrintWriter(
|
||||||
|
new OutputStreamWriter(
|
||||||
|
new FileOutputStream(outputFile), StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
for (Map.Entry<String, WordInfo> entry : wordMap.entrySet()) {
|
||||||
|
String word = entry.getKey();
|
||||||
|
WordInfo info = entry.getValue();
|
||||||
|
|
||||||
|
writer.print(word + " " + info.count);
|
||||||
|
for (int i = 0; i < info.positions.size(); i++) {
|
||||||
|
writer.print(" " + info.positions.get(i));
|
||||||
|
}
|
||||||
|
writer.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
92
java/wspp/WsppPos.java
Normal file
92
java/wspp/WsppPos.java
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
package wspp;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class WsppPos {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
if (args.length != 2) {
|
||||||
|
System.err.println("Usage: java WsppPos inputFile outputFile");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String inputFile = args[0];
|
||||||
|
String outputFile = args[1];
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Первый проход: считаем количество слов в каждой строке
|
||||||
|
WordScanner scanner = new WordScanner(inputFile);
|
||||||
|
Map<Integer, Integer> wordsPerLine = new HashMap<>();
|
||||||
|
|
||||||
|
while (scanner.hasNextWord()) {
|
||||||
|
scanner.nextWord();
|
||||||
|
int line = scanner.getLineNumber();
|
||||||
|
wordsPerLine.put(line, wordsPerLine.getOrDefault(line, 0) + 1);
|
||||||
|
}
|
||||||
|
scanner.close();
|
||||||
|
|
||||||
|
// Второй проход: собираем статистику
|
||||||
|
scanner = new WordScanner(inputFile);
|
||||||
|
Map<String, WordInfo> wordMap = new LinkedHashMap<>();
|
||||||
|
Map<Integer, Integer> currentPosInLine = new HashMap<>();
|
||||||
|
|
||||||
|
while (scanner.hasNextWord()) {
|
||||||
|
String word = scanner.nextWord();
|
||||||
|
int lineNum = scanner.getLineNumber();
|
||||||
|
|
||||||
|
// Позиция с начала строки
|
||||||
|
int posInLine = currentPosInLine.getOrDefault(lineNum, 0) + 1;
|
||||||
|
currentPosInLine.put(lineNum, posInLine);
|
||||||
|
|
||||||
|
// Пересчитываем в позицию с конца строки
|
||||||
|
int totalWordsInLine = wordsPerLine.get(lineNum);
|
||||||
|
int posFromEnd = totalWordsInLine - posInLine + 1;
|
||||||
|
|
||||||
|
if (wordMap.containsKey(word)) {
|
||||||
|
WordInfo info = wordMap.get(word);
|
||||||
|
info.count++;
|
||||||
|
info.lineNumbers.add(lineNum);
|
||||||
|
info.positions.add(posFromEnd);
|
||||||
|
} else {
|
||||||
|
WordInfo info = new WordInfo();
|
||||||
|
info.count = 1;
|
||||||
|
info.lineNumbers = new IntList();
|
||||||
|
info.positions = new IntList();
|
||||||
|
info.lineNumbers.add(lineNum);
|
||||||
|
info.positions.add(posFromEnd);
|
||||||
|
wordMap.put(word, info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scanner.close();
|
||||||
|
|
||||||
|
// Запись результата
|
||||||
|
PrintWriter writer = new PrintWriter(
|
||||||
|
new OutputStreamWriter(
|
||||||
|
new FileOutputStream(outputFile), StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
for (Map.Entry<String, WordInfo> entry : wordMap.entrySet()) {
|
||||||
|
String word = entry.getKey();
|
||||||
|
WordInfo info = entry.getValue();
|
||||||
|
|
||||||
|
writer.print(word + " " + info.count);
|
||||||
|
for (int i = 0; i < info.lineNumbers.size(); i++) {
|
||||||
|
writer.print(" " + info.lineNumbers.get(i) + ":" + info.positions.get(i));
|
||||||
|
}
|
||||||
|
writer.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.close();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class WordInfo {
|
||||||
|
int count;
|
||||||
|
IntList lineNumbers;
|
||||||
|
IntList positions;
|
||||||
|
}
|
||||||
|
}
|
||||||
1763
lectures/README.md
Normal file
1763
lectures/README.md
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user