Предизвикателства

  1. Здравейте! @Виктор или @Георги, виждате ли кода от решението на първото предизвикателство, защото няколко пъти натиснах 'Изпрати' и нищо не се променя, като ми дава възможност да продължавам да изпращам същия код? Очаквах да стане както при домашното и да виждам коментари. Благодаря предварително!

  2. @Гергана - да, виждаме всички предадени решения. Би трябвало при предаване да видите следното:

    Реално кодът ти "живее" във формата за предаване на решения и всяко обновяване става негова последна версия.
    Разбирам откъде идва объркването - няма я визуализацията като при домашните, няма version history, няма възможност за коментари.

    За дребните задачки в предизвикателствата би следвало да е окей, но можем да обмислим варианта да ги направим по начин сходен на домашните за в бъдеще. :)

    В този ред на мисли

    Свободно можете да ползвате темата за въпроси по настоящото и бъдещи предизвикателства (ако видим, че има много въпроси, може да правим отделни теми, но засега нека ползваме тази.

    Тестовете за предизвикателствата също носят бонуси ако са добре написани. ;)

  3. Също за третото предизвикателство, при колизия като е написано "няма значение кое ще се върне първо", това означава ли че трябва да върнем всички стойности, които match-не или само някоя?

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

    За сметка на това, всеки, който е предал решение (щях да кажа "читаво", но всички сте се постарали, така че всички са читави) - печели една точка.

    За тези, на които им е любопитно що за гадни тестове сме написали за това предизвикателство:

    import unittest
    
    
    from solution import find_dirty_words
    
    
    class TestDirtyWords(unittest.TestCase):
    
        def assert_equal_dirty_info(self, dirty_info, expected):
            for key, value in dirty_info.items():
                self.assertCountEqual(value, expected[key])
    
        def test_dirty_only(self):
            text = "And I mean to hear ye groan like that again. And to moan and sob, even though you dinna wish to, for ye canna help it. I mean to make you sigh as though your heart would break, and scream with the wanting, and at last to cry out in my arms, and I shall know that I’ve served ye well." # Diana Gabaldon - Outlander
            dirty_words = ['groan', 'moan', 'sigh', 'scream', 'cry']
            expected = {'dirty_words': dirty_words,
                        'censored_dirty_words': [],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_censored_only(self):
            text = "To a man like that, for whom you have feelings like that, you can say all sorts of things, 'I’m s****ed' being the mildest of them. Words she would never have used, before. ***dal words. Sometimes she can’t believe what c*m*s out of her mouth; not to mention what goes in** it." # Margaret Atwood - The Heart Goes Last
            dirty_words = ['starved', 'Vandal', 'comes', 'into']
            expected = {'dirty_words': [],
                        'censored_dirty_words': ['s****ed', '***dal', 'c*m*s', 'in**'],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_allowed_only(self):
            text = "'I love the smell of you,' he said. 'I love your red hair. I love your mouth, and the way you kiss me. I love your smile. I love your teats.' He kissed them, one and then the other. 'I love your skinny legs, and what's between them.' He knelt to kiss her there, lightly on her [mound] at first, but Ygritte moved her legs apart a little, and he saw the (pink) inside and kissed that as well, and (tasted) her." # G. R. R. Martin - A Storm of Swords
            dirty_words = ['teats', 'mound', 'pink', 'tasted']
            expected = {'dirty_words': [],
                        'censored_dirty_words': [],
                        'allowed_dirty_words': dirty_words}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_dirty_in_other_words(self):
            text = "Sometimes Gen will stop his memory there. Her skin, the night, the grass, to be outside and then to be inside Carmen. He doesn’t know to want for more because nothing in his life has been as much as this." # Ann Patchett - Bel Canto
            dirty_words = ['ass', 'side', 'men', 'not']
            expected = {'dirty_words': [],
                        'censored_dirty_words': [],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_dirty_before_non_terminating_punctuation(self):
            text = "Eat me, drink me; thirsty, cankered, I go back and back to him to have his fingers strip the tattered skin away and clothe me in his dress of water, this garment that drenches me, its slithering odour, its capacity for drowning." # Angela Carter - The Bloody Chamber and Other Stories
            dirty_words = ['me', 'thirsty', 'cankered']
            expected = {'dirty_words': ['me'] * 3 + dirty_words,
                        'censored_dirty_words': [],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
    
        def test_dirty_with_curly_brackets(self):
            text = "I want you {splayed} out on the table like my own personal {feast}." # Sarah J. Maas - A Court of Mist and Fury
            dirty_words = ['splayed', 'feast']
            expected = {'dirty_words': dirty_words,
                        'censored_dirty_words': [],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_censored_within_brackets_or_punctuation(self):
            text = "I crave your mou**, your voice, your h*ir. Silent and [**arving], I (p*owl) through the streets." # Pablo Neruda - Sonnet XI
            dirty_words = ['hair', 'mouth', 'starving', 'prowl']
            expected = {'dirty_words': [],
                        'censored_dirty_words': ['mou**', 'h*ir', '**arving', 'p*owl'],
                        'allowed_dirty_words': []}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
        def test_dirty_everything(self):
            text = '''
    Хайде сега всички да си вземат кърпите и хавлиите,
    защото ще ги водиме на какво?
    - На баня!
    Ох, баня, ох, кеф. Селската баня - (голям) кеф.
    
    Ето го и попа - сапунисва топа...
    Ох, баня, ох, кеф, ша ти го изтъркам за някой лев.
    Ето го и кмета - сапунисва чепа...
    Ето я кметицата - сапунисва ц*цата...
    Ох, баня. Ох кеф. Ша ти я изтъркам за някой лев.''' # Галин - Голям Кеф
            dirty_words = ['цицата', 'топа', 'чепа', 'голям', 'изтъркам']
            expected = {'dirty_words': ['изтъркам', 'изтъркам'],
                        'censored_dirty_words': ['ц*цата'],
                        'allowed_dirty_words': ['топа', 'чепа', 'голям']}
            self.assert_equal_dirty_info(find_dirty_words(text, dirty_words), expected)
    
    
    if __name__ == "__main__":
        unittest.main()
    
  5. За предизвикателство 5, ще си позволя да питам точно за това, което не трябва да питам (според забележките :smile:)...

    В секция Забележки, това, което разбирам е, че ако започнем с дюнера в посочения там речник, не стигаме до валидна комбинация. Но:

    • ред "Дюнера тиган" би имал 5 срички, ако считаме и 'Ю' за гласна
    • ред "Дюнера тиган има" би имал 7 срички, ако считаме и 'Ю' за гласна
    • ред "Дюнера тиган има е" би имал 7, ако не считаме 'Ю' за гласна

    т.е. и в двата случая за 'Ю' има валидна комбинация.

    В останалите примери 'Я' е считана за гласна - next(haiku_writer) # Мъгла пада някъде -> 7 реда (предполагам че тук се има предвид 7 срички, а не реда).

    Така че последно - приемаме ли 'Ю' и 'Я' за гласни според нашите правила за формиране на сричка или аз не съм разбрал правилно условието? :laughing:
    И още нещо - може ли да имаме ред със само една дума, стига думата да е с точно толкова срички колкото очакваме на този ред?

  6. @Александър - разбирам откъде идва объркването (най-вече от грешния пример :smile:). За мен "Ю" и "Я" имплицитно са гласни, коментарът беше по-скоро за да насочи към това, че е очевидно (ерго и примерът с думата "дюля", която очевидно има гласни"). :smile:
    Формално гласните звуци са: А, Е, И, О, У, Ъ, но Ю и Я са комбинация от гласен звук и мека съгласна, така че що се отнася до сричкообразуването - те са гласни.

    Мерси за коментара, ще оправим примера.

    Що се отнася до това дали може да има сама дума на ред - да, напълно валиден хайку ред е. :)

    @Надежда - всичко е произволно, да (но съобразено с речника, все пак той указва взаимовръзките). С други думи неизбежно имаме употреба на модула random. :)

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