Compare commits

..

38 Commits

Author SHA1 Message Date
me
238f8048e0 add notes for lecture 2
Some checks failed
Fast Reverse Tests / test (push) Successful in 23s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 9s
Word Stat Tests / test (push) Successful in 7s
Word Stat++ Tests / test (push) Failing after 12s
2026-02-02 21:51:52 +05:00
me
231a37be9e add notes for lecture 2
Some checks failed
Fast Reverse Tests / test (push) Successful in 47s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 9s
Word Stat Tests / test (push) Has been cancelled
Word Stat++ Tests / test (push) Has been cancelled
2026-02-02 21:50:41 +05:00
me
3678af68c0 add solutions for hw6:3233
Some checks failed
Fast Reverse Tests / test (push) Successful in 24s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 8s
Word Stat Tests / test (push) Successful in 7s
Word Stat++ Tests / test (push) Failing after 10s
2026-02-02 14:31:39 +03:00
me
d8154da7a9 add solution for hw6:3233
Some checks failed
Fast Reverse Tests / test (push) Failing after 4s
Reverse Tests / test (push) Failing after 4s
Sum Tests / test (push) Failing after 4s
Word Stat Tests / test (push) Failing after 4s
Word Stat++ Tests / test (push) Failing after 4s
2026-02-02 14:27:24 +03:00
me
ddba0fc8b5 add solutions for hw6:Base
Some checks failed
Fast Reverse Tests / test (push) Successful in 24s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Successful in 7s
Word Stat++ Tests / test (push) Failing after 11s
2026-02-02 14:32:45 +05:00
me
dec9762ba2 add tests for hw6:Base
All checks were successful
Fast Reverse Tests / test (push) Successful in 21s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Successful in 7s
Word Stat++ Tests / test (push) Successful in 12s
2026-02-02 13:27:07 +05:00
me
380611c4df add solutions for hw6:Base
All checks were successful
Fast Reverse Tests / test (push) Successful in 24s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 9s
Word Stat Tests / test (push) Successful in 8s
2026-02-02 13:25:10 +05:00
me
1e5c8fab61 add solutions for hw5
All checks were successful
Fast Reverse Tests / test (push) Successful in 24s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 10s
Word Stat Tests / test (push) Successful in 9s
2026-02-02 13:03:16 +05:00
me
ab6616b619 add solutions for hw5
All checks were successful
Fast Reverse Tests / test (push) Successful in 26s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Successful in 7s
2026-02-02 13:02:15 +05:00
me
6f5907b244 add solutions for hw5
Some checks failed
Fast Reverse Tests / test (push) Has been cancelled
Reverse Tests / test (push) Successful in 11s
Sum Tests / test (push) Successful in 10s
Word Stat Tests / test (push) Successful in 9s
2026-02-02 12:21:38 +05:00
me
304f238a8a add tests for hw5
Some checks failed
Fast Reverse Tests / test (push) Failing after 35s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Successful in 8s
2026-02-02 12:06:48 +05:00
me
b3dd5ae4c7 add solution for hw4:4749
All checks were successful
Fast Reverse Tests / test (push) Successful in 14s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 8s
Word Stat Tests / test (push) Successful in 8s
2026-02-02 12:02:40 +05:00
me
29c361725e add solution for hw4:3839
Some checks failed
Fast Reverse Tests / test (push) Successful in 15s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 9s
Word Stat Tests / test (push) Failing after 8s
2026-02-02 11:59:24 +05:00
me
868a206eb1 add solution for hw4:3637
Some checks failed
Fast Reverse Tests / test (push) Successful in 15s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 10s
Word Stat Tests / test (push) Failing after 7s
2026-02-02 11:50:52 +05:00
me
21d9d2c105 add solution for hw4:3637
Some checks failed
Fast Reverse Tests / test (push) Successful in 16s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 9s
Word Stat Tests / test (push) Failing after 7s
2026-02-02 11:47:58 +05:00
me
5ef52d793b add notes for lecture 1
Some checks failed
Fast Reverse Tests / test (push) Successful in 37s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 10s
Word Stat Tests / test (push) Failing after 7s
2026-02-02 10:40:50 +05:00
me
5945b021f2 add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Successful in 11s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 15:54:01 +05:00
me
e197eb2690 add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Successful in 13s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 4s
2026-01-31 15:49:07 +05:00
me
7b3f22216f add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Successful in 12s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 15:47:25 +05:00
me
6c42ebab03 add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Successful in 12s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 15:43:42 +05:00
me
8173cf4dab add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Successful in 12s
Reverse Tests / test (push) Successful in 6s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 15:39:59 +05:00
me
971119da82 add solution for hw4:3435
Some checks failed
Fast Reverse Tests / test (push) Failing after 4s
Reverse Tests / test (push) Failing after 4s
Sum Tests / test (push) Failing after 4s
Word Stat Tests / test (push) Failing after 4s
2026-01-31 15:37:58 +05:00
me
ab51c1a3dc add solution for hw4:3233
Some checks failed
Fast Reverse Tests / test (push) Successful in 13s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 8s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 15:06:18 +05:00
me
826ab5a4d9 update README.md
Some checks failed
Fast Reverse Tests / test (push) Successful in 13s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 5s
2026-01-31 14:39:57 +05:00
me
03dabc9dee add Base solution for hw4
All checks were successful
Fast Reverse Tests / test (push) Successful in 14s
Reverse Tests / test (push) Successful in 7s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Successful in 5s
2026-01-31 14:30:54 +05:00
me
de97058fe9 add tests for hw4
Some checks failed
Fast Reverse Tests / test (push) Failing after 16s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 7s
Word Stat Tests / test (push) Failing after 4s
2026-01-31 13:26:06 +05:00
me
4807af64d9 upd 2026-01-31 13:25:49 +05:00
me
4be68698dd add solution for hw3:4142 & tests
Some checks failed
Fast Reverse Tests / test (push) Failing after 15s
Reverse Tests / test (push) Successful in 9s
Sum Tests / test (push) Successful in 10s
2026-01-30 23:58:25 +05:00
me
4488a76813 update runners
Some checks failed
Fast Reverse Tests / test (push) Failing after 15s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 9s
2026-01-30 23:19:37 +05:00
me
02aefc2a89 add solution for hw3:3839 & tests
Some checks failed
Fast Reverse Tests / test (push) Failing after 15s
Reverse Tests / test (push) Successful in 8s
Sum Tests / test (push) Successful in 8s
2026-01-30 23:17:36 +05:00
me
8b7b78ee4d add solution for hw3:3637 & tests in runner
Some checks failed
Fast Reverse Tests / test (push) Failing after 16s
Reverse Tests / test (push) Successful in 5s
Sum Tests / test (push) Successful in 8s
2026-01-30 23:04:13 +05:00
me
26ce449302 add Base tests for hw5
Some checks failed
Fast Reverse Tests / test (push) Failing after 26s
Reverse Tests / test (push) Successful in 6s
Sum Tests / test (push) Successful in 8s
2026-01-30 16:39:36 +05:00
me
04af91b4a7 update tests
All checks were successful
Reverse Tests / test (push) Successful in 6s
Sum Tests / test (push) Successful in 7s
2026-01-30 16:36:08 +05:00
me
8414aeb924 update README.md
All checks were successful
Reverse Tests / test (push) Successful in 6s
Sum Tests / test (push) Successful in 10s
2026-01-30 15:52:51 +05:00
me
f655cc480c add fastscanner
All checks were successful
Reverse Tests / test (push) Successful in 5s
Sum Tests / test (push) Successful in 8s
2026-01-30 15:50:09 +05:00
me
d1eac5b8b5 add Base solution for hw3
All checks were successful
Reverse Tests / test (push) Successful in 6s
Sum Tests / test (push) Successful in 9s
2026-01-30 14:32:03 +05:00
me
8a5c2a28c6 add Base tests for hw3
Some checks failed
Reverse Tests / test (push) Failing after 5s
Sum Tests / test (push) Successful in 7s
2026-01-30 13:43:25 +05:00
me
c411372ec7 add Base tests for hw3 2026-01-30 13:42:43 +05:00
25 changed files with 3000 additions and 29 deletions

