Второ домашно

  1. Ахой, колеги.

    Време е отново да ни впечатлите с решенията си. Срокът ви е до 03.11 18:00.

    Примерен тест можете да намерите >>>ТОЧНО ЕТО ТУК<<<.
    Ако имате съмнения относно предаването на задачи или предишното е било неуспешно - как (не) се предават задачи.

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

  2. Мисля, че има грешка в примера с превъртането на клавиатурата на телефона:

    Ако случайно допуснем грешка и натиснем повече от желания брой пъти, можем просто да продължим да натискаме бутона, а когато стигнем до последната буква в бутона, селекцията ще започне от начало. Например, 5 натискания на бутона "5" ще значи буквата "К" (един път завъртаме през всички три букви и след това се предвиждаме с 2 букви в списъка отначало)."

    Ако разбирам правилно, в този случай ще стигнем до "L" на 4-тото натискане (1 -> '5', 2 -> 'J', 3 -> 'K', 4 -> 'L') и при 5-тото ще получим "J", а не "K".

    P.S. Струва ми се, че и тези 2 примера си противоречат:

    • За да въведем "А", натискаме бутона "2" веднъж.

    • Ако искаме буквата Y, натискаме бутона "9" три пъти.

    Ако стигаме до първата буква при второто натискане, не би ли трябвало да стигнем до "Y" след 4 натискания?

  3. @Цветелина, добър въпрос!

    Тъй като този случай не е дефиниран изрично и може да се интерпретира по два начина, приемаме и двата варианта за валидни решения.

    ПП: Ако питаш мен, бих казал, че това е по-логично, зашото "1" е достатъчен сигнал, за да се приеме timeout и да се въведе нова буква. nums_to_text([2, 2, 1, 2]) # 'BA'

  4. @Боян, както каза и Гергана, но искам да потвърдя - натискане на бутоните никога няма да произведе цифра, а само букви, така че още при първото натискане ще получиш първата буква. При две - втората, и така нататък.

    Цифрите върху клавиатурата са поставени само за да индикират, че това е ключът, който получаваш, но текущата задача не дефинира възможност за въвеждане на цифри.

    ПП: Ако говорим за истинско устройство, обикновено цифрата се получава като резултат след като се изчерпат буквите. Например, за да получиш 5, трябва да натиснеш бутона "5" 4 пъти. Също така задържане на бутона дава резултат цифрата, която е асоциирана с него. НО, както казах, това не е функционалност, която гоним с текущата задача, така че игнорирай въвеждане на цифри.

  5. При въвеждане на 2 последователни нули на nums_to_text()(Тоест nums_to_text([0,0]) трябва да се изведе един интервал или два? Имаме ли изключения за нуличката или пак си е само една колкото и подред да въведем?

  6. @Роберт, и двете интерпретации за валидни.

    @Цветан - [1,-1, 1]. Ако просто върнеш [1, 1], след което подадеш [1, 1] на nums_to_text, би получил 'b', а ти очакваш изходната точка - 'aa'. [Edit]: Както Антоан правилно апострофира, всъщност боутонът трябва да е 2, а не 1. Примерът ми просто визуализира логиката, но реално 1 се игнорира напълно. Т.е. [2,-1, 2]

  7. @Цветан Тошев - би трябвало да ти върне [2, -1, 2] тъй като с тази '-1' сигнализираш, че пак искаш да използваш бутона '2' без да променяш предишното 'а' на 'б'. Още по-хубав пример е да я пробваш с думата 'баба' [2, 2, -1, 2, -1, 2, 2, -1, 2] . Според мен така е правилно, тъй като nums_to_text(nums) би трябвало да е обратна на text_to_nums(text).

  8. https://github.com/HarkoFMI/Introduction-to-programming-with-Python-FMI/blob/main/homework_tests/homework_2/tests.py ето още дузина тестове. Също на въпроса за 45 към 1 или 2 трябва да се закръгли, доколкото съм прочел в условието е написано, че ъглите, които са точно на границата(15, 45, 75 и т.н.) се закръглят надолу тоест 15 -> 0, 45 -> 30, 75 -> 60 и т.н.

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