Loading...
kenderov.emil avatar kenderov.emil 6 Точки

Encrypted Matrix - Проблем

Привет колеги,

Днес се занимавах със задачата Encrypted Matrix, която се е падала тази година на 29ти март на изпита. Първия ми вариант(код : http://pastebin.com/mg2X2Z6X). Джъджа ми отсъди 40 точки. Реших, че проблема може да е в начина, по който се опитвам да превърна стринга отново в инт масив(линии 99-104). ОК, намерих начин да мина без това и направих втори вариант, по-опростен(код: http://pastebin.com/KRGpE00v) където въвеждам потребителски int[] и процедура за превръщане на число в масив от цифри. И двата варианта работят при мен. Само че джъджа оцени втория по-зле:20 точки. Плийс, кажете ми къде е грешката. Благодарско предварително на всички.

0
Programming Basics
RoYaL avatar RoYaL Trainer 6849 Точки

Има няколко code smell-а, които виждам.

1. Няма никакъв смисъл от този Convert.ToInt32 почти никъде... особено на първото парсване.( ASCII_message[a] = Convert.ToInt32(message[a]); )

2. Проверките дали си на 1ви или последен символ са ... 6 ?!? плюс имаш проверка дали си на ВТОРИ символ? Защо? Това е достатъчно:

                    backward = 0;
                    forward = 0;
                    if (c > 0)
                    {
                        backward = ASCII_1[c - 1];
                    }
                    if (c < ASCII_1.Length - 1)
                    {
                        forward = ASCII_1[c + 1];
                    }
                    ASCII_encrypted[c] = ASCII_1[c] + forward + backward;

3. Превръщането от стринг в цялочислен масив е излишно. Още повече е разбирам защо маха някакви цифри:

            for (int i = 0; i < ASCII_encrypted1.Length; i++)

            {

               string_encrypted[i] = Convert.ToInt32(ASCII_encrypted1[i])-48;

            }

Тук не става ли просто string_encrypted[i] = int.Parse(ASCII_encrypted1[i]+"")?

Както и да е. Махнах го това въобще и прекръстих стрингът ASCII_encrypted1 на string_encrypted:

            string string_encrypted = string.Empty;

            for (int h = 0; h < ASCII_encrypted.Length; h++)
            {
                string_encrypted = string_encrypted + (ASCII_encrypted[h]);

            }

И започнах да боравя само с него. На местата на които се ползваше ударих по един int.Parse за да не взима ASCII кода, а числото:

encrypted_array[d, d] = int.Parse(string_encrypted[d]+"");

и

encrypted_array[string_encrypted.Length - d - 1, d] = int.Parse(string_encrypted[d]+"");

100/100
       

2
alex.mitev avatar alex.mitev 20 Точки

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

След като я направих, judge ми даде 0 точки.

Чак тогава, накрая, добавих space-овете, които просто не бях видял. Никъде не го пише, и аз си карах без тях.

Ето го кода:

http://pastebin.com/cES3mHks

Тази задача, предполагам, може да се направи и с обикноени стрингове за Оутпут, а не с двумерен масив, или бъркам?

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

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

0
04/11/2015 18:48:13
StaVykoV avatar StaVykoV 169 Точки

Колега, това за празното място между цифричките го пише  във файла с домашното:

Output

The output data should be printed on the console.

You must print the matrix with a single space between the elements.

 

Иначе аз още в началото си пълня ASCII стойностите в един int масив и просто ползвам /10 и %10. Накрая пълня само диагонала на двумерен масив и в зависимост от наклонената чертичка печатам от ляво на дясно или обратното.

1
alex.mitev avatar alex.mitev 20 Точки

Да, така пише, но не съм гледал.

Не знаех, че липсващите стойности на масива се пълнят с нули. Аз отделно съм ги и напълнил с нули. 

VyKov, как избягваш проблема с промняната на дължината при енкрипването, ако използваш само един масив?

 

 

0
RoYaL avatar RoYaL Trainer 6849 Точки

Най-вероятно еккриптва и направо печата. Ако се получи N-цифрено число при умножението/събирането, просто печата N реда. И да, няма нужда от матрица (двумерен масив). Просто печаташ Х на брой нули, числото, още нули до края на реда :)

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