Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/37: Рейтинг темы: голосов - 37, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 13.02.2022
Сообщений: 11

Задача "Старик и Рыба"

03.03.2022, 23:52. Показов 9210. Ответов 7

Студворк — интернет-сервис помощи студентам
Приветствую, решал задачу, вроде всё верно, проходит тесты, но на 10 спотыкается, помогите пожалуйста найти ошибку)

Условие:

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

Проверьте, выполняется ли это условие в данной рыбалке.

Формат ввода:
Вводятся названия рыб, пока не будет введена пустая строка.

Формат вывода:
Если при сортировке названий по длине и по алфавиту получается одна и та же последовательность, выведите YES, если не получается, выведите название первой рыбы (сначала по алфавиту, затем по длине), нарушающей этот порядок.

В задаче нельзя использовать стандартную сортировку!


Ввод 1:
halibut
asp
sheatfish
carp
mackerel

Вывод 1:
YES


Ввод 2:
salmon
skate
zander
tuna
shark

Вывод 2
salmon tuna


Ввод 10 (Где и происходит ошибка):
shark
danio
bleak

Вывод 10:
bleak shark (А у меня выводит YES)


Мой код:

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
fish = []
a = input()
while a != "":
    fish.append(a)
    a = input()
fish_al = []
fish_le = []
 
for i in range(len(fish) - 1):
    for j in range(len(fish) - i - 1):
        if fish[j] > fish[j + 1]:
            fish[j], fish[j + 1] = fish[j + 1], fish[j]
fish_al = fish
fish_al = tuple(fish_al)
 
for i in range(len(fish) - 1):
    for j in range(len(fish) - i - 1):
        if len(fish[j]) > len(fish[j + 1]):
            fish[j], fish[j + 1] = fish[j + 1], fish[j]
fish_le = fish
fish_le = tuple(fish_le)
out = 'YES'
 
for al, le in zip(fish_al, fish_le):
    if al != le:
        out = al + ' ' + le
        break
 
print(out)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2022, 23:52
Ответы с готовыми решениями:

Старик и рыба (кортежи)
Старик уже много лет ловит рыбу и заметил, что рыбалка будет удачной, если из названий выловленных рыб, не учитывая повторений, можно...

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

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

7
 Аватар для GorodetskiyKP
139 / 97 / 48
Регистрация: 22.10.2012
Сообщений: 234
04.03.2022, 00:15
Лучший ответ Сообщение было отмечено noobaster как решение

Решение

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
# fish = []
# a = input()
# while a != "":
#     fish.append(a)
#     a = input()
# fish_al = []
# fish_le = []
 
fish = ['shark', 'danio', 'bleak']
fish_al = fish[:]
fish_le = fish[:]
 
for i in range(len(fish_al) - 1):
    for j in range(len(fish_al) - i - 1):
        if fish_al[j] > fish_al[j + 1]:
            fish_al[j], fish_al[j + 1] = fish_al[j + 1], fish_al[j]
# fish_al = fish
# fish_al = tuple(fish_al)
 
for i in range(len(fish_le) - 1):
    for j in range(len(fish_le) - i - 1):
        if len(fish_le[j]) > len(fish_le[j + 1]):
            fish_le[j], fish_le[j + 1] = fish_le[j + 1], fish_le[j]
# fish_le = fish
# fish_le = tuple(fish_le)
out = 'YES'
 
for al, le in zip(fish_al, fish_le):
    if al != le:
        out = al + ' ' + le
        break
 
print(out)
Добавлено через 2 минуты
Ошибка в том, что ты сортируешь список fish по алфавиту, а потом уже отсортированный список - по длинам. У всех элементов одинаковая длина, поэтому результаты будут одинаковые.
В стр. 10, 11 создал копии первоначального списка и применил уже к ним разные сортировки.
Стр. 6, 7 можно удалять.
В преобразовании в кортежи тоже смыла нет.. стр. 17, 18, 24, 25 можно удалять.
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
04.03.2022, 09:24
Python
1
2
3
4
5
6
7
8
9
10
11
fish_list = list( iter( input, '' ) )
A = fish_list[:]
L = fish_list[:]
A.sort()
L.sort( key=len )
for x, y in zip(A, L):
    if x != y:
        print(x, y)
        break
