Шеста задача

  1. Здравейте, искам да сигнализирам за грешен тест (тук може да се поспори за разбирането на условието).

    Става въпрос за def test_ouroboros_death. На 45ти ред има assertRaises(Death), когато в случая коректна програма НЕ трябва да хвърля Death в тази ситуация.

    Визуално може да го тествате с този github gist (при налично решение solution)

    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................##@@............................
    ..................##..............................
    ..................######..........................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    ..................................................
    

    От тук се местим два пъти надолу. Досещате се, че така змията НЯМА да се удари в себе си, понеже местейки се, се мести и опашката и. Тоест това е единственият случай, в който не се хвърля директно смърт, когато клетката не е празна и не е храна. Тоест, ако новите координати на главата на змията съвпадат със старите координати на опашката и, тъй като тя се мести цялата съответно тя няма как да се удари в опашката си. (Получава се, че гони опашката си, но не може да я стигне и да я захапе или да се удари в нея.)

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

    Dog trying to bite his own tail

  2. @Николай:

    • на второ четене няма никакъв смисъл. Ще го махна и тестовете ще бъдат пуснати отново.

    • Постарах се условието да не се интересува много от координати. Именно за това се изискват константи Python.UP, Python.DOWN и т.н. Какво имаш в предвид?

    @Илия:

    Не се бях сетил за този случай. Обаче мисля че много хора ще изгубят точка ако го поправя това.

  3. @Людмил:

    за test_snake_death: вторият питон е с начални координати (5, 8) и после се движи пет пъти нагоре като идеята е да се застъпи с първия създаден питон(така разбирам идеята на теста). Но в декартова координатна система движението нагоре би увеличило y-координатата на всяка стъпка с 1 и няма да се стигне до колизия между питоните, нито до излизане от света.

    @Илия: Браво, че спомена за теста :wink:

  4. Има проблем и с теста test_growth: имаме свят 20x20, питон на координати (10, 10), дължина 3, гледа наляво и храна на координати (8, 10).

    Питонът се движи веднъж на ляво и се иска главата му да е на координати (8, 10) и дължината да му е 4, което се вижда, че няма как да стане.

    Edit: Моя грешка. Всъщност се движи 2 пъти наляво и проблемът пак е в координатната система.

Трябва да сте влезли в системата, за да може да отговаряте на теми.