Задача Batman от първи ден, вечер


0

Гледам, че вече се дискутират решенията. Единствената задача която не успях да реша беше Batman.

http://pastebin.com/C3nazKKh

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




Отговори



5
Това е моето решение. Рогата не се увеличват.



от Ilian_Iliev_2 (1043 точки)


0
Това решение 100/100 ли е?

от messenger (552 точки)

3
Да, 100/100 е. Относно грешката на автора, между двете рога винаги трябва да има само един интервал.

от Ilian_Iliev_2 (1043 точки)



0
И аз отделих близо 4 часа за тази задача и имам 0 точки. Много ми е любопитно да видя pattern-a

от georgivelikov (1844 точки)


3

Здравейте,

според мен беше доста тежък изпит. В тази задача се търсеше зависимост, но нея можеш да я откриеш само на късмет и на опит >100 :)

Ето и моето решение:

http://pastiebin.com/#&togetherjs=GVB2SUkUTA   100/100




0
и на мен ми е интересно. В един момент имплементирах зависимости Фибоначи и пак не успях. :) Моето решение, което обаче нищо не дава(като точки), нулевите минават. на места гърми за време, заради серията на фибоначи, който проблем щях да го оправя стига да бях разбрал логиката :) Мн забавна задачка.

от messenger (552 точки)


0
 Явно всички сме се заблудили, че проблемът е в рогата, а той е в тялото

от georgivelikov (1844 точки)


1
using System; public class Program { static void Main() { int n = int.Parse(Console.ReadLine()); char c = char.Parse(Console.ReadLine()); for (int i = 1; i <= n / 2; i++) { for (int j = 1; j <= i - 1; j++) { Console.Write(" "); } for (int j = 1; j <= n - i + 1; j++) { Console.Write(c); } if (i != n / 2) { for (int j = 1; j <= n; j++) { Console.Write(" "); } } else { for (int j = 1; j <= n/2-1; j++) { Console.Write(" "); } Console.Write(c); Console.Write(" "); Console.Write(c); for (int j = 1; j <= n / 2 - 1; j++) { Console.Write(" "); } } for (int j = 1; j <= n - i + 1; j++) { Console.Write(c); } for (int j = 1; j <= i - 1; j++) { Console.Write(" "); } Console.WriteLine(); } for (int i = 1; i <= n / 3; i++) { for (int j = 1; j <= n / 2; j++) { Console.Write(" "); } for (int j = 1; j <= n*2+1; j++) { Console.Write(c); } for (int j = 1; j <= n / 2; j++) { Console.Write(" "); } Console.WriteLine(); } for (int i = 1; i < n / 2+2; i++) { for (int j=1; j <= n; j++) { Console.Write(" "); } for (int j = 1; j <= i; j++) { Console.Write(" "); } for (int j = 1; j <= n/2 - i + 1; j++) { Console.Write(c); } for (int j = 1; j <= n/2 - i; j++) { Console.Write(c); } for (int j = 1; j < n; j++) { Console.Write(" "); } for (int j = 1; j <= i - 1; j++) { Console.Write(" "); } Console.WriteLine(); } } }



1

Заповядай, 

http://pastiebin.com/5720955e683f6

Кратък код за 100 точки, това е моето решение на задача на изпита.

Поздрави,




1

Ето го и моето 100/100: 

using System; namespace Batman { class Batman { static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); string character = Console.ReadLine(); for (int i = 0; i < n / 2; i++) { Console.Write(new string(' ', i)); for (int characters = 0; characters < n - i; characters++) { Console.Write(character); } if (i == (n/2) - 1) { Console.Write(new string(' ', (n/2)-1) + character + " " + character + new string(' ', (n / 2) -1)); } else { Console.Write(new string(' ', n)); } for (int characters = 0; characters < n - i; characters++) { Console.Write(character); } Console.WriteLine(); } for (int u = 0; u < n / 3; u++) { Console.Write(new string(' ', (n / 2) )); for (int k = 0; k < 2 * n + 1; k++) { Console.Write(character); } Console.WriteLine(); } for (int p = 0; p < n / 2; p++) { Console.Write(new string(' ', n + 1 + p)); for (int k = 0; k < n - 2 - (2 * p) ; k++) { Console.Write(character); } Console.WriteLine(); } Console.WriteLine(); } } }




12