else:
    print('YES')
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
04.03.2022, 09:26
idealist,
Цитата Сообщение от noobaster Посмотреть сообщение
В задаче нельзя использовать стандартную сортировку!
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
04.03.2022, 10:30
Цитата Сообщение от eaa Посмотреть сообщение
В задаче нельзя использовать стандартную сортировку!
А, пардон, что-то не обратил внимания.
0
1 / 1 / 0
Регистрация: 17.07.2023
Сообщений: 36
21.07.2023, 13:21
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
a = []
b = []
while True:
    s = input()
    if s == '':
        break
    else: 
        a.append(s)
        b.append(s)
for i in range(len(a)):
    for j in range(len(a)):
        if a[i] < a[j]:
            buf = a[i]
            a[i] = a[j]
            a[j] = buf
for i in range(len(a)):
    for j in range(len(a)):
        if len(b[i]) < len(b[j]):
            b[i], b[j] = b[j], b[i]
            
if a == b:
    print('YES')
else:
    if a[0] != b[0]:
        print(a[0], b[0])
    else:
        print(a[1], b[1])
У меня на 12 тесте выдает ошибку, должен YES вывести при вводе текста: pikeperch
lancet
bream
minnow
guppy
navaga
В чем может быть ошибка?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
21.07.2023, 15:21
monc63, а зачем вы сначала вставляете беспорядочно, а потом все это сортируете, можно же сразу при вставках сохранять список отсортированным, я, кстати, в предыдущей подобной теме, где вы опубликовали свое решение, тоже привел свое с таким же алгоритмом.
Здесь сортировка предполагается стабильная, т.е. для равных значений исходный порядок должен сохраняться. Чтобы сделать ее таковой можно составлять кортеж из рыбы и ее порядкового номера во вводимой последовательности.
Мой код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alph_arr = []
len_arr = []
c = 0
while s := (input('->')):
    c += 1
    t = s, c
    i_a = 0
    while alph_arr and i_a < len(alph_arr) and t > alph_arr[i_a]:
        i_a += 1
    alph_arr.insert(i_a, t)
    i_len = 0
    while len_arr and i_len < len(len_arr) and t != min(len_arr[i_len], t, key=lambda x: (len(x[0]), x[1])):
        i_len += 1
    len_arr.insert(i_len, t)
for i in range(c):
    if alph_arr[i] != len_arr[i]:
        print(alph_arr[i][0], len_arr[i][0])
        break
else:
    print('YES')
1
1 / 1 / 0
Регистрация: 17.07.2023
Сообщений: 36
21.07.2023, 15:31
Я пока изучаю, много не понятно, по этому пишу код по старинке. Мне проще сначала создать список(массив), проверить его заполнение и если все верно, уже дальше с ним работать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2023, 15:31
Помогаю со студенческими работами здесь

Старик изучает РНР, чтобы работать веб-програмистом
Уважаемые участники форума, программисты! Мне 37 лет, опыт работы программиста нет, в этой сфере вообще не работал. Но последнее время стал...

Старик Хоттабыч, хочу, что бы результат возвращаемый функцией не стакался...
Доброго времени суток, уважаемые форумчане. У меня такая проблемка. Возвращаемый функцией результат, а это у меня определенный элемент...

Рыба
Pascal ABC :нужно нарисовать рыбу. помогите кто сможет, а то у меня фантазии мало (получаться какой-то урод)

Рыба в аквариуме
Помогите нарисовать рыбу в аквариуме, которая плывет

Рыба в море
Вместо картинки нужно самому нарисовать фон морского дна, пара камней, водоросли,песок. Сделайте пжunit Unit1; interface uses ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru