Какъв е pattern-a в Malko kote


0

Здравейте колеги,

Дали някой би имал желание да сподели, каква беше логиката зад pattern-а в тази задача? Към 2 часа я мислих, измислих някаква, в която се използваше Math.Ceiling и която горе долу се получаваше до опашката(може би и след това, времето свърши). Сигурен съм че е имало и далеч по-лесен начин, който ми е убегнал. Това, което най-много ме бъгна е как се променя позицията на началото на опашката - в примера с 10 беше на средата, в последствие се изместваше след средата. Ще се радвам да споделите идеи по решението.

Мерси.




Отговори



1
според мен логиката беше че всички променливи елементи в котето се увеличаваха с 1 при увеличаване на височината с 4 и аз сложих една променлива var koeficent= (koteHeight - 10)/ 4; с която увеличвах стартовата котка

от shtilyanov (72 точки)


1

Споделям ти моето решение , което е с разни измислени формули и не гарантирам, че е най-смисленото, но пък е 100/100 :)

http://pastebin.com/8EcEgsJb


от jtatanasov (116 точки)


0
Изобщо не се сетих да използвам new string. Мерси за решението :) Само не разбирам защо в някои от for циклите е row<4-1 вместо row<3 ;д

от Teodor_Peev (70 точки)

0

row < / 4 - 1 , a не

row < 4 - 1


от jtatanasov (116 точки)


0

логиката е че главата и врата на koteto са равни по височина винаги, следващата част е с едно по-голяма, следващата с две по-голяма от предната. и като получиш инпута, махаш тея магически числа и делиш, за да намериш размера на главата и от там на всичко останало.

мало




0

Моето решение с по-малко от 40 реда:

http://pastebin.com/wq8G4Tz4

Отне ми около половин час да открия зависимостите в размерите на котката и още около час да открия връзката им с входните данни. След много писане на размерите в Notepad ми просветна, че за всяко увеличение на входа с 4 котката се разширява с 1.

Все пак трябваше да помогна на адаша :)




0
Аз си направих променлива step, която се увеличаваше с 1 на всеки +4 над 10 в размера. Влизаше в увеличението на главата, врата, опашката и прочее. Улесни ми живота неимоверно, но пак го гласих 3 часа тъпото коте. Ще си платиш за това, Божинооов! *размахва юмрук във въздуха*



0

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

