Smallest Weight - Early bird exam .NET

Здравейте!

На задачата Smallest Weight от предварителния изпит на 3 от тестовете ми даваше Invalid Return и ми е непонятно защо се чупят. Може ли някой да погледне решението ми и да сподели къде греша?

Поздрави,
Даяна

Здравей,

Единственото, което може да ти е грешно, според мен е при if проверката weight <= smallestWeight.
По спомен, при мен беше без равно.

Много интересно, не ми излизаше тест 15 с отговор 7 BAD - даваше ми го като грешен. За да взема 100 точки на тази задача, трябваше да направя прверка -> if word == “BAD” Console.WriteLine(“7 bad”)

Здравей!

Пробвах и без и с нея и пак последните тестове не ми минаваха… Добавях и ограничение, но също се чупи.

Слагаш smallestWeight да е 0 в началото, а после проверяваш дали сегашния weight е по-малък от smallestWeight, което никога няма да е така. Дори да е 1 буква, винаги ще е по-голямо от 0, т.е. никога няма да намира правилния най-малък weight. Направи smallestWeight в началото да е равно на Int32.MaxValue и би трябвало да е окей =)

Да, но в първата итерация на цикъла го правя да е стойността на първата дума. И с друга стойност на smallestWeight != 0 пак нямаше разлика.

Можеш ли да копираш условието на задачата, че не го помня точно? =)

Условието не мога да го снимам, понеже беше активно само по време на изпита.
До колкото се сещам: На първи ред се приема число n(5-500), на следващите n реда се приема дума(3-20).Идеята е да се провери коя дума, като ѝ събереш буквите(както са си в азбуката: а-1, z-26, като няма значение от кейсинга - третираш главни и малки букви еднакво), да получиш най-малка “тежест”. На изхода трябва да се изведе един ред с: тежестта и думата, както си е, разделени със спейс.

Ако е точно така условието не мога да намеря някакъв проблем колкото и да го гледам =D За жалост не си пазя моето решение да видя, а не мога да стигна до това което съм предавал по време на изпита. :confused:

Имаш ли спомен на 3те теста които ти гърмяха, какво ти даваше: clipped: answer или timeout(или нещо подобно)?

Даваше Invalid Return.

Малко обърках отговорите, но да, Invalid Return :smile::smile:

На JS съм я решавал и проверката е без =.
Ако искате ще пратя условието на ЛС, както и решението на JS, но от това което видях, разликата е в тази проверка.
BTW тази задача беше и на приемния изпит за JS миналия Ноември :slight_smile:

Да, докато решавах изпробвах няколко варианта - и без = пак ми връщаше същото нещо… И в двата случая само 3/12 са Invalid.

Здравей,
Аз имах същия проблем, след около час и три различни решения, открих проблема:
weight += alphabeth[char.Parse(word[j].ToString().ToLower())]; Това не трябва да го има, аз също използвах ToLower и смятах само за малки букви. Обаче се сетих, че вероятно при изписването на теглото и думата в конзолата, думата трябва да се изписва както е на входа, т.е. ако е с главни букви - с главни, ако е с малки - с малки, а има и вариант, в който някъде в думата имаш главна буква. Затова, в крайна сметка, за да не правиш още един речник с главните букви, можеш да използваш следния цикъл:
foreach (var ch in word)
{
if(char.IsUpper(ch))
{
sum += ((int)ch - 64);
}
else
{
sum += ((int)ch - 96);
}

            }

И последно, за да излезе и последният тест, в if (i == 0 || weight <= smallestWeight),
трябва да имаш само “<”.
Така всички тестове бяха ОК.

Хмммм, да, май щеше да е най-добре без речник като цяло, но беше вече късно да сменям всичко. Иначе за извеждането на думата си използвам първоначалната, която е вход, без да я променям. Char.ToLower го използвам само за сметката на тежестта.

Да, права си за Char.Tolower. Значи проблем си остава “<=”, но при мен заради него, гърмеше само един тест…по спомен последния. Всички останали минаваха.

Сигурно има и още нещо… Само че наистина не знам кое е :smile::smile: Нищо де, надявам се да пуснат отново задачите и ще я пробвам пак по друг начин, че малко не ми дава мира.