Loading...
niyazihasan avatar niyazihasan 82 Точки

ForceBook 90/100

Здравейте,

Някой може ли да помогне?  Не мога да разбера какво пропускам.

Това е условието на задачата:

The force users are struggling to remember which side are the different forceUsers from, because they switch them too often. So you are tasked to create a web application to manage their profiles. You should store an information for every unique forceUser, registered in the application.

You will receive several input lines in one of the following formats:

{forceSide} | {forceUser}

{forceUser} -> {forceSide}

The forceUser and forceSide are strings, containing any character.

If you receive forceSide | forceUser, you should check if such forceUser already exists, and if not, add him/her to the corresponding side.

If you receive a forceUser -> forceSide, you should check if there is such a forceUser already and if so, change his/her side. If there is no such forceUser, add him/her to the corresponding forceSide, treating the command as a new registered forceUser.
Then you should print on the console: "{forceUser} joins the {forceSide} side!"

You should end your program when you receive the command "Lumpawaroo". At that point you should print each force side, ordered descending by forceUsers count, than ordered by name. For each side print the forceUsers, ordered by name.

In case there are no forceUsers in a side, you shouldn`t print the side information.

Input / Constraints

  • The input comes in the form of commands in one of the formats specified above.
  • The input ends, when you receive the command "Lumpawaroo".

Output

  • As output for each forceSide, ordered descending by forceUsers count, then by name,  you must print all the forceUsers, ordered by name alphabetically.
  • The output format is:

Side: {forceSide}, Members: {forceUsers.Count}

! {forceUser}

! {forceUser}

! {forceUser}

  • In case there are NO forceUsers, don`t print this side.

Examples

Input

Output

Comments

Light | Gosho

Dark | Pesho

Lumpawaroo

Side: Dark, Members: 1

! Pesho

Side: Light, Members: 1

! Gosho

We register Gosho in the Light side and Pesho in the Dark side. After receiving "Lumpawaroo" we print both sides, ordered by membersCount and then by name.

Lighter | Royal

Darker | DCay

Ivan Ivanov -> Lighter

DCay -> Lighter

Lumpawaroo

Ivan Ivanov joins the Lighter side!

DCay joins the Lighter side!

Side: Lighter, Members: 3

! DCay

! Ivan Ivanov

! Royal

Although Ivan Ivanov doesn`t have profile, we register him and add him to the Lighter side.

We remove DCay from Darker side and add him to Lighter side.

We print only Lighter side because Darker side has no members.

 

items = input()
users = {}
while items != "Lumpawaroo":
    if "|" in items:
        tokens = items.split(" | ")
        side = tokens[0]
        user = tokens[1]
        check = False
        for key, values in users.items():
            if user in values:
                check = True
                break
        if check is False:
            if side not in users:
                users[side] = [user]
            elif side in users and user not in users[side]:
                users[side].append(user)
    elif "->" in items:
        tokens = items.split(" -> ")
        user = tokens[0]
        side = tokens[1]
        for key, values in users.items():
            if user in values:
                values.remove(user)
                break
        if side not in users:
            users[side] = [user]
            print(f"{user} joins the {side} side!")
        elif side in users and user not in users[side]:
            users[side].append(user)
            print(f"{user} joins the {side} side!")
    items = input()
sort_user = dict(sorted(users.items(), key=lambda x: (-len(x[1]), len(x[0]))))
for key, values in sort_user.items():
    if len(values) > 0:
        print(f"Side: {key}, Members: {len(values)}")
        sort_values = sorted(values)
        for v in sort_values:
            print(f"! {v}")

 

Тагове:
1
Fundamentals Module
MartinBG avatar MartinBG 4436 Точки
Best Answer

По условие, отборите с еднакъв брой играчи трябва да се сортират по азбучен ред, а това липсва в решението.

Примерен тест, при който ще даде грешна сортировка:

C | c
E | e
A | A
D | d
B | b
F | f
Lumpawaroo

 

Оправената сортираща функция:

sort_user = dict(sorted(users.items(), key=lambda x: (-len(x[1]), x[0])))

 

 

2
niyazihasan avatar niyazihasan 82 Точки

Благодаря

1
DeyanAltanov avatar DeyanAltanov 6 Точки

https://pastebin.com/7gC2XFBp - 90/100

Примерния тест се сортира правилно. Ако може input-a с този, който гърми, ще съм много благодарен! :)

0
DeyanAltanov avatar DeyanAltanov 6 Точки

Намерих проблема.

if any(user in value for value in forcebook.values()) is False:
    forcebook[side].append(user)

Това оправи нещата.

1
30/11/2020 04:40:34
Martinzca avatar Martinzca 11 Точки

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

sides_db = {}

def find_user(username, collection):
    group = ''
    exists = 'no'
    for key, value in collection.items():
        if username in value:
            group = key
            exists = 'yes'
            break
    return group, exists


while True:
    command = input()
    if command == 'Lumpawaroo':
        break

    if ' | ' in command:
        pair = command.split(' | ')
        side = pair[0]
        user = pair[1]

        group, exists = find_user(user, sides_db)

        if exists == 'no':
            if not side in sides_db:
                sides_db[side] = [user]
            else:
                sides_db[side].append(user)
        else:
            pass

    elif ' -> ' in command:
        pair = command.split(' -> ')
        user = pair[0]
        side = pair[1]

        group, exists = find_user(user, sides_db)

        if exists == 'no':
            if not side in sides_db:
                sides_db[side] = [user]
            else:
                sides_db[side].append(user)
            print(f"{user} joins the {side} side!")
        else:
            sides_db[group].remove(user)
            if not side in sides_db:
                sides_db[side] = [user]
            else:
                sides_db[side].append(user)
            print(f"{user} joins the {side} side!")

for key, value in sides_db.items():
    value = sorted(value)
    sides_db[key] = value

sides_db = sorted(sides_db.items(), key=lambda x: (-(len(x[1])),x[0]))

for item in sides_db:
    if len(item[1]) > 0:
        print(f"Side: {item[0]}, Members: {len(item[1])}")
        [print(f"! {user}") for user in item[1]]

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.