View 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

View 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

View 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
View 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

View File

@@ -7,7 +7,6 @@ include_toc: true
[Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html)
<!--
## Домашнее задание 14. Обработка ошибок
Модификации
@@ -276,10 +275,11 @@ include_toc: true
* Класс должен иметь имя `WsppPosition`
## Домашнее задание 5. Свой сканнер
## Домашнее задание 5. Свой сканнер [![Fast Reverse Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/fast-reverse.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)
Модификации
* *Base*
* *Base*
* Исходный код тестов: [FastReverseTest.java](java/reverse/FastReverseTest.java)
* Откомпилированные тесты: [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)
скобками
* Класс должен иметь имя `ReverseRotate`
* *3233*
* *3233*
* Выведите (в реверсивном порядке) только числа,
у которых сумма номеров строки и столбца четная
* Числа дополнительно могут разделяться
@@ -337,10 +337,11 @@ include_toc: true
* Класс должен иметь имя `ReverseSum`
## Домашнее задание 4. Подсчет слов
## Домашнее задание 4. Подсчет слов [![Word Stat](https://git.fymio.us/me/prog-intro-2025/actions/workflows/word-stat.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)
Модификации
* *Base*
* *Base*
* Класс должен иметь имя `WordStat`
* Исходный код тестов:
[WordStatTest.java](java/wordStat/WordStatTest.java),
@@ -348,10 +349,10 @@ include_toc: true
[WordStatChecker.java](java/wordStat/WordStatChecker.java)
* Откомпилированные тесты: [WordStatTest.jar](artifacts/WordStatTest.jar)
* Аргументы командной строки: модификации
* *FastSort*
* *FastSort*
* Пусть _n_ число слов во входном файле,
тогда программа должна работать за O(_n_ log _n_).
* *3637*
* *3637*
* Назовём _серединой слова_ подстроку, полученную удалением
первых и последних 3 символов слова.
Слова длины меньшей 7 игнорируются.
@@ -359,7 +360,7 @@ include_toc: true
середины слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthMiddle`
* *3839*
* *3839*
* Назовём _аффиксами слова_
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
Слова длины один игнорируются.
@@ -367,7 +368,7 @@ include_toc: true
аффиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthAffix`
* *3435*
* *3435*
* Назовём _суффиксом слова_ подстроку,
состоящую из `n / 2` последних символов слова, где `n` — длина слова.
Слова длины один игнорируются.
@@ -375,12 +376,12 @@ include_toc: true
суффиксы слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthSuffix`
* *3233*
* *3233*
* Выходной файл должен содержать все различные
слова встречающиеся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLength`
* *4142*
* *4142*
* Назовём _серединой слова_ подстроку, полученную удалением
первых и последних 3 символов слова.
Слова длины меньшей 7 игнорируются.
@@ -388,7 +389,7 @@ include_toc: true
середины слов, встречающихся во входном файле,
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthMiddle`
* *4749*
* *4749*
* Назовём _префиксом слова_ подстроку,
состоящую из `n / 2` первых символов слова, где `n` — длина слова.
Слова длины один игнорируются.
@@ -397,25 +398,24 @@ include_toc: true
упорядоченные по возрастанию длины (при равенстве по первому вхождению).
* Класс должен иметь имя `WordStatLengthPrefix`
-->
## Домашнее задание 3. Реверс [![Reverse Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/reverse.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)
## Домашнее задание 3. Реверс
Модификации
* *Base*
* *Base*
* Исходный код тестов:
[ReverseTest.java](java/reverse/ReverseTest.java),
[ReverseTester.java](java/reverse/ReverseTester.java)
* Откомпилированные тесты: [ReverseTest.jar](artifacts/ReverseTest.jar)
* Аргументы командной строки: модификации
* *Memory*
* *Memory*
* Программа должна сначала считывать все данные в память,
и только потом обрабатывать их.
* Пусть _M_ объём памяти, необходимый для сохранения ввода
в двумерном массиве `int` минимального размера.
Ваша программа должна использовать не более 4_M_ + 1024 байт памяти.
* Накладные расходы на запуск вашей программы JVM не учитываются.
* *3637*
* *3637*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите максимум из чисел,
находящихся в его столбце в последующих строках, и его самого
@@ -425,7 +425,7 @@ include_toc: true
вместо каждого числа выведите максимум из чисел
текущее число — правый нижний угол матрицы
* Класс должен иметь имя `ReverseMax`
* *3435*
* *3435*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
выведите ее поворот по часовой стрелке, например для ввода
```
@@ -441,15 +441,15 @@ include_toc: true
4
```
* Класс должен иметь имя `ReverseRotate`
* *3233*
* *3233*
* Выведите (в реверсивном порядке) только числа,
у которых сумма номеров строки и столбца четная
* Класс должен иметь имя `ReverseEven`
* *4142*
* *4142*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите среднее из чисел в его столбце и строке
* Класс должен иметь имя `ReverseAvg`
* *4749*
* *4749*
* Рассмотрим входные данные как (не полностью определенную) матрицу,
вместо каждого числа выведите сумму чиселв его столбце и строке
* Класс должен иметь имя `ReverseSum`
@@ -457,21 +457,21 @@ include_toc: true
## Домашнее задание 2. Сумма чисел [![Sum Tests](https://git.fymio.us/me/prog-intro-2025/actions/workflows/sum.yml/badge.svg)](https://git.fymio.us/me/prog-intro-2025/actions)
Модификации
* *Base*
* *Base*
* Исходный код тестов:
[SumTest.java](java/sum/SumTest.java),
[SumTester.java](java/sum/SumTester.java),
[базовые классы](java/base/)
* Откомпилированные тесты: [SumTest.jar](artifacts/SumTest.jar)
* Аргументы командной строки: модификации
* *3637*
* *3637*
* Входные данные являются 64-битными числами в формате с плавающей точкой
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`,
например `0xa.bp2` равно (10+11/16)·4 равно 42.75
* Ввод регистронезависим
* Класс должен иметь имя `SumDoubleHex`
* *3839*
* *3839*
* Входные данные помещаются в тип [BigDecimal](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html)
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`,
@@ -479,22 +479,23 @@ include_toc: true
(мантисса и порядок являются целыми числами)
* Ввод регистронезависим
* Класс должен иметь имя `SumBigDecimalHex`
* *3435*
* *3435*
* На вход подаются десятичные и шестнадцатеричные числа
* Шестнадцатеричные числа имеют префикс `0x`
* Ввод регистронезависим
* Класс должен иметь имя `SumHex`
* *3233*
* *3233*
* Входные данные являются 64-битными числами в формате с плавающей точкой
* Класс должен иметь имя `SumDouble`
* *4142*
* *4142*
* Входные данные помещаются в тип [BigInteger](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html)
* восьмеричные числа имеют суффикс `o`
* Класс должен иметь имя `SumBigIntegerOctal`
* *4749*
* *4749*
* Входные данные являются 64-битными целыми числами
* восьмеричные числа имеют суффикс `o`
* Класс должен иметь имя `SumLongOctal`
<!--
Для того, чтобы протестировать программу:
@@ -548,3 +549,5 @@ include_toc: true
1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте
1. Сдайте скрипт преподавателю
1. Вы можете получить больше плюсиков, модифицируя код `RunMe.java`
-->

View 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
View 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();
}
}

View 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();
}
}

View 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();
}
}

View 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;
}
}

View 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;
}
}

View 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();
}
}

View 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;
}
}

View 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());
}
}
}

View 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());
}
}
}

View 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());
}
}
}

View 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());
}
}
}

View 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());
}
}
}

View 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
View 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
View File

@@ -0,0 +1,6 @@
package wspp;
public class WordInfo {
int count;
IntList positions;
}

View 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
View 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
View 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

File diff suppressed because it is too large Load Diff