Skip to content

Commit

Permalink
Add Lab 01 assignment
Browse files Browse the repository at this point in the history
  • Loading branch information
100yo committed Oct 12, 2024
1 parent ce6e9c5 commit 7da60d6
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
25 changes: 25 additions & 0 deletions 01-intro-to-java/lab/01-course-scheduler/README.md
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: Забележки

- Помисли, каква е сложността на използвания от теб алгоритъм и може ли да се оптимизира
- Използването на структури от данни, различни от масив, както и на компаратори, ламбда изрази и прочее **не е позволено** - задачата може и трябва да се реши с помощта на знанията от първата лекция от курса.
40 changes: 40 additions & 0 deletions 01-intro-to-java/lab/02-text-justifier/README.md
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: Забележки

- Използването на структури от данни, различни от масив, **не е позволено**. Задачата може и трябва да се реши с помощта на знанията от първата лекция от курса.

0 comments on commit 7da60d6

Please sign in to comment.