Loading...
Elena123456 avatar Elena123456 235 Точки

11. *Array manipulator: solved with List

Здравейте, може ли малко помощ за тази задача- Array Manipulator от упражнението за "Методи"? Дори и без човек да гледа кода ми мисля, че би могъл да ми помогне, като ме насочи към случаите, които тряба да тествам. Тествах всякак, както инпута и Judge ми подсказват. Тествах и всяка една команда по отделно и изглежда, че работят, но точките са 70/100: тест 3, 6 и 10 са ми неправилни според Judge.

Възможно ли е някой от админите или колега с по-висок рейтинг да има достъп до инпутите на тестовете 3,6 и 10? Ако има такъв човек, то моля ако има време поне да ми каже инпутите на тези тестове за да тествам с тях и да разбера къде ми гърми. Благодаря!

Ето все пак и кода ми, ако някой има време да погледне: https://pastebin.com/fZS4nHTf

Judge:  https://judge.softuni.bg/Contests/Practice/Index/1209#10

И вярвам, че ще надъхам някои от колегите ми да решат задачата с лист, тъй като е доста по-приятно в сравнение с масив. А и все пак тази задача е давана на изпит, като трета задача, а за третите задача от изпитите е известно, че се препоръчва да се решат с лист. :)

 

Trifon has finally become a junior developer and has received his first task. It’s about manipulating an array of
integers. He is not quite happy about it, since he hates manipulating arrays. They are going to pay him a lot of
money, though, and he is willing to give somebody half of it if to help him do his job. You, on the other hand, love
arrays (and money) so you decide to try your luck.
The array may be manipulated by one of the following commands
 exchange {index} – splits the array after the given index, and exchanges the places of the two resulting sub-
arrays. E.g. [1, 2, 3, 4, 5] -> exchange 2 -> result: [4, 5, 1, 2, 3]
o If the index is outside the boundaries of the array, print “Invalid index”
 max even/odd– returns the INDEX of the max even/odd element -> [1, 4, 8, 2, 3] -> max odd -> print 4
 min even/odd – returns the INDEX of the min even/odd element -> [1, 4, 8, 2, 3] -> min even > print 3
o If there are two or more equal min/max elements, return the index of the rightmost one
o If a min/max even/odd element cannot be found, print “No matches”
 first {count} even/odd– returns the first {count} elements -> [1, 8, 2, 3] -> first 2 even -> print [8, 2]
 last {count} even/odd – returns the last {count} elements -> [1, 8, 2, 3] -> last 2 odd -> print [1, 3]
o If the count is greater than the array length, print “Invalid count”
o If there are not enough elements to satisfy the count, print as many as you can. If there are zero
even/odd elements, print an empty array “[]”
 end – stop taking input and print the final state of the array

 

Examples                                    
Input
1 3 5 7 9
exchange 1
max odd
min even
first 2 odd
last 2 even
exchange 3
end

 

Output

2
No matches
[5, 7]
[]
[3, 5, 7, 9, 1]

 

Input
1 10 100 1000
max even
first 5 even
exchange 10
min odd
exchange 0
max even
min even
end

Output

3
Invalid count
Invalid index
0
2
0
[10, 100, 1000, 1]

 

 

 

Тагове:
0
Fundamentals Module 09/09/2020 20:52:48
Elena123456 avatar Elena123456 235 Точки

Здравейте, споделям новото  ми решение на задачата, което също е с лист и най-накрая мина с 100/100.

https://pastebin.com/fZS4nHTf

След няколко неуспешни опити за решение установих Judge към какво е изключително чувствителен. Надявам се това, което ще споделя да е от помощ на колегите, които  ще трябва да нанесат корекции в кода си за да получат резултат 100/100.

1. Judge е чувствителен към правилното изписване на командите до буквата и празните пространства.

 

2. Ако имаме команда " еxchange" имаме да проверяваме за два случая, като не трябва накрая да принтираме резултата:

а)

  • if (index < 0 || index > numbers.Count - 1)

                Console.WriteLine("Invalid index");

б) валидните случаи на еxchange са от 0 до самия индекс включително(exchange after index), което ни показва колко пъти ще преместим първия елемент на масива на най-последния индекс. Необходимо е предварително да си използваме отделна променлива, в която да си запишем първия елемент и впоследствие да го преместим на последното място в масива.

 

3. Ако имаме "max even/odd" или "min even/odd"– уверете се, че взимате правилно int.MaxValue и int.MinValue, като е възможно и така: int maxEven = -2147483648; int minEven = 2147483647; Условието тук е не да вземем конкректното максимално четно или нечетно число, а неговия LastIndexOf(), тоест най-дясностоящия. Докато тествате програмата с дадените инпути може изобщо да не разберете, че не взимате най-последния индекс, защото аутпутите излизат коректно, но после Judge не дава 100/100. Тук също имаме два случая:

а) ако имаме примено командата "max even", а изобщо нямаме четни числа, то трябва да изпишем: "No matches";

б) ако имаме "max even" трябва да вземем най-дясностоящия индекс. Същото важи и за останалите три команди: "min even", "min odd" и "max odd".

 

4. Ако имаме командата "first {count} even/odd": да се обърне внимание как се проверява дали е едно число е четно или не е: number[i]%2=0 и number[i]%2!=0. Тук имаме три случая:

а) ако count > numbers.Count (дължината на първоначалния лист или ако сме използвали масив- от дължината numbers.Length)-  Console.WriteLine("Invalid count");

б) count e валиден ако count <= numbers.Count и същевременно имаме някакъв брой even/odd числа (newListOfeven.Count != 0 или ако сме използвали масив numbers.Length!=0). По условие, ако имаме масив с дължина 10 и искаме да вземем от него първите 4 четни числа, а дефакто нямаме толкова, то трябва да принтираме толкова, колкото имаме. Ето защо тук използвам     int newCounter = Math.Min(counter, newListOfeven.Count) за да съм сигурна, че ако ми се търсят първите 4 четни числа, а имаме реално само 3, че ще принтирам само 3.

в) ако ми се търсят първите 3 четни числа, а изобщо нямаме четни числа, то ще принтираме "[]", като при принтирането вътре в масива няма никакво празно простраство.

 

5. Ако командата е "last" важат тук отново трите горни подточки от "4."-а), б), в).  Тук е важна подредбата на числата в масива, когато печатаме. Пример: първоначално имаме "[1, 2, 3, 4, 7, 8, 9]" и командата "last 2 even", резултата в масив трябва да ни бъде с подредба: "[4, 8]. Може би подхода ми няма да е от най-бързите, но аз използвах следното: от [1, 2, 3, 4, 7, 8, 9] получих масива само с четните числа- [2, 4, 8], след което го ривърснах [8, 4, 2], след което включих само първите две цифри- [8, 4,] и накрая и него ривърснах за да получа "[4, 8]". Туко-що осъзнах, че може и само с едно ривърсване да се направи. :)

 

6. И последно Judge e чувствителен и при печатането дали се или не се преминава на нов ред. Просто ако имаме няколко пъти Console.Write(), то следва само последния да ни е Console.WriteLine(), a ако имаме само един, то той трява да е Console.WriteLine(). Заради такава грешка Judge отнема по 20, 30 точки, без да ни подсказва никъде. И при печатането на масивите изрично е казано, че елементите се сплитват по "," и " ".

1
09/09/2020 15:04:21
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.