0 / 0 / 0
Регистрация: 08.08.2019
Сообщений: 5

Secret room

08.08.2019, 10:00. Показов 1481. Ответов 7

Author24 — интернет-сервис помощи студентам
Всем привет!

В свободное время занимаюсь решением задачек на одном ресурсе. Столкнулся с проблемой, что в одном из заданий, не могу пройти проверку. Подозреваю, что ошибка в проверочном модуле ресурса, но возможно у меня просто не хватает опыта понять свою ошибку.

Задание:
На входе ваша функция получит число - общее количество дверей в текущем помещении. Вам нужно будет отсортировать номера дверей в том порядке, в котором эти числа, выраженные словами, идут в алфавитном порядке. А затем вернуть номер позиции, на которой находится последняя дверь (дверь с самым большим номером). Отсчет ведется с 1-й позиции (а не с 0-й). Максимальное количество дверей - 1000. Числа после 100 записываются в формате - 'one hundred twenty nine'. Тысяча - one thousand.

Входные данные: номер двери.

Выходные данные: "правильный" номер двери.

Предусловия:
2 <= количество дверей <= 1000

То что я накодил:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven",
             "eight", "nine"]
SECOND_TEN = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
              "sixteen", "seventeen", "eighteen", "nineteen"]
OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy",
              "eighty", "ninety"]
HUNDRED = "hundred"
 
 
def checkio(number):
    if number<10:
        return FIRST_TEN[number - 1]
    elif number<20:
        return SECOND_TEN[number - 10]
    elif 20 < number < 1000:
        chislo = list(str(number))
        if number<100:
            if chislo[1] == '0':
                return OTHER_TENS[int(chislo[0])-2]
            else:
                return OTHER_TENS[int(chislo[0])-2] + ' ' + FIRST_TEN[int(chislo[1])-1]
        else:
            if chislo[1] == '0':
                if chislo[2] == '0':
                    return FIRST_TEN[int(chislo[0])-1] + ' '+ HUNDRED
                else:
                    return FIRST_TEN[int(chislo[0])-1] + ' '+ HUNDRED + ' ' + FIRST_TEN[int(chislo[2])-1]
            elif chislo[1] == '1':
                return FIRST_TEN[int(chislo[0])-1] + ' ' + HUNDRED + ' ' + SECOND_TEN[int(chislo[2])]
            else:
                if chislo[2] == '0':
                    return FIRST_TEN[int(chislo[0])-1] + ' ' + HUNDRED + ' ' + OTHER_TENS[int(chislo[1])-2]
                else:
                    return FIRST_TEN[int(chislo[0])-1] + ' ' + HUNDRED + ' ' + OTHER_TENS[int(chislo[1])-2] + ' ' + FIRST_TEN[int(chislo[2])-1]
    else:
        return "one thousand"
 
def secret_room(number):
    doors = []
    #replace this for solution
    for i in range(1, (number + 1)):
        doors.append(checkio(i))
    door = doors[-1]
    doors = sorted(doors)
    return doors.index(door) + 1
 
if __name__ == '__main__':
    print("Example:")
    print(secret_room(5))
 
    #These "asserts" using only for self-checking and not necessary for auto-testing
    assert secret_room(5) == 1 #five, four, one, three, two
    assert secret_room(3) == 2 #one, three, two
    assert secret_room(1000) == 551
    print("Coding complete? Click 'Check' to earn cool rewards!")
Тут все отрабатывает правильно. Но на скрытой проверке программа с входным параметром 666 возвращает 404, а ресурс утверждает, что должно быть 403. Помогите разобраться, плиз.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.08.2019, 10:00
Ответы с готовыми решениями:

Secret net
Всем здорово. Столкнулся с такой проблемой: после установки secret net 7.6 при подключении флешки в usb 3.0 вылетает экран смерти с ошибкой...

Информация по Secret net
Заранее извеняюсь если не там написал тему! Необходимо поставить Secret net для защиты инф! Но я краем уха слышал что Secret net защищает...

Servlet secret internal name
Вопросы: 1. В компаниях за разработку и деплоймент отвечают разные люди? 2. Зачем сервлету secret internal name? Не создает ли это...