namespace Task4 { using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; public class MalkoKote { const char SPACE = ' '; public static void Main() { int size = int.Parse(Console.ReadLine()); string symbol = Console.ReadLine(); int n = size - 2; int headH = (size - 6) / 4; int neckH = headH; int upBodyH = headH + 1; int downBodyH = headH + 3; int downBodyW = downBodyH + 1; int upBodyW = downBodyW - 2; int headW = upBodyW; int neckW = headW - 2; //ushi for (int i = 0; i < headW + 2; i++) { if (i == 1 || i == headW) { Console.Write(symbol); } else { Console.Write(SPACE); } } Console.WriteLine(); // head for (int i = 0; i < headH; i++) { for (int j = 0; j < headW; j++) { if (j == 0) { Console.Write(SPACE); } Console.Write(symbol); } Console.WriteLine(); } //neck for (int i = 0; i < neckH; i++) { for (int j = 0; j < headW; j++) { if (j < 2 || j > neckW + 1) { Console.Write(SPACE); } else { Console.Write(symbol); } } Console.WriteLine(); } // up body for (int i = 0; i < upBodyH - 1; i++) { for (int j = 0; j < upBodyW + 1; j++) { if (j == 0) { Console.Write(SPACE); } else { Console.Write(symbol); } } Console.WriteLine(); } //upbody end for (int i = 0; i < (downBodyW + headW + 1); i++) { if (i == 0 || i == downBodyW - 1 || i == downBodyW || i == downBodyW + 1) { Console.Write(SPACE); } else { Console.Write(symbol); } } Console.WriteLine(); //down body for (int i = -1; i < downBodyH; i++) { if (i == downBodyH - 2) { for (int j = 0; j < downBodyW + 3; j++) { if (j == downBodyW) { Console.Write(SPACE); } else { Console.Write(symbol); } } } else if (i == downBodyH - 1) { for (int j = 0; j < downBodyW + 2; j++) { if (j == 0) { Console.Write(SPACE); } else { Console.Write(symbol); } } } else { for (int j = 0; j < downBodyW + 3; j++) { if (j == downBodyW || j == downBodyW + 1) { Console.Write(SPACE); } else { Console.Write(symbol); } } } Console.WriteLine(); } Console.WriteLine(); }

И аз не мисля, че е най-смисленото, но като за изпит става :)


от niya.omerska (262 точки)


0

Ето и моето решение, горе долу подобно на коментираното до момента :)

using System;


namespace Problem04
{
    class Program
    {
        static void Main()
        {
            int s = int.Parse(Console.ReadLine());
            string c = Console.ReadLine();
            // ears
            Console.Write(' ' + c + new string(' ', 1 + ((s - 10) / 4)) + c + new string(' ', 9 + (s - 10) / 2));
            Console.WriteLine();
            //head
            for (int i=0; i<=(s-10)/4;i++)
            {
                Console.Write(' ' + new string(Convert.ToChar(c), 3 + ((s - 10) / 4)) + new string(' ', s/2));
                Console.WriteLine();
            }
            //neck
            for (int i = 0; i<=(s-10)/4 ; i++)
            {
                Console.Write("  " + new string(Convert.ToChar(c), 1 + ((s - 10) / 4)) + new string(' ', s / 2+1));
                Console.WriteLine();
            }
            //body part 1/5
            for (int i = 0; i <= (s - 10) / 4; i++)
            {
                Console.Write(' ' + new string(Convert.ToChar(c), 3 + ((s - 10) / 4)) + new string(' ', s/2));
                Console.WriteLine();
            }
            //body part 2/5 + tail
            Console.Write(' ' + new string(Convert.ToChar(c), 3 + ((s - 10) / 4)) + new string(' ', 3)+ new string(Convert .ToChar (c), 2 + ((s - 10) / 4)));
            Console.WriteLine();
            //body part 3/5
            for (int i = 0; i < (3 + (s - 10) / 4); i++)
            {
                Console.Write(new string(Convert.ToChar(c), 5 + (s - 10) / 4) +"  " +c+new string (' ',1+(s-10)/2));
                Console.WriteLine();
            }
            //body part 4/5
            Console.Write(new string(Convert.ToChar(c), 5 + (s - 10) / 4) + " " + c +c+ new string(' ', 1 + (s - 10) / 2));
            Console.WriteLine();
            //body part 5/5
            Console.Write(' ' + new string(Convert.ToChar(c), 6+(s-10)/4) + new string(' ', 2 + (s - 10) / 2));
            Console.WriteLine();

        }
    }
}




0

И на мен ми изяде най-много време "малкото" коте. В началото ме бъгна това, че по условие имаш вход четни числа, а пък примерите бяха четни, но през четири.

Бая време се чудих какъв ще е патерна за 12, 16, 20 ...... Накрая ми писна и го направих за стъпка 4 и то взе, че даде 100/100. :) "малко" коте


от martinboykov (1112 точки)


0

Големината на котето расте с всеки 4 на input-a. Най-общо казано:
Означавам разстоянието между учите с X. Според мен X=(input -6)/4 -> това е въпрос на спор естествено, защото не с всяка промяна на input-a котето расте. Но като цяло става въпрос за 1 число X. 
Разстоянието между учите е Х.
Главата е висока Х и широка Х+2.
Вратът е висок и широк Х.
Следващата част е висока Х+1 и широка Х+2.
Следващата част е висока Х+2 и вирока Х+4.
Най-долната част е само 1 висока и дълга Х+5.
Допълнителната част на опашката е дълга Х също. 
Разстоянието между тялото и опашката е еднакво винаги и може да го преброиш.
Опашката расте на височина също - според големината на тялото, но е винаги от последния ред на тялото до последния ред на ... последната част от тялото.  Ето моя код ако желаеш да погледнеш:

