Skip to content

Latest commit

 

History

History
executable file
·
119 lines (78 loc) · 5.6 KB

Swift-Домашно-1.md

File metadata and controls

executable file
·
119 lines (78 loc) · 5.6 KB

Първото задание за самостоятелна домашна работа

Решениятo на всяка задача ще трябва да качите в нашия портал на следния адрес - http://swiftfmi.apposestudio.com/

Всеки ТРЯБВА да се регистрира с факултетния си номер.

Как се регистрираме?

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

Как добавяме решение?

Трябва да свалите шаблона и да попълните решението в него. Не оставяйте ненужни print извиквания във вашето решение. Системата няма да може да оцени некоректни решения и ще покаже съответната икона.

Как добавяме решение?

Ако имате някакви въпроси за системата, моля пишете на имейла за контакт.

Крайният срок за качване на решенията е 11.04.2022!

Задачи:

  1. Повечето компютри разполагат с операционна система. А тя от своя страна поддържа файлова система и операции над файлове. В тази задача, ще имате даден спиисък от пълни (абсолютни) пътища на файлове и директории (директориите са вид файл, който съдържа други файлове) във файлова система. Ето и няколко примера: / /games /games/socoban /games/socoban/socoban.app

Напишете функция countFolders, която да отпечатва броя на всички директории. Следните правила ще са в сила за входните данни.

  1. / - е основната папка (в нашата файлова система). Всеки път започва със /.
  2. Всеки път до папка може да завършва на /
  3. Всеки път без разширение се смята за папка.
  4. Всеки път до файл завършва с разширение примерно .conf или .app.
  5. Пътища с разширение се считат за папки, само ако има други папки или файлове в тях.
  6. Всички междинни пътища ще съществуват в списъка с пътища, но не е гарантирано, че ще са подредени.

Пример:

За входните данни от горе отговорът ще 1 (/) + 1 (/games) + 1 (/games/socoban) = 3

За следните входни данни:

/ /g.a.m.e.s/socoban.folder /g.a.m.e.s/

Отговорът ще 2. Пояснение: socoban.folder е файл с разширение .folder, не е папка.

func countFolders(paths: [String]) -> Int {
    return -1
}
  1. Да се нaпише функция, която пресмята стойността на прост математически израз от вида по-долу, подаден като String препоръчва се използването на рекурсия:

    Скобите ще са винаги налични и изразът ще е коректен!

    Рекусривното решение лесно може да постои двоично дърво от израза и да го пресметне, понеже са позволени само бинарни операции. Ще се приемат всякакви решения.

    Пример:

     ((23 + 6) * 2)
    

    Възможните операции са ^(степенуване), *, /, +, - .

     func evaluate(expression: String) -> Double {
     	//TODO: your implementation goes here
     }
    
  2. Да се напише функция, която намира броят на различните пътища в лабиринт, зададен в двумерен масив (матрица). Ако няма път, да връща 0.

    Препоръчително е да се използват помощни функции и структури.

    Пример:

     ^ 0 0 0 0 0 0 1
     0 1 1 1 1 1 0 0
     0 0 0 0 0 1 # 1
     0 1 1 1 0 1 0 0
     0 1 0 1 0 0 0 1
     0 0 0 1 0 1 0 *
    
    var testMaze = [
        ["^", "0", "0", "0", "0", "0", "0", "1"],
		["0", "1", "1", "1", "1", "1", "0", "0"],
		["0", "0", "0", "0", "0", "1", "#", "1"],
		["0", "1", "1", "1", "0", "1", "0", "0"],
		["0", "1", "0", "1", "0", "0", "0", "1"],
		["0", "0", "0", "1", "0", "1", "0", "*"]]
Извикването на функцията, трябва да връща: 

       1

Където:

	0 е проходимо поле
	1 е непроходимо поле
	^ е началната позиция
	* е крайната позиция
    # е непроходимо поле


Примeрна функция:
            
        protocol Maze {
            init(raw: [[String]])
            ...
        }
        
        func findPaths(maze: [[String]]) -> Int {
		//TODO: your implementation goes here
	}