Задачата беше от типа "намислил съм си едно число, познай кое е то". При положение, че алгоритъмът трябва да се изведе само на база 3-те примера, то те трябва да дават еднозначно решение. Не може и тялото и крилете да са с еднаква височина (респективно 1,2,3 при s=5,7,9) и да се задават с различна формула (респективно s/3 и s/2 -1). Като посочените са само част от възможните начини да се изведе втората тройка числа от първата. То е все едно да ви дадат условие "ето ви редицата a0 = 0, a1 =1, a2 = 1, a3 =2  намерете a4 и нагоре" и вие да си кажете "Ха! Това е редица на Фибоначи  an = a(n-1) + a(n-2)" и те да ви отговорят "да, ама ние имахме предвид an = a(n-1)^3 + a(n-2)^3 решението ви е грешно". Получава се точно ситуацията с онези учителки, по които толкова се ругае напоследък, дето пишат двойки на вярно решена задача защото "не е решена по техния начин" и убиват творчеството и ентусиазма у учениците. 

Ако трейнърите са искали по-сложна задача, да бяха измислили по-комплексна фигура. И защо точно тази с изчертаването трябваше да е най-сложна, а предполагаемата "задача за шампиони" 5-та се решаваше с 5 реда код без избощо да се замисля човек? Въпросната 5-та ми беше единствената, която тръгна в BGCoder от воле. То и какво има да и се обърка на нея - условието за "работещ гребен" е дефенцията на логически оператор &. После остава за всеки работещ гребен да му се съберат битовете и да се вземе този с най-голяма сума. Bitwise задачите от съответното домашно бяха къде-къде по-сложни. Например онази, на която трябва ше да се разменят m бита на k-та позиция с други m на p-та позиция. То не бяха едни маски, едни инверсии, шифтвания, чудо.

Не ме разбирайте погрешно, "реших" задачата (разбирай "имам 100 т."). Но това е само защото не съм начинаещ, бях приключил с останалите за малко над 2 часа и имах достатъчно време да се опитам да си отровя нервите като налучкам коя точно комбинация от възможни формули е имал авторът предвид. Но тези, които сега започват с програмирането и са били силно притиснати от времето, едва ли са имали време да се забавляват с игра на тото. По едно време почти цялата зала се бъхтеше над въпроса "Защо като имам работеща задача, която връща смислени картинки за всички случаи в Visual Studio и покрива и трите нулеви теста, връща 0т. на ненулевите?" Личното ми мнение е че изпитните задачи трябва да провокират мислене, но не непременно типа мислене на автора на задачата. 


от STzvetkov (1330 точки)


6
Рядко се оплаквам за каквото и да било, но напълно подкрепям изчерпателния отговор на колегата. Наистина трябваше поне третия нулев тест да беше с 11, а не с 9.. това си беше чисто тото на тази задача. 

от popovanton (40 точки)

2

+1

(а като цяло останалите задачи бяха твърде леки, дори в сравнение с миналогодишните...)


от bateshot (280 точки)



4
Пускам и моето решение 100/100 точки, възможно най-краткото е, може да ви е интересно:) линк

от shopov91 (142 точки)


2

Само едно оплакване, решение на два и половина реда е супер красиво, но често нечетливо за останалите хорица.

Но пък е много красиво...


от bateshot (280 точки)

1
Има го и тоя момент, но на изпита точките бяха важни :)

от shopov91 (142 точки)



3
Значи тази задача  с Батман си играх поне 3 часа и ги гледах тези картинки и изобщо не доумявах какво се случва и защо не работи!? Вече знам отговора, но според мен правилното решение на задачата не е логически изпипано. А тази задача може да се реши само с логически формули съобразени с примерите!? Би трябвало тези задачи да отговарят само на един шаблон (както е било винаги до сега) Не е ли редно когато входа е 5,7 и 9 (от примерите) тялото е съответно 1,2 и 3 реда => при вход 11, 13 ...... тялото да продължи пропорционално 4, 5 ......!? Даже визуално Батман изглежда по-добре с тази логика! :)
Според мен нулевите тестове трябваше да са с 5,7 и 13 (примерно), за да се насочим към нещо подобно. МОЖЕ ПРОБЛЕМА ДА Е В МОЯТА ГЛАВА все пак. 

от rado84 (216 точки)


1
Според мен имаше зависимост със символа - #, $ и %. Поредни са в ASCII таблицата. Не можах да си оправя опашката, така че нямаше как да разбера дали е така.


1
Всичко опира до това как извеждаш 1,2 и 3 от 5, 7 и 9. Проблемът е, че има повече от един начин. Тези, които бяха изпорзвани за решението са саъответно S/3  и S/2-1.  Още по-големият проблем е, че има и други.

от STzvetkov (1330 точки)



0

Аз не бях на изпит, но днес я разцъках задачката.

http://pastebin.com/9CpcrGWm

Ето и моето решение 100/100 точки е.


от rossi.bundeva (1059 точки)