7
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7360 / 4787 / 1239
Регистрация: 30.03.2015
Сообщений: 13,580
Записей в блоге: 29
08.08.2019, 10:58
Anny27, неслабый метод chekio и по содержанию и по названию (ни о чем не говорит). Я не в плане особой критики, но прочитать и понять все эти вложенные условия, согласись не простое дело, особенно если ты не автор кода. Ошибка где-то есть, но эо надо конкретно вчитаться во все это, я не готов.
Вот мой вариант, код подсократил, указанный тобой тест проходит (по остальным не знаю, может и есть косяки), готов ответить на вопросы
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
DEFAULT = {10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 100: 'one hundred', 1000: 'one thousand'}
 
 
def name_of_number(value: int) -> str:
    if value < 10:
        return FIRST_TEN[value - 1]
    if value in DEFAULT.keys():
        return DEFAULT[value]
    str_val = str(value)
    if value > 100:
        return FIRST_TEN[(value // 100) - 1] + " hundred " + name_of_number(int(str_val[1:]))
    if value < 20:
        return FIRST_TEN[value - 11] + "teen"
    return OTHER_TENS[(value // 10) - 2] + " " + name_of_number(int(str_val[1:]))
 
 
def secret_room(count_of_doors: int) -> int:
    int_doors = [i for i in range(1, count_of_doors + 1)]
    max_number = max(int_doors)
    str_doors = sorted(list(map(name_of_number, int_doors)))
    str_max_number = name_of_number(max_number)
    return str_doors.index(str_max_number) + 1
 
 
assert secret_room(5) == 1  # five, four, one, three, two
assert secret_room(3) == 2  # one, three, two
assert secret_room(1000) == 551
assert secret_room(666) == 403  # как система и говорит
 
assert name_of_number(1) == 'one'
assert name_of_number(3) == 'three'
assert name_of_number(9) == 'nine'
assert name_of_number(1000) == 'one thousand'
assert name_of_number(100) == 'one hundred'
assert name_of_number(10) == 'ten'
assert name_of_number(11) == 'eleven'
assert name_of_number(12) == 'twelve'
assert name_of_number(13) == 'thirteen'
assert name_of_number(101) == 'one hundred one'
assert name_of_number(110) == 'one hundred ten'
assert name_of_number(210) == 'two hundred ten'
assert name_of_number(14) == 'fourteen'
assert name_of_number(216) == 'two hundred sixteen'
assert name_of_number(519) == 'five hundred nineteen'
assert name_of_number(21) == 'twenty one'
assert name_of_number(55) == 'fifty five'
assert name_of_number(99) == 'ninety nine'
1
0 / 0 / 0
Регистрация: 08.08.2019
Сообщений: 5
08.08.2019, 12:06  [ТС]
Спасибо большое за ответ!
Согласен, мой код далек от хорошего, я еще только учусь и во многом полагаюсь на данные и названия, которые предлагает сам ресурс, поэтому зачастую возникает такая неразбериха...

P.s. К сожалению, Ваш код тоже не прошел проверку. Теперь не проходит проверка с входным параметром 999, функция возвращает 382, а система говорит, что должно быть 383.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7360 / 4787 / 1239
Регистрация: 30.03.2015
Сообщений: 13,580
Записей в блоге: 29
08.08.2019, 12:27
Anny27, да, прошляпил вариант с 20,30 и т.п
вот
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
def name_of_number(value: int) -> str:
    if value < 10:
        return FIRST_TEN[value - 1]
    if value in DEFAULT.keys():
        return DEFAULT[value]
    str_val = str(value)
    if value > 100:
        return FIRST_TEN[(value // 100) - 1] + " hundred " + name_of_number(int(str_val[1:]))
    if value < 20:
        return FIRST_TEN[value - 11] + "teen"
    if value % 10 == 0:
        return OTHER_TENS[value // 10 - 2]
    return OTHER_TENS[(value // 10) - 2] + " " + name_of_number(int(str_val[1:]))
 
 
def secret_room(count_of_doors: int) -> int:
    int_doors = [i for i in range(1, count_of_doors + 1)]
    str_doors = sorted(list(map(name_of_number, int_doors)))
    return str_doors.index(name_of_number(count_of_doors)) + 1
 
 
assert secret_room(999) == 383  # как система и говорит
assert secret_room(5) == 1  # five, four, one, three, two
assert secret_room(3) == 2  # one, three, two
assert secret_room(1000) == 551
assert secret_room(666) == 403  # как система и говорит
assert name_of_number(1) == 'one'
assert name_of_number(3) == 'three'
assert name_of_number(9) == 'nine'
assert name_of_number(1000) == 'one thousand'
assert name_of_number(100) == 'one hundred'
assert name_of_number(10) == 'ten'
assert name_of_number(11) == 'eleven'
assert name_of_number(12) == 'twelve'
assert name_of_number(13) == 'thirteen'
assert name_of_number(101) == 'one hundred one'
assert name_of_number(110) == 'one hundred ten'
assert name_of_number(210) == 'two hundred ten'
assert name_of_number(14) == 'fourteen'
assert name_of_number(216) == 'two hundred sixteen'
assert name_of_number(519) == 'five hundred nineteen'
assert name_of_number(21) == 'twenty one'
assert name_of_number(55) == 'fifty five'
assert name_of_number(99) == 'ninety nine'
assert name_of_number(990) == 'nine hundred ninety'
1
0 / 0 / 0
Регистрация: 08.08.2019
Сообщений: 5
08.08.2019, 12:42  [ТС]
Чет я тоже пропустил этот момент, когда код разбирал, отвлекли по работе.

Но, к сожалению, опять не прошел проверку до конца, теперь упал на 753, возвращается 357, правильный результат 359.

P.s. А с виду задание казалось легким...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7360 / 4787 / 1239
Регистрация: 30.03.2015
Сообщений: 13,580
Записей в блоге: 29
08.08.2019, 13:07
Лучший ответ Сообщение было отмечено Anny27 как решение

Решение

Цитата Сообщение от Anny27 Посмотреть сообщение
теперь упал на 753, возвращается 357, правильный результат 359.
да, пишу в перерывах на работе, потому пропускаю порой важные моменты, я упустил верное обосзначение круглых сотен типа 200, 300 и еще неверное формировал eighteen и fifteen (лишнюю букву добавлял), поэтому неверно сортировалось.
Проверяй
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
FIRST_TEN = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
OTHER_TENS = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
DEFAULT = {10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 18: 'eighteen', 15: 'fifteen',
           100: 'one hundred', 1000: 'one thousand'}
 
 
def name_of_number(value: int) -> str:
    if not value:
        return ''
    if value < 10:
        return FIRST_TEN[value - 1]
    if value in DEFAULT.keys():
        return DEFAULT[value]
    str_val = str(value)
    if value > 100:
        if value % 100 == 0:
            return FIRST_TEN[(value // 100) - 1] + " hundred"
        return FIRST_TEN[(value // 100) - 1] + " hundred " + name_of_number(int(str_val[1:]))
    if value < 20:
        return FIRST_TEN[value - 11] + "teen"
    if value % 10 == 0:
        return OTHER_TENS[value // 10 - 2]
    return OTHER_TENS[(value // 10) - 2] + " " + name_of_number(int(str_val[1:]))
 
 
def secret_room(count_of_doors: int) -> int:
    int_doors = [i for i in range(1, count_of_doors + 1)]
    str_doors = sorted(list(map(name_of_number, int_doors)))
    return str_doors.index(name_of_number(count_of_doors)) + 1
 
 
assert secret_room(999) == 383  # как система и говорит
assert secret_room(753) == 359  # как система и говорит
assert secret_room(5) == 1  # five, four, one, three, two
assert secret_room(3) == 2  # one, three, two
assert secret_room(1000) == 551
assert secret_room(666) == 403  # как система и говорит
assert name_of_number(1) == 'one'
assert name_of_number(3) == 'three'
assert name_of_number(9) == 'nine'
assert name_of_number(1000) == 'one thousand'
assert name_of_number(100) == 'one hundred'
assert name_of_number(10) == 'ten'
assert name_of_number(11) == 'eleven'
assert name_of_number(12) == 'twelve'
assert name_of_number(13) == 'thirteen'
assert name_of_number(101) == 'one hundred one'
assert name_of_number(110) == 'one hundred ten'
assert name_of_number(210) == 'two hundred ten'
assert name_of_number(14) == 'fourteen'
assert name_of_number(216) == 'two hundred sixteen'
assert name_of_number(519) == 'five hundred nineteen'
assert name_of_number(21) == 'twenty one'
assert name_of_number(55) == 'fifty five'
assert name_of_number(99) == 'ninety nine'
assert name_of_number(990) == 'nine hundred ninety'
1
0 / 0 / 0
Регистрация: 08.08.2019
Сообщений: 5
08.08.2019, 13:46  [ТС]
Спасибо огромное за помощь. Буду анализировать свои ошибки и в последующем постараюсь писать более понятный код.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7360 / 4787 / 1239
Регистрация: 30.03.2015
Сообщений: 13,580
Записей в блоге: 29
08.08.2019, 13:47
Anny27, если есть вопросы по коду - не стесняйся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2019, 13:47
Помогаю со студенческими работами здесь

Enable secret 5 cisco
Я немного тупонул, и задал enable secret 5 cisco.Как мне теперь войти на этот роутер, т.к. пароль cisco не принимает

Установка SECRET NET 6
Помогите разобраться с установкой Secret net 6/ какие либо инструкции???

Secret Net LSP
Доброго времени суток, товарищи. В руки попал экземпляр Secret Net LSP версии 1.9. Вводные: есть домен на Windows (версия сути не играет,...

Secret Net 6 - проблема
Здравствуйте! В нашей организации возникла проблема при использовании системы Secret Net 6 Сетевая Версия. На одном из наших компьютеров...

session store secret
при генерации session store secret выдает ошибку не могу понять в чем дело, помоги разобраться с ней. C:\Ruby187\redmine&gt;rake...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
Stack, Queue и Hashtable в C#
UnmanagedCoder 14.05.2025
Каждый опытный разработчик наверняка сталкивался с ситуацией, когда невинный на первый взгляд List<T> превращался в узкое горлышко всего приложения. Причина проста: универсальность – это прекрасно,. . .
Как использовать OAuth2 со Spring Security в Java
Javaican 14.05.2025
Протокол OAuth2 часто путают с механизмами аутентификации, хотя по сути это протокол авторизации. Представьте, что вместо передачи ключей от всего дома вашему другу, который пришёл полить цветы, вы. . .
Анализ текста на Python с NLTK и Spacy
AI_Generated 14.05.2025
NLTK, старожил в мире обработки естественного языка на Python, содержит богатейшую коллекцию алгоритмов и готовых моделей. Эта библиотека отлично подходит для образовательных целей и. . .
Реализация DI в PHP
Jason-Webb 13.05.2025
Когда я начинал писать свой первый крупный PHP-проект, моя архитектура напоминала запутаный клубок спагетти. Классы создавали другие классы внутри себя, зависимости жостко прописывались в коде, а о. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru