Интересна и не много лесна задача Warhead - Софтуерен университет

Интересна и не много лесна задача Warhead - Софтуерен университет

+ Нов въпрос
GoShow avatar GoShow 595 Точки

Интересна и не много лесна задача Warhead

Задачата в интерес на истината днес ме заби. За хората, които започват от 0 ще е доста сложна предполагам, както се оказа и за мен, въпреки,че съм малко по- напред.Тя е от изпит по C#1 миналата година в Телерик.

http://bgcoder.com/Contests/Practice/Index/106#4 - това е линка към нея, мисля че трябва да имате регистрация в bgcoder, за да я отворите. И така аз забих с моето решение на 43 / 100 и безброй изгърмявания откъм време (time limit).

http://dotnetfiddle.net/X3atis - ето и решението ми(на този етап). Ще съм безкрайно благодарен на предложения за оптимизация и всякакви други.

p.s. не исках да отварям авторското решение и тестовете.

 

Тагове:
ZloboMiR avatar ZloboMiR 50 Точки

Сигурно няма да е много адекватен въпрос, но как да си отчитаме времето във Студиото? Само с две DateTime.Now в началото и края на кода? Дали за времето не те бави това, че не ползваш изучавания от нас Parse метод при четене / писане? Може би е по-бърз при работа с конзолата. По идея задачата много прилича на миночистача.
П. С. За линка в БГ кодер върши работа и студентският номер от профила ни тук във форума.

0
beBoss avatar beBoss 513 Точки

 

Ето пример:

 

 

using System; 
using System.Diagnostics;

class Blabla
{
  static void Main()
  {
    Stopwatch stopWatch = new Stopwatch();
    stopWatch.Start();

    //Program code

    stopWatch.Stop();
    Console.WriteLine("\r\nRuntime: {0} - in Milliseconds ", stopWatch.Elapsed);
  }
}
4
GoShow avatar GoShow 595 Точки

Какво имаш предвид с : "не ползваш изучавания от нас Parse метод при четене / писане"?

0
a_rusenov avatar a_rusenov 1103 Точки

Прекалено много if конструкции ползваш, откъдето ти идва и тайм лимита. Плюс това си създаваш много излишни обхождания като не използваш else.

-Поизчисти го като вкараш switch конструкция за операциите

-Можеш да махнеш този лист с outputs, без значение е за БГкодера в каква последователност ги изкарваш (освен ако на теб не ти пречи)

-При извършване на операция в/у кондензатор, затривай околните единици и самия център след това на 0 (може да му хрумне отново там да провери)

Ето го и моето решение: http://pastebin.com/eVBG2UNX

Използвал съм методи и е добре четимо според мен.

1
GoShow avatar GoShow 595 Точки

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

0
a_rusenov avatar a_rusenov 1103 Точки

Имах предвид, че можеш да изкарваш output по всяко време, дори ако след това има още input. Иначе последователността на output-а трябва да се запази задължително. Това е така, защото БГкодер изкарва резултата в txt документ и оттам сравнява.

1
GoShow avatar GoShow 595 Точки

Благодаря!

0
g.stoyanov avatar g.stoyanov 760 Точки

Решение

 

Можеш да го погледнеш, опитах се да го напиша максимално четимо и подредено с някои изключения разбира се :).

Ако има въпроси питай.

 

И да допълня за всички който решават задачата да обърнат внимание на следното нещо:

Има два проблема в тестовете спрямо условието на задачата:

 

1. На един тест се подава left вместо red :). Ако ги нямаш тестовете не знам как ще се сетиш да оправиш този проблем понеже няма такова инфо в условието.

 

2. Малко спорно е дали е описано добре в условието но това:

 

000|000

011|100

010|100

011|100

000|000

000|000

 

се води червен кондензатор. В условието намерих само това:

For a location of a figure, we take the location of the center cell that is empty.

 

1
GoShow avatar GoShow 595 Точки

Много мерси, днес съм на лекция от 6, но след това ще го погледна!Иначе мисля, че обхващам въпросния червен кондензатор и не съм гледал тестовете просто реших да се запъна и да я направя сам.Още веднъж благодаря!

0