Loading...

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

Vincent avatar Vincent 11 Точки

02. The Lift - получавам 70 точки

Здравейте,

Ще се радвам ако мога да получа малко помощ за задачата 02. The Lift (https://judge.softuni.org/Contests/Practice/Index/2517#1). Получавама 70 точки и не мога да разбера какво бъркам.

Накратко правя променливи - free_spaces, in_wagon, с if разделям на празни и вагони в които има хора, след това с if  разделям ако чакат да се качат повече от 4 души.

people = int(input())
array_wagons = [int(i) for i in input().split()]
wagon_list = []
in_the_train = 0

MAX_PEOPLE = 4
flag = False

for wagon in array_wagons:
    free_spaces = MAX_PEOPLE - wagon
    in_wagon = MAX_PEOPLE-free_spaces

    if wagon == 0: # Free Wagon
        if people >= 4:
            wagon_list.append(free_spaces)
            people -= free_spaces
        else:
            wagon_list.append(people)
            people -= people

    elif wagon != 0:
        if people + in_wagon >= 4:
            wagon_list.append(in_wagon + free_spaces)
            people -= 4 - in_wagon

        else:
            wagon_list.append(people)
            people -= 4 - in_wagon

wagon_list = ' '.join(map(str, wagon_list))

if people > 0:
    print(f"There isn't enough space! {people} people in a queue!")
    print(wagon_list)
else:
    print(f"The lift has empty spots!")
    print(wagon_list)
Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 4803 Точки

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

Не е изпълнена и тази част от усовието на задачата:

  • If the lift is full and there are no more people in the queue, you should print only the wagons separated by " ".

 Ето примерно опростено решение:

waiting_people = int(input())
wagons = [int(i) for i in input().split()]
has_free_seats = False

WAGON_SEATS = 4

for i, used_seats in enumerate(wagons):
    available_seats = WAGON_SEATS - used_seats

    if waiting_people < available_seats:
        available_seats = waiting_people

    waiting_people -= available_seats
    wagons[i] += available_seats
    has_free_seats |= wagons[i] < WAGON_SEATS

if waiting_people > 0:
    print(f"There isn't enough space! {waiting_people} people in a queue!")
elif has_free_seats:
    print("The lift has empty spots!")

print(' '.join(map(str, wagons)))

 

0
04/12/2023 18:13:23
Vincent avatar Vincent 11 Точки

Благодаря за отговора!

Добавих логиката, която споменаваш и за съжалание от 70 качих на 80 точки и пак нещо не е както трябва. Разбирам, че кода ми не е перфектен но ми се искаше да мога да избутам задачата сам и от там да надграждам в по-опростено решение.

Това е актуалния код, с 80 точки, ако някои забележи какво още се чупи ще се радвам да каже.

people = int(input())
array_wagons = [int(i) for i in input().split()]
wagon_list = []
in_the_train = 0

MAX_PEOPLE = 4
flag = False

for wagon in array_wagons:
    free_spaces = MAX_PEOPLE - wagon
    in_wagon = MAX_PEOPLE-free_spaces

    if wagon == 0: # Free Wagon
        if people >= 4:
            wagon_list.append(free_spaces)
            people -= free_spaces
        else:
            wagon_list.append(people)
            people -= people

    elif wagon != 0:
        if people + in_wagon >= 4:
            wagon_list.append(in_wagon + free_spaces)
            people -= 4 - in_wagon

        else:
            wagon_list.append(people)
            people -= 4 - in_wagon


passengers = sum(wagon_list)
max_capacity = len(wagon_list)*4

wagon_list = ' '.join(map(str, wagon_list))

if people > 0:
    print(f"There isn't enough space! {people} people in a queue!")
    print(wagon_list)
elif max_capacity != passengers:
    print(f"The lift has empty spots!")
    print(wagon_list)
else:
    print(wagon_list)
0
MartinBG avatar MartinBG 4803 Точки

Щом искате сам да се справиите със задачата, ето входни данни, с които решението не работи коректно:

1
2
The lift has empty spots!
1

Правилният отговор е:

The lift has empty spots!
3

 

0
Vincent avatar Vincent 11 Точки

Благодаря, за съдействието, но нещо пак не излиза. Оправих този вход който бяхте посочили, но продължавам да получавам 80/100. Вашия код изглежда много добре, но оператора |= не мога да му разбера съвсем действието.

Това е актуалната версия на моя код след поправката по входа, който ми дадохте.

people = int(input())
array_wagons = [int(i) for i in input().split()]
wagon_list = []
in_the_train = 0

MAX_PEOPLE = 4
flag = False

for wagon in array_wagons:
    free_spaces = MAX_PEOPLE - wagon
    in_wagon = MAX_PEOPLE-free_spaces

    if wagon == 0: # Free Wagon
        if people >= 4:
            wagon_list.append(free_spaces)
            people -= free_spaces
        else:
            wagon_list.append(people)
            people -= people

    elif wagon != 0:
        if people + in_wagon >= 4:
            wagon_list.append(in_wagon + free_spaces)
            people -= 4 - in_wagon

        else:
            wagon_list.append(people+in_wagon)
            people -= 4 - in_wagon


passengers = sum(wagon_list)
max_capacity = len(wagon_list)*4

wagon_list = ' '.join(map(str, wagon_list))

if people > 0:
    print(f"There isn't enough space! {people} people in a queue!")
    print(wagon_list)
elif max_capacity != passengers:
    print(f"The lift has empty spots!")
    print(wagon_list)
else:
    print(wagon_list)
0
05/12/2023 15:59:55
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.