Втора задача

  1. ...вече е публикувана тук и темата е Game of Life.

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

    Game of Life е класически проблем в компютърните науки. Това обаче не означава, че имате право да споделяте решенията си по какъвто и да е начин.

    Успех!

  2. Днес написах набързо нещо, но тестовете не минават. Може да не разбирам условието правилно, но: def test_step_board(self): for el in BOARD_TEST_DATA: orig, expected = el board = self.decodeboard(orig) #step_board(board) print_board(board) print_board(self.decodeboard(expected)) #self.assertEqual(self.encodeboard(board), expected)

    board: ==================================================| | X XX X X X | X X X X X X X X | X X X | X X | X X X X | X X X X XX X | X X X X X X X X | X X X XX X X X XX X | X XX X X X X X X | X X X X X | X X XX X | X X X X X XX XX XX | X X XX X X XXX | X X X XX X XX | X XX XX X XXX X X XX | X X XX XX X X XXX | X X X X X X X | XX X X X X X X X X X XX | X X X X X | X X X X XXX X | X XX XX X X X X X | X X X X X X X | X X X X X | X X X X X X | XX XXX X X X X X X X X | X X X X X X X XXX X | XX X XXX XX | X XX X X X X X X | XX X X XX X | X X X X X X X X X | X X X X X | X X X | X XX XX XX X X | X X X X X | X X X X XX X X | X X X X X | X X XX X XXX X X X | X X XXX | X XX X X XX X X X XX | X X X X X X X X | X X X X X X | X XX X X X X XX X | X X XX XX | X X X | X X X X X X XXX | X X X X XX | XX X X X X | X X X X X X X X X | | ==================================================|

    expected: ==================================================| | X | XX X | | X | X XX | X XX | XXX XXX | XX X XXX X XXXXXX | XX XX XXX XX XX | XXX XXXX | X XX | X XX X | XXX XX X X XX X | X XX X XXX X X XXX | XX X X XX X | XXX XX XX X X X | X XX XX X XX XX | XX XXX X X | X X X XX | X X XX | XX XX X | XX XX X X X | X | XX X XXX X X | XXX XXX X XX X XX X | X XXX X XX X X X | XX XX XXX X X X | XXX X X XXX | XXXX X XXX | XX XX X X | X | | XX XX | XX XXX XX X | X XX | X XX X X | X X X X | XX X XX | XX XXX XX XX | XXX XX XXX XXX X | XXX XXX X X X | XXX X X XXXX | X XXX | X XXX X | X XX X | XX XXX | X X | X X X X X X X X X | | ==================================================|

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

  3. Когато изпълня solution.py за Game of Life започва да ми се изпълнява таблицата, но накрая не ми се получава примерно

    X XXX X | X XX X | XX XXX | X X | X X X X X X X X X | | ==================================================| , а ми излиза

    0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

    Мисля, че не би трябвало така да става или се бъркам? :)

  4. Не сте спазили PEP 8 в solution.py. Имате:
    - на 12-ти ред идентация със 7 спейса вместо 8
    - ред по дълъг от 79 символа
    - слагали сте спейсове около знака "=", когато се използва за "default parameter value" във функция. И в create_board и в print_board.

    Въпросът ми е да ги оставим ли задади "по-добра четимост на кода" по ваше усмотрение или ще проверявате стриктно за PEP 8 и да си ги оправим? Вълнува ме най-вече дългият ред, тъй като другите два са си по PEP 8 и ще си ги оправя, но е кофти да се прекъсне фор-а по средата и предполагам сте го оставили умишлено така. :)

  5. Здравейте аз искама да попитам:

    1. Рамката на дъската (най-външните редове и колони) трябва ли да се запазва на всяка стъпка т.е. играе ли роля при прилагането на правилата?

    2. Имали приоритет при прилагането на правилата ?

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

    Бих помолил и за един илюстриран пример ако е възможно (дъска 4х4 и прилагането на правилата в 3 стъпки). Защото разглеждайки правилата в интернет не ми се изясниха много добре.

    Съжелявам ако въпросите са тъпи но наистина се обърках като видях примера в Wikipedia за "Examples of patterns -> Oscillators -> Blinker (period 2)" http://upload.wikimedia.org/wikipedia/commons/9/95/Game_of_life_blinker.gif По-точно немога да си обясна защо клетка[2][1] на първа стъпка е жива а на втора е мъртва(вероятно защото има повече от 3 живи съседа) но ако е така не трябва ли и клетка[0][1] също да е мъртва на втора стъпка по същата причина !?

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

    3) Старата матрица не се променя. Обхождането става само по нея и резултата се помни в нова матрица.

    2) Това ти дава отговор и на втори въпрос. Няма значение приоритета в прилагането на правилата, резултата винаги е един и същ.

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

  7. не променяме правилата. Само за улеснение има мъртва рамка.

    матрицата:

    00000 -> горна рамка (00000)
    00100 -> рамка + (м, 2) + (ж, 1) + (м, 2) + рамка (00000)
    00100 -> рамка + (м, 3) + (ж, 2) + (м, 3) + рамка (01110)
    00100 -> рамка + (м, 2) + (ж, 1) + (м, 2) + рамка (00000)
    00000 -> долна рамка (00000)

    (м/ж, число) = е следващо състояние при:
    м/ж = текущо състояние, число = текущ брой съседи.

    така съответно:
    (м, 2) е мъртво с два съседа -> остава мъртво(0)
    (м, 3) е мъртво с три съседа -> съживява се(1)
    (ж, 1) е живо с един съсед -> умира(0)
    (ж, 2) е живо с два съседа -> остава живо(1)

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

    От друга страна имам един въпрос:
    По примерния код може ли да се модифицират части или единствено ни е позволено да напишем тялото на step_board и да добавим съответните помощни методи и внасяния, които използваме ?

    П.П. Няма да е лошо да имаме възможност да коментираме решенията си преди да бъдат направени публични. Или по-точно да има сравнително лесен достъп до страницата с коментарите.

  8. И на мен ми се струват грешни тестовете или по-скоро encode-натите кисели краставички в BOARD_TEST_DATA. Утре ако ми остане време ще напиша едни тестове, да видим дали проблема е в нас или в sample_test.py.

  9. ако някой има увереност, че си е написал правилно програмата може да опита с този тест: https://github.com/Ethior/PythonChallange/blob/master/sample_testV2Maybe.py

    просто хванах и заместих очакваните стойности с тези, които аз получавам, което означава, че ако не ми е 100% вярно и теста не е, но ще се радвам да кажате, ако на някого вземе да му пасне :D

  10. ами това си е всъщност техния тест с променени "очаквани състояния". Не знам каква е причината да е неверен, предполагам, че може да са писани на предишна версия и pickle-а да не работи коректно или някаква техническа грешка да е... Все пак поправката не е официална

  11. Молба към организаторите:

    Може ли вместо 1 седмица срок за правене на домашното, и след това 2 седмици дупка до следващото, да направите срока за предаване три седмици, и като изтече, веднага да пускате следващото домашно? Така ще можем да си преценяваме свободното време, и няма да скучаем 2 седмици, а след това да се чудим ако точно в едната седмица която сте дали, се случи да имаме някакъв ангажимент, кога аджаба ще седнем да пишем домашни...

    Или просто да има по-начесто домашни :)

    Благодаря.

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