using System; class MalkoKote { static void Main() { int num = int.Parse(Console.ReadLine()); char s = Convert.ToChar(Console.ReadLine()); int x = (num - 6) / 4; //line 1 Console.Write(" "); Console.Write(s); Console.Write(new string(' ', x)); Console.Write(s); Console.Write(new string(' ', 4 + x)); Console.WriteLine(); //head for (int i = 0; i < x; i++) { Console.Write(" "); Console.Write(new string(s, x + 2)); Console.Write(new string(' ', 4 + x)); Console.WriteLine(); } //neck for (int i = 0; i < x; i++) { Console.Write(new string(' ', 2)); Console.Write(new string(s, x)); Console.Write(new string(' ', 5 + x)); Console.WriteLine(); } //body for (int i = 0; i < x + 1; i++) { Console.Write(" "); Console.Write(new string(s, x + 2)); if (i == x) { Console.Write(new string(' ', 3)); Console.Write(new string(s, 1 + x)); } else { Console.Write(new string(' ', 4 + x)); } Console.WriteLine(); } //ass for (int i = 0; i < x + 3; i++) { Console.Write(new string(s, x + 4)); if (i == x + 2) { Console.Write(new string(' ', 1)); Console.Write(new string(s, 2)); Console.Write(new string(' ', x)); } else { Console.Write(new string(' ', 2)); Console.Write(new string(s, 1)); Console.Write(new string(' ', x)); } Console.WriteLine(); } //legs Console.Write(" "); Console.Write(new string(s, x + 5)); Console.Write(new string(' ', x + 1)); Console.WriteLine(); } }


от StoikoNeykov (2621 точки)


1

Здравей,

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

Ето какво сътворих на изпита:

using System;

class MalkoKote
{
    static void Main(string[] args)
    {
        int size = int.Parse(Console.ReadLine());
        char character = char.Parse(Console.ReadLine());
        int counter = 1;

        for (int i = 10; i < size; i += 4)
        {
            counter++;
        }

        // ushaci
        Console.Write(' ');
        Console.Write(new string(character, 1));
        Console.Write(new string(' ', counter));
        Console.Write(new string(character, 1));
        Console.Write(' ');
        Console.WriteLine();

        // glava
        for (int i = 0; i < counter; i++)
        {
            Console.Write(' ');
            Console.Write(new string(character, counter + 2));
            Console.Write(' ');
            Console.WriteLine();
        }

        // vrat
        for (int i = 0; i < counter; i++)
        {
            Console.Write(' ');
            Console.Write(' ');
            Console.Write(new string(character, counter));
            Console.Write(' ');
            Console.Write(' ');
            Console.WriteLine();
        }

        // body 1
        for (int i = 0; i < counter; i++)
        {
            Console.Write(' ');
            Console.Write(new string(character, counter + 2));
            Console.Write(' ');
            Console.WriteLine();
        }

        // body 2 with tail
        Console.Write(' ');
        Console.Write(new string(character, counter + 2));
        Console.Write(' ');
        Console.Write(' ');
        Console.Write(' ');
        Console.Write(new string(character, counter + 1));

    
        Console.WriteLine();

        // body 3
        for (int i = 0; i < counter + 2; i++)
        {
            Console.Write(new string(character, counter + 4));
            Console.Write(' ');
            Console.Write(' ');
            Console.Write(new string(character, 1));

            Console.WriteLine();

        }
        Console.Write(new string(character, counter + 4));
        Console.Write(' ');
        Console.Write(new string(character, 2));
        Console.WriteLine();

        // bottom
        Console.Write(' ');
        Console.Write(new string(character, counter + 5));

  
    }
}