-
Notifications
You must be signed in to change notification settings - Fork 125
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
65 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
## Разписание на курсовете 🗓️ | ||
|
||
### Условие | ||
|
||
Кампанията по записване на изборни дисциплини във ФМИ е в разгара си, но Ники е в голяма дилема. Всички яки курсове, които си е набелязал, по програма са в сряда, и за съжаление някои се застъпват като часове. Той си направи списък на желаните курсове с началния и крайния час на всеки (за простота, реши да ги представя с цели числа) и се опита да максимизира броя незастъпващи се курсове, които може да посещава. Ники тъкмо започваше да учи Java, затова реши да напише набързо една функция, която по даден масив с N елемента от масиви с по два елемента (представящи съответно стартовия и крайния час на дадения курс) да връща максималния възможен брой незастъпващи се курсове: | ||
|
||
```java | ||
public static int maxNonOverlappingCourses(int[][] courses) | ||
``` | ||
|
||
Функцията сложи в публичен клас, който без много да му мисли кръсти `CourseScheduler` и започна да експериментира. | ||
|
||
### Примери | ||
|
||
| Извикване | Резултат | | ||
| :-------------------------------------------------------------------------------------------------- | :------- | | ||
| `maxNonOverlappingCourses(new int[][]{{9, 11}, {10, 12}, {11, 13}, {15, 16}}))` | `3` | | ||
| `maxNonOverlappingCourses(new int[][]{{19, 22}, {17, 19}, {9, 12}, {9, 11}, {15, 17}, {15, 17}}))` | `4` | | ||
| `maxNonOverlappingCourses(new int[][]{{19, 22}}))` | `1` | | ||
| `maxNonOverlappingCourses(new int[][]{{13, 15}, {13, 17}, {11, 17}}))` | `1` | | ||
|
||
### :warning: Забележки | ||
|
||
- Помисли, каква е сложността на използвания от теб алгоритъм и може ли да се оптимизира | ||
- Използването на структури от данни, различни от масив, както и на компаратори, ламбда изрази и прочее **не е позволено** - задачата може и трябва да се реши с помощта на знанията от първата лекция от курса. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
## Подравнител на текст 📄 | ||
|
||
### Условие | ||
|
||
С изключение на най-древните от тях, текстовите редактори позволяват различни форматирания на текста, като едни от най-често използваните възможности са свързани с подравняване на текста: отляво, отдясно или двустранно. Като част от разработката на модула за форматиране, ще създадем функция, която по даден масив от низове (думи) и максимална ширина на полето за принтиране, връща масив от низове, представляващи редовете от текста, подравнен двустранно чрез вмъкване на подходящ брой интервали между думите. Всеки ред на форматирания текст има дължина, точно равна на зададената максимална ширина на полето за принтиране. На всеки ред трябва да се съберат максималния възможен брой думи. Евентуални редове, които побират само една дума, оставяме лявоподравнени. Последният ред оставяме ляво подравнен, с единични интервали между думите и го допълваме до размера на полета с интервали отдясно. Всеки ред започва и завършва задължително с дума (не може да започва и завършва с интервал. С интервал(и) може да завършва само последният ред). Интервалите на всеки ред се разпределят максимално равномерно отляво надясно: броят интервали между всеки две думи трябва да варира най-много с единица и ако кои да е две думи са разделени с *k* интервала, всички думи на реда вляво от тези трябва да са разделени с поне *k* интервала. | ||
|
||
За простота, приемаме, че дума е последователност от един или повече произволни символи с графична репрезентация (т.е. думите не съдържат интервали, табулации, символи за нов ред и подобни). Също приемаме, че подаваната максимална ширина на полето е положително число, голямо поне колкото най-дългата дума, т.е. не трябва да се грижим за евентуално сричкопренасяне. | ||
|
||
При попълването на текста с интервали, се стремим да ги разполагаме равномерно между думите, | ||
|
||
Създайте публичен клас `TextJustifier` с метод | ||
|
||
```java | ||
public static String[] justifyText(String[] words, int maxWidth) | ||
``` | ||
|
||
### Примери | ||
|
||
1. При подаване на `{“The”, “quick”, “brown”, “fox”, “jumps”, “over”, “the”, “lazy”, “dog.”}` и максимална ширина 11, резултатът трябва да бъде | ||
|
||
```bash | ||
{"The quick", | ||
"brown fox", | ||
"jumps over", | ||
"the lazy", | ||
"dog. "} | ||
``` | ||
|
||
2. При извикване с `{"Science", "is", "what", "we", "understand", "well", "enough", "to", "explain", "to", "a", "computer."}` и максимална ширина 20, резултатът трябва да бъде | ||
|
||
```bash | ||
{"Science is what we", | ||
"understand well", | ||
"enough to explain to", | ||
"a computer. "} | ||
``` | ||
|
||
### :warning: Забележки | ||
|
||
- Използването на структури от данни, различни от масив, **не е позволено**. Задачата може и трябва да се реши с помощта на знанията от първата лекция от курса. |