Programming Fundamentals Exam - 04 March 2018 - Java Решения
https://judge.softuni.bg/Contests/960/Programming-Fundamentals-Exam-04-March-2018-Part-I
Problem 01. Padawan Equipment - https://pastebin.com/vvPrTywV 100/100
Problem 02. Kamino Factory - https://pastebin.com/8yXed5GE 100/100
https://judge.softuni.bg/Contests/962/Programming-Fundamentals-Exam-04-March-2018-Part-II
Problem 03. Star Enigma - https://pastebin.com/qRePJF6V 100/100
Problem 04. ForceBook - https://pastebin.com/iTNSR80m 100/100
Problem 04. ForceBook - https://pastebin.com/UEB5q1jx 100/100 - проба със Stream API и класове
Някой ако има по-оптимизирани решения или други интересни идеи да споделя.
Здравей.
Нарича се Ternary (shorthand for
if-then-else
statement) и изразът - Integer beltCount = (studentCount == 0) ? 0 : studentCount - (studentCount / 6); е същият като:--------------------------------------------------------------
Integer beltCount;
If (studentCount == 0) {
beltCount = 0;
} else {
beltCount = studentCount - (student / 6);
}
Или обяснено по следният начин:
променлива = (някакво услови) ? изпълни тази част ако условието е вярно : изпълни тази част ако условието е грешно;
Задължително е винаги частите да са две и да могат да се побират в променливата т.е. ако променливата е итеджър двете части трябва да връщат интеджър;
The ? : operator in Java - http://www.cafeaulait.org/course/week2/43.html
------------------------------------------------------
А самото деление на 6 го правя за да видя колко пъти има група от по 6 студента за да знам колко колана да махна. Тъй като е деление на цели числа няма да ни излезе число с десетична запетая (10 / 3 = 3 ако беше реално щеше да е 3,333333)
Ако правя модулно деление примерно :
36 % 6 = 0;
5 % 6 = 5;
В първият случей имам 6 безплатни а модулното ни дава 0. При втория имам 0 безплатни пък излиза, че имаме 5.
Напрактика може да се пропусне горната проверка тъй като 0 делено на всяко число дава 0, пък на нула не се дели. т.е
Integer beltCount = studentCount - (studentCount / 6); също ще ти е вярно. Няма верятност за делене на нула.
Тези решения ми се струват доста нареднали за след Programing Basics, може би се занимаваш отдавна с Java. Човек който идва от Basics доста зор ще види с твоите решения :)
Не знам дали на Джава има SortedDictionary/Map и SortedSet, но на С# става елегантно, защото намалява проверките и сортирането.
Аз по подобен начин съм ги решил на С#, като за "силата" съм ползвам SortedDictionary и value-тата в SortedSet вкарвам всички бойци, по тоя начин не се притесняваш за дублирания, защото SortedSet-а си се оправя сам и трябва само да провериш дали има подобен боец в другите Сетове.