Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Sunglasses - некоректно оценяване от Judge

Това е кодът ми за Sunglasses.

 

using System;


    class Sunglasses
    {
        static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            int width = 5 * n;
            char[,] sunglasses = new char[width, n];
            for(int i = 0; i<2*n; i++)
            {
                sunglasses[i,0] = '*';
                sunglasses[i, (n - 1)] = '*';
            }
            for (int i = 0; i < n; i++)
            {
                sunglasses[0, i] = '*';
                sunglasses[(2*n - 1), i] = '*';
            }
            for (int i = (width-1); i>=3*n; i--)
            {
                sunglasses[i, 0] = '*';
                sunglasses[i, (n-1)] = '*';
            }
            for (int i = 0; i < n; i++)
            {
                sunglasses[3*n, i] = '*';
                sunglasses[width-1, i] = '*';
            }
            for(int i=1; i<(2*n-1); i++)
            {
                for (int j = 1; j < (n - 1); j++)
                {
                    sunglasses[i, j] = '/';
                }
            }
            for (int i = (3*n+1); i < (width - 1); i++)
            {
                for (int j = 1; j < (n - 1); j++)
                {
                    sunglasses[i, j] = '/';
                }
            }
            for (int i = 2 * n; i < 3 * n; i++)
            {
                sunglasses[i, (n / 2)] = '|';
            }
            for(int j = 0; j<n; j++)
            {
                
                for(int i = 0; i<5*n; i++)
                {
                    Console.Write(sunglasses[i,j]);
                }
                Console.WriteLine();
            }

                    
           
        }
    }

 

На конзолата излиза перфектно. В системата за оценяване ми отчита грешка. Там някак си "сплесква" двете стъкла едно до друго и рамката стърчи в дясно.

Моето обяснение е следното - не задавам никакви стойности на char масива за разстоянието между стъклата и съответно системата им дава стойност null. null се печата като празно пространство или интервал в конзолата, но някак си judge системата не го възприема даже като празно пространство и трупа едно върху друго.

В случая смятам, че това е грешка на системата. Има логика понеже null не е интервал, но самият факт, че дава различен аутпут от конзолата, е проблем. За домашните както и да е, но ми е интересно какво би се случило при подобна ситуация на изпита. Има ли вариант да поискаме преразглеждане на точките ни от дадена задача?

 

Тагове:
1
Programming Basics
mihayloff14 avatar mihayloff14 824 Точки

Здравей,
Аз също се сблъсках с този проблем, когато решавах тази задача. Проблемът е в това, че явно default стойност на елементите от array-a не е ' '(empty space). Аз коригирах този проблем като в началото на задачата обходих матрицата с nested loop и във всички позиции въведох изрично ' '(empty space) 

Ето ТУК съм питал относно същия проблем. smile

Относно ситуацията по време на изпит. По всяко време може да се обърнеш за помощ към асистентите, за да проверят проблема ти. Няма нужда от преразглеждане на точките. По време на изпит може да събмитваш колкото си искаш решения колкото си искаш пъти, както е положението и когато решаваш изпитите от минали периоди. Единствената разлика е, че по време на изпита интервала между отделните submit-и е 3 минути.

2
Hristo_Penchev avatar Hristo_Penchev 389 Точки

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

Все пак искам да ти благодаря за отговора и помощта. Явно различните системи тълкуват null по различен начин и печатат различно. Добре е, че на изпита можем да въведем кода няколко пъти. Така ще се предпазим от подобни глупави грешки.

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Да, причината е точно това. Сложих интервали в стойностите на масива между стъклата и системата ми прие отговора.

0
Filkolev avatar Filkolev 4482 Точки

Според мен тук си паднал малко в капан, защото си ползвал по-сложни неща, отколкото е необходимо. По същия начин имаше една задача да се въведат две числа и да се изведе по-голямото от тях без да се ползва условна конструкция и в първия момент зациклих, а решението е елементарно, просто си има Math.Max за тая работа.

Така и с тази задача. Моето решение е просто един цикъл и в него условие с три възможности - в зависимост от това дали си на първи/последен, в средния ред, или някъде по средата. Не се ползва нищо кой знае какво и ако има грешка е много по-лесно да се види. Е, реално погледнато си е дърварско, както да си нарисуваш триъгълник с цитат, а не с цикъл, но работи и дава 100 т, а на изпита това е важно, там не ти се дава бонус за ползване на advanced техники.

Моята стратегия за подготовка е да решавам задачите със знанията, които имам към момента, а впоследствие ако науча по-умен начин просто си преработвам някои задачи. Но ползването на материал, който се учи по-нататък, не значи задължително, че това е по-добър или по-лесен начин за конкретната задача. Е, за някои от задачите със звезда се налага, но не за всички.

Ето, при твоето решение преброих над 5 цикъла и в някои има даже вложени цикли. Положителното е, че научаваш нещо ново и разбираш къде може да се оплескат нещата. Така че има си и предимства да се решават задачи по "трудния" начин.

1
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

И аз реших задачата по този доста лесен начин чрез for цикъл и в него if с 3 възможности. Може да видите кода тук - Sunglasses.

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