diff --git a/.gitignore b/.gitignore index dd1e5203..0162274c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,81 +1,119 @@ -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff -.idea/**/workspace.xml -.idea/**/tasks.xml -.idea/**/usage.statistics.xml -.idea/**/dictionaries -.idea/**/shelf - -# AWS User-specific -.idea/**/aws.xml - -# Generated files -.idea/**/contentModel.xml - -# Sensitive or high-churn files -.idea/**/dataSources/ -.idea/**/dataSources.ids -.idea/**/dataSources.local.xml -.idea/**/sqlDataSources.xml -.idea/**/dynamic.xml -.idea/**/uiDesigner.xml -.idea/**/dbnavigator.xml - -# Gradle -.idea/**/gradle.xml -.idea/**/libraries - -# Gradle and Maven with auto-import -# When using Gradle or Maven with auto-import, you should exclude module files, -# since they will be recreated, and may cause churn. Uncomment if using -# auto-import. -# .idea/artifacts -# .idea/compiler.xml -# .idea/jarRepositories.xml -# .idea/modules.xml -# .idea/*.iml -# .idea/modules -# *.iml -# *.ipr - -# CMake -cmake-build-*/ - -# Mongo Explorer plugin -.idea/**/mongoSettings.xml - -# File-based project format -*.iws - -# IntelliJ -out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Cursive Clojure plugin -.idea/replstate.xml - -# SonarLint plugin -.idea/sonarlint/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -# Editor-based Rest Client -.idea/httpRequests - -# Android studio 3.1+ serialized cache file -.idea/caches/build_file_checksums.ser - -target -*.class -*.out \ No newline at end of file +# Created by https://www.toptal.com/developers/gitignore/api/intellij +# Edit at https://www.toptal.com/developers/gitignore?templates=intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +# End of https://www.toptal.com/developers/gitignore/api/intellij + +*.class \ No newline at end of file diff --git a/materials/2019-2020/homeworks/29-05-HW-2-3b/README.pdf b/materials/2019-2020/homeworks/29-05-HW-2-3b/README.pdf new file mode 100644 index 00000000..f051a194 Binary files /dev/null and b/materials/2019-2020/homeworks/29-05-HW-2-3b/README.pdf differ diff --git a/materials/2020-2021/11a/2021-03-22-input/2021-03-22-input.iml b/materials/2020-2021/11a/2021-03-22-input/2021-03-22-input.iml new file mode 100644 index 00000000..c90834f2 --- /dev/null +++ b/materials/2020-2021/11a/2021-03-22-input/2021-03-22-input.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/materials/2020-2021/11a/2021-03-22-input/src/Main.java b/materials/2020-2021/11a/2021-03-22-input/src/Main.java new file mode 100644 index 00000000..de98eab0 --- /dev/null +++ b/materials/2020-2021/11a/2021-03-22-input/src/Main.java @@ -0,0 +1,44 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { +// String str1 = "Hello"; +// String str2 = "Hello"; +// +// String str3 = str1.concat(str2); +// String str4 = str1.concat(str2); +// +// StringBuilder sb = new StringBuilder(); +// sb.append("Hello").append(" ").append("World"); +// +// System.out.println(str4); +// System.out.println(sb); +// +// System.out.println(args.length); +// for (String arg : args) { +// System.out.println(arg); +// } +// +// InputStreamReader isr = new InputStreamReader(System.in); +//// isr.read +// BufferedReader br = new BufferedReader(isr); +// try { +// String line = br.readLine(); +// System.out.println(line); +// int num = Integer.parseInt(line); +// System.out.println(num); +//// line.spl +// } catch (IOException e) { +// e.printStackTrace(); +// } + +// Scanner sc = new Scanner(System.in); +// System.out.println(sc.nextLine()); +// System.out.println(sc.nextInt()); + + System.out.println(System.console().readLine()); + } +} diff --git a/materials/2020-2021/11b/2021-03-22-strings/2021-03-22-strings.iml b/materials/2020-2021/11b/2021-03-22-strings/2021-03-22-strings.iml new file mode 100644 index 00000000..c90834f2 --- /dev/null +++ b/materials/2020-2021/11b/2021-03-22-strings/2021-03-22-strings.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/materials/2020-2021/11b/2021-03-22-strings/src/Main.java b/materials/2020-2021/11b/2021-03-22-strings/src/Main.java new file mode 100644 index 00000000..cab6382d --- /dev/null +++ b/materials/2020-2021/11b/2021-03-22-strings/src/Main.java @@ -0,0 +1,43 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + /*System.out.println(args.length); + + for (String arg : args) { + System.out.println(arg); + } + + InputStreamReader isr = new InputStreamReader(System.in); + BufferedReader br = new BufferedReader(isr); + + try { + String line = br.readLine(); + System.out.println(line); + int num = Integer.parseInt(line); + System.out.println(num); + } catch (IOException e) { + e.printStackTrace(); + }*/ + +// Scanner in = new Scanner(System.in); + +// System.out.println(in.nextLine()); +// int num = in.nextInt(); +// System.out.println(num); + +// String line = System.console().readLine(); +// System.out.println(line); + +// String str1 = "Hello"; +// String str2 = "Hello"; +// String str3 = str1.concat(str2); + + StringBuilder sb = new StringBuilder(); + sb.append("Hello").append(" ").append("World"); + System.out.println(sb); + } +} diff --git a/materials/2020-2021/exams/exam-1-2/matrix.md b/materials/2020-2021/exams/exam-1-2/matrix.md new file mode 100644 index 00000000..f6f55d0c --- /dev/null +++ b/materials/2020-2021/exams/exam-1-2/matrix.md @@ -0,0 +1,68 @@ +1. Дефинирайте клас за **вектор** от геометрията. От тук нататък когато в условието се спомене **вектор** се има в предвид този клас. + - има атрибут цяло число с неговия размер N. Може да се чете, но не и да се пише отвън + - има едномерен динамичен масив от цели числа. Не може да се достъпва отвън + - има единствен конструктор, който получава аргументи размер N и масив. Заделя памет за N на брой елементи и ги чете последователно от подадения масив + - дефинирайте оператор [] за достъпване на елемент от масива по индекс + +2. Дефинирайте клас за матрица + - има атрибути цели числа за нейния размер - N за брой редове и M за брой колони + - има едномерен динамичен масив от вектори - всеки вектор представлява една **колона** + - има единствен скрит конструктор с аргументи за размерите. Конструкторът заделя нужната памет за елементите в масива + - има статичен метод `Matrix from_array(int N, int M, int arr)`, който връща инициализирана инстанция на матрица + - има статичен метод `Matrix from_matrix(Matrix other)`, който връща инициализирана инстанция на матрица + - дефинирайте оператор за събиране **+** + - с число - всеки елемент на матрицата се събира с подаденото число + ``` + | 1 2 3 | | 2 3 4 | + | 4 5 6 | + 1 = | 5 6 7 | + ``` + - с матрица - всеки елемент на първата матрица се събира със съответния елемент на втората + ``` + | 1 2 3 | | 7 8 9 | | 8 10 12 | + | 4 5 6 | + | 1 2 3 | = | 5 7 9 | + ``` + - дефинирайте оператор за изваждане **-** + - с число - от всеки елемент на матрицата се изважда подаденото число + ``` + | 1 2 3 | | 0 1 2 | + | 4 5 6 | - 1 = | 3 4 5 | + ``` + - с матрица - от всеки елемент на първата матрица се вади съответният елемент елемент на втората + ``` + | 1 2 3 | | 7 8 9 | | -6 -6 -6 | + | 4 5 6 | - | 1 2 3 | = | 3 3 3 | + ``` + - дефинирайте оператор за умножение **\*** + - с число - всеки елемент на матрицата се умножава с подаденото число + ``` + | 1 2 3 | | 2 4 6 | + | 4 5 6 | * 2 = | 8 10 12 | + ``` + - с матрица - всеки елемент от резултантната матрица представлява сбор от произведенията на съответни елементи в ред на първата и колона на втората матрица. [картинка](https://miro.medium.com/max/1200/1*YGcMQSr0ge_DGn96WnEkZw.png) + ``` + | 1 2 3 | | 3 | | 3*1 + 3*2 + 3*3 | | 18 | + | 4 5 6 | * | 7 | = | 7*4 + 7*5 + 7*6 | = | 105 | + ``` + + *За умножение е нужно броят **колони** на **първата** матрица да е равен на броя **редове** на **втората** матрица* + - дефинирайте оператор за изход **<<**, който извежда елементите на матрицата във формат + ``` + | v11 v12 ... v1m | + | v21 v22 ... v2m | + | ... | + | vn1 vn2 ... vnm | + ``` + - дефинирайте оператор за достъпване по индекс [], който връща връща векторът на подадения индeкс. *my_matrix[3][7] трябва да върне елемента в колона с индекс 3 и ред с индекс 7* + - всички горни методи и оператори да хвърлят изключения при несъвпадащи или нулеви и отрицателни размери + +3. Допълнителни: + - имайте минимален брой извиквания на конструктури и копирания на данни при извикване на методи и оператори + - динамичната памет да се почиства и освобождава + - да се обработват хвърляните изключения + - демонстрация на всичко в `main` + - имплементирайте метод транспониране на матрица - завъртане така, че да се разменят редовете и колоните + ``` + | 1 2 3 | | 1 4 | + | 4 5 6 | => | 2 5 | + | 3 6 | + ``` diff --git a/materials/2020-2021/exams/exam-1-2/matrix.pdf b/materials/2020-2021/exams/exam-1-2/matrix.pdf new file mode 100644 index 00000000..96f052db Binary files /dev/null and b/materials/2020-2021/exams/exam-1-2/matrix.pdf differ diff --git a/materials/2020-2021/exams/exam-1-3/mining.md b/materials/2020-2021/exams/exam-1-3/mining.md new file mode 100644 index 00000000..48e91ea3 --- /dev/null +++ b/materials/2020-2021/exams/exam-1-3/mining.md @@ -0,0 +1,83 @@ +# Минна компания +Имплементирайте програма, която да разпределя работници в мина за диаманти. + +## Клас за работник +Това са работниците, които копаят в мините. Всеки от тях има: +- име - стринг +- уникален номер - цяло положително число +- количество материал, което може да изкопае за един ден - цяло положително число +- копиращ конструктур и конструктур с нужните аргументи +- гетъри за всички атрибути +- метод или оператор за извеждане на информацията за него + +Работниците имат и метод `unsigned int choose_mine(vector<тип, чрез който представяте мина> mines)`, който: +- получава като аргумент списък от мини +- избира мина според определен критерий и връща нейния индекс +- ако списъкът е празен хвърля изключение +- ако не намери подходяща мина връща -1 + +## Видове работници +### Обикновен +- изкопава по 20 материал +- отива в първата възможна мина + +### Алчен +- изкопава 25 материал +- отива в мината с най-много материал + +### Асоциален +- изкопава 30 материал +- отива в първата възможна мине без други хора + +## Клас за минна компания +Това е класът, който менажира работниците. Трябва да има: +- име на компанията - стринг +- събран до момента материал - цяло положително число, като винаги започва от 0 +- списък от работници +- вектор от мини. За всяка мина трябва да можете да отразите текущото количество материал в нея и разпределените работници +- метод за задаване на списък от мини. Ако подаденият списък е празен да се хвърли изключение + +Дефинирайте метод `void mine()`, който изпълнява цикъл на разпределяне на работници и събиране на материала от тях докато всички мини се изчерпат. +- цикълът се изпълнява докато във вектора все още има с повече от 0 останал материал +- извършва разпределяне на всички възможни работници +- събира материала от всички разпределени работници - намалява го от останалото количество в съответната мина и го увеличава в атрибута на компанията +- всяка итерация представлява един "работен ден" + +Разпределянето на работници става като се обходи списъка от работници и се избере мина чрез метода `choose_mine`. +Ако в една мина вече има достатъчно работници, че да изкопаят всичкия материал от нея, то тя се прескача и следващите работници се разпределят в следващата възможна. +Ако в дадена итерация всички работници върнат -1 или хвърлят изключение(никой не може да бъде разпределен) то методът `mine` хвърля изключение. + +## Допълнителни +- извеждайте информативни съобщения в конзолата за работата на метода `mine` +- разделете кода в отделни файлове и добавете мейкфайл + +## Примери +Ако компанията има 2 мини с 20 и 40 материал и 2 обикновени работника, то: +- 1ва итерация + - **1 работник** ще отиде в **първата** мина + - **1 работник** ще отиде във **втората** мина + - ще се изкопае **20 материал от първата** мина и **20 от втората**. Материалът в първата ще свърши +- 2ра итерация + - **1 работник** ще отиде във **втората** мина + - **другия работник** няма къде да отиде и **пропуска** този ден + - ще се изкопае **20 материал от втората** мина. Материалът в нея ще свърши +- няма останали мини с наличен материал + +Ако компанията има 3 мини с 50, 40 и 35 материал, 1 обикновен, 1 алчен и 1 асоциален работник(в този ред), то: +- 1ва итерация + - **обикновеният** отива в **първата** мина + - **алчният** отива в **първата** мина защото има най-много материал + - **асоциалният** отива във **втората** мина защото е празна + - изкопават **45 от първата** и **30 от втората** + - оставащ материал - **5 10 35** +- 2ра итерация + - **обикновеният** отива в **първата** мина + - **алчиният** отива в **третата** защото има най-много материал + - **асоциалният** отива във **втората** защото е празна + - изкопават **5 от първата**, **10 от втората** и **25 от третата**. Материал в първата и втората свършва + - оставащ материал - **0 0 10** +- 3та итерация + - **обикновеният** отива в **третата** мина + - **алчният и асоциалният пропускат** деня защото няма къде да ходят + - изкопават **10 от третата** и нейният материал свършва +- няма останали мини diff --git a/materials/2020-2021/exams/exam-1-3/mining.pdf b/materials/2020-2021/exams/exam-1-3/mining.pdf new file mode 100644 index 00000000..dd78c95f Binary files /dev/null and b/materials/2020-2021/exams/exam-1-3/mining.pdf differ diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/Heroes.iml b/materials/2020-2021/exams/exam-2-1/B/Heroes/Heroes.iml new file mode 100644 index 00000000..06690f3e --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/Heroes.iml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Hero.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Hero.java new file mode 100644 index 00000000..fb01b5ec --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Hero.java @@ -0,0 +1,35 @@ +package org.elsys.oop.heroes; + +import java.util.List; + +public abstract class Hero { + private int level; + private int strength; + private int intelligence; + private String specialty; + + public Hero(int level, int strength, int intelligence, String specialty) { + this.level = level; + this.strength = strength; + this.intelligence = intelligence; + this.specialty = specialty; + } + + public int getLevel() { + return level; + } + + public int getStrength() { + return strength; + } + + public int getIntelligence() { + return intelligence; + } + + public String getSpecialty() { + return specialty; + } + + public abstract int getPower(List party, Monster monster); +} diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Main.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Main.java new file mode 100644 index 00000000..34515626 --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Main.java @@ -0,0 +1,18 @@ +package org.elsys.oop.heroes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Main { + public static void main(String[] args) { + List party = new ArrayList<>(); + + party.add(new Warrior(5, 4,2, "Knight")); + + Monster enemy = new Monster("Dragon", 5, 20, Arrays.asList(new String[]{"Darkness"})); + + System.out.println(party.get(0).getPower(party, enemy)); + System.out.println(enemy.getPower(party)); + } +} diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Monster.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Monster.java new file mode 100644 index 00000000..c8eb74b4 --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Monster.java @@ -0,0 +1,44 @@ +package org.elsys.oop.heroes; + +import java.util.List; + +public class Monster { + private String name; + private int level; + private int strength; + private List traits; + + public Monster(String name, int level, int strength, List traits) { + this.name = name; + this.level = level; + this.strength = strength; + this.traits = traits; + } + + public String getName() { + return name; + } + + public List getTraits() { + return traits; + } + + private boolean isOpposite(String a, String b) { + if(a == "Evil" && b == "Knight") return true; + return false; + } + + public int getPower(List party) { + int pow = level * strength; + + for (Hero hero : party) { + for (String trait : traits) { + if (isOpposite(trait, hero.getSpecialty())) { + pow *= 1.25; + } + } + } + + return pow; + } +} diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/MonsterTest.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/MonsterTest.java new file mode 100644 index 00000000..04d06b39 --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/MonsterTest.java @@ -0,0 +1,21 @@ +package org.elsys.oop.heroes; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class MonsterTest { + @Test + void getPower() { + Monster testDragon = new Monster("Dragon", 10, 20, Arrays.asList(new String[]{"Evil"})); + + List party = Arrays.asList(new Hero[]{new Warrior(1, 2, 1, "Barbarian")}); + assertEquals(200, testDragon.getPower(party)); + + party = Arrays.asList(new Hero[]{new Warrior(1, 2, 1, "Knight")}); + assertEquals(250, testDragon.getPower(party)); + } +} \ No newline at end of file diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Warrior.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Warrior.java new file mode 100644 index 00000000..72fdbf8d --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Warrior.java @@ -0,0 +1,24 @@ +package org.elsys.oop.heroes; + +import java.util.List; + +public class Warrior extends Hero { + public Warrior(int level, int strength, int intelligence, String specialty) { + super(level, strength, intelligence, specialty); + } + + @Override + public int getPower(List party, Monster monster) { + int pow = getLevel() * getStrength(); + + if(getSpecialty() == "Knight") { + for (Hero h : party) { + if (h.getSpecialty() == "Cleric") { + pow *= 1.25; + } + } + } + + return pow; + } +} diff --git a/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Wizard.java b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Wizard.java new file mode 100644 index 00000000..d34b29eb --- /dev/null +++ b/materials/2020-2021/exams/exam-2-1/B/Heroes/src/org/elsys/oop/heroes/Wizard.java @@ -0,0 +1,26 @@ +package org.elsys.oop.heroes; + +import java.util.List; + +public class Wizard extends Hero { + public Wizard(int level, int strength, int intelligence, String specialty) { + super(level, strength, intelligence, specialty); + } + + private boolean isOpposite(String a, String b) { + return true; + } + + @Override + public int getPower(List party, Monster monster) { + int pow = getLevel() * getIntelligence(); + + for(String trait : monster.getTraits()) { + if(isOpposite(trait, getSpecialty())) { + pow *= 1.25; + } + } + + return pow; + } +} diff --git a/materials/2020-2021/homeworks/2020-11-15-optional-1/Dates.pdf b/materials/2020-2021/homeworks/2020-11-15-optional-1/Dates.pdf new file mode 100644 index 00000000..73b8465e Binary files /dev/null and b/materials/2020-2021/homeworks/2020-11-15-optional-1/Dates.pdf differ diff --git a/materials/2020-2021/homeworks/2020-11-15-optional-1/README.md b/materials/2020-2021/homeworks/2020-11-15-optional-1/README.md new file mode 100644 index 00000000..3c2b626b --- /dev/null +++ b/materials/2020-2021/homeworks/2020-11-15-optional-1/README.md @@ -0,0 +1,40 @@ +Да се имплементира клас за дата и час(обичайни имена са `Date`, `Time` или `DateTime`). Класът трябва да има числови атрибути за секунди, минути, часове, ден, месец и година. Веднъж инициализирани атрибутите не могат да се променят. +Добавете конструктури: +- по подразбиране - всички атрибути се инициализират с 0 +- с аргументи за всички атрибути - атрибутите се инициализират чрез инициализиращ списък +- копиращ + +Към класа добавете константен статичен член за нулева дата. Това е инстанция на класа за дата, за която са подадени: +- секунди = 0 +- минути = 0 +- часове = 0 +- дни = 0 +- месеци = 0 +- година = 1900 + +*Дни и месеци се броят от 0!* + +Това е нулавата(началната) дата и всяка инстанция на класа ще представлява отстояние от нея вместо от пълната нула. +``` +Дата с (година = 100, месеци = 2, дни . 17) представлява (18 март 2000г.) защото 1900 + 100 = 2000. +``` + +Предефинирайте операторите: +- `==`, `!=`, `>`, `<`, `>=`, `<=` - сравняват текущата инстанция с друга дата +- `+` - добавя към текущата инстанция всички атрибути на друга дата +- `-` - изважда от текущата инстанция всички атрибути на друга дата +- `<<` - извежда датата във формат `YYYY-MM-DD hh:mm:ss` *Взимайте предвид отстоянието от нулавата дата* + +За да имплементирате правилно операторите за сравнение добавете скрит метод, който връща сумата от равностойността в секунди на всички атрибути на инстанцията. + +Дефинирайте към класа статичен метод, който получава референция към списък от дати и го сортира. + +Конструктурите и операторите да хвърлят `std::invalid_argument` изключения ако са подадени дати с отрицателни стойности. + +Демонстрирайте в `main` работата на всичко дефинирано. + +Допълнително: +- ползвайте подходящи модификатори за достъп - отвън да може да се достъпва само каквото е нужно да се достъпва +- добавяйте гетъри и сетъри само при нужда +- ползвайте константи когато нещо няма да бъде променяно +- ползвайте референции когато се подават инстанции на класове за да се намали излишното копиране diff --git a/materials/2020-2021/practice/2021-03-08-squirrels/2021-03-08-squirrels.iml b/materials/2020-2021/practice/2021-03-08-squirrels/2021-03-08-squirrels.iml new file mode 100644 index 00000000..d14e4972 --- /dev/null +++ b/materials/2020-2021/practice/2021-03-08-squirrels/2021-03-08-squirrels.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/materials/2020-2021/practice/2021-03-08-squirrels/src/Main.java b/materials/2020-2021/practice/2021-03-08-squirrels/src/Main.java new file mode 100644 index 00000000..1377a663 --- /dev/null +++ b/materials/2020-2021/practice/2021-03-08-squirrels/src/Main.java @@ -0,0 +1,23 @@ +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Random; +import java.util.Scanner; + +public class Main { + private Random rand; + + public static void main(String[] args) { + Main m = new Main(new Random()); + m.calc(); + } + + public Main(Random rand) { + this.rand = rand; + } + + public void calc() { + System.out.println(rand.nextInt()); + Scanner sc = new Scanner(System.in); + System.out.println(sc.nextInt()); + } +} diff --git a/materials/2020-2021/practice/2021-03-08-squirrels/src/MainTest.java b/materials/2020-2021/practice/2021-03-08-squirrels/src/MainTest.java new file mode 100644 index 00000000..9a1e8136 --- /dev/null +++ b/materials/2020-2021/practice/2021-03-08-squirrels/src/MainTest.java @@ -0,0 +1,35 @@ +import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.*; +import java.util.Random; + +@ExtendWith(MockitoExtension.class) +class MainTest { + @Mock + Random rand = new Random(); + + private static final ByteArrayOutputStream outContent = new ByteArrayOutputStream(); + + @BeforeAll + static void setup() { + System.setOut(new PrintStream(outContent)); + System.setIn(new ByteArrayInputStream("13 14".getBytes())); + } + + @Test + void main() { + Mockito.when(rand.nextInt()).thenReturn(10); + Main m = new Main(rand); + + m.calc(); + String s = outContent.toString(); + s = s.replaceAll("\r", ""); + assertEquals("10\n13\n", s); + } +} \ No newline at end of file