Loading...

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

MartinBG avatar MartinBG 4803 Точки

Предполагам, че решението, което сте видели е нещо подобно на това?

year = int(input()) + 1

while len(set(str(year))) != len(str(year)):
    year += 1

print(year)

Използват се само стандартни функционалности на езика и затова е толкова кратко.

Дори и да напишем собствена логика, тя най-вероятно ще се върти около същото принципно решение:

  1. прочитаме текущата година като число от конзолата
  2. увеличаваме я с единица (търсим следващата Happy Year)
  3. проверяваме дали годината изпълнява условието всяка от съставящите я цифри да се среща само по веднъж
    - да - принтираме годината и излизаме от програмата
    - не - увеличаваме годината с 1 и проверяваме отново

Най-сложната част е проверката за уникалност на цифрите в годината - разделяме годината на съставящите я цифри и сравняваме всяка с всяка дали са различни - доста код с възможности за допускане на логическа или copy-paste грешка.

 

Точно този проблем ни решава вариантът с използване на set.- "unordered collection of unique elements":

  • превръщаме годината в стринг чрез str: str(1011) -> "1001"
  • от стринга правим set, който премахва всички дубликати: set("1001") -> {"1", "0"} 
  • проверяваме дали елементите в сета са равни на дължината на стринговата репрезентация на годината чрез len: len( {"1", "0"}) = 2, len("1001") = 4

 

0
13/06/2020 16:45:21
Tapalilov avatar Tapalilov 1 Точки

Благодаря! Знаех за setа, че прави това, но въобще не се сетих.Току що завърших фундаменталс. Трудна ми беше тази задача и се притесних, пробвах с едни вложени цикли. Имаше едно решение подобно в форума, като го видях чак тогава ми светна и работеше с 60 от 100 в джъждж, за секунда го направих 100 от 100, но преди това въобще не ми дойде на акъла попринцип не съм ги учил още сетове, листове, речници от обща култура ги знам и сам съм си ги разцъквал.Благодаря, за бързият отговор! 

1
isvetllin avatar isvetllin 0 Точки

Здравейте,

извинявайте, знам, че темата малко е остаряла, но можете ли да обясните, как става сравнението
 

while len(set(str(year))) != len(str(year)): Странното за мен е, че set-ът съдържа няколко елемента и то по-точно 2, след като стане филтрирането по уникални елементи, а пък str(year) има 4. Как правим сравнение между двете, за колко цикъла и как точно? При дебъгването виждам, че се правят 19 стъпки , ако инпута ми е 2022, Done running (19 steps) В никоя от тях обаче не виждам да се променя сетът..., моля да поясните. Благодаря предварително.
0
stanislav_vv avatar stanislav_vv 5 Точки

Аз също бях зациклил на тази задача :). Предвид, че е в началния етап на курса би трябвало да има начин да се реши само със знанията, които имаме до момента. След няколко десетки неуспешни опита реших и аз да потърся из нета някакви насоки. Естествено взеха да излизат все решения, които за момента не разбирам (set, lists...). Между другото ето едно, което е близко до взетия до тук материал, но има един оператор in, който все още не познавам. Просто видях какво прави и реших да пробвам, а то взе че стана:

input_year = int(input())
next_year = input_year + 1
next_happy_year = ""
while True:
    str_next_year = str(next_year)
    for i in range(0, len(str_next_year)):
        if str_next_year[i] not in next_happy_year:
            next_happy_year = next_happy_year + str_next_year[i]
    if len(next_happy_year) == len(str_next_year):
        break
    next_happy_year = ""
    next_year += 1
print(next_happy_year)

След това се "закучих" и си казах, че трябва да има вариант само с loops или нещо, което сме взели до тук, а не да използвам непознати техники, дори те да са по-кратки и четливи. Ииии на края се увенчах с успех :)

input_year = int(input())
next_year = input_year + 1
next_happy_year = ""
brake_first_loop = False
while True:
    str_next_year = str(next_year)
    next_happy_year = str_next_year[0]
    for i in range(1, len(str_next_year)):
        for j in range(0, i):
            if str_next_year[i] == next_happy_year[j]:
                brake_first_loop = True
                break
        if brake_first_loop:
            break
        else:
            next_happy_year = next_happy_year + str_next_year[i]
    if len(next_happy_year) == len(str_next_year):
        break
    next_happy_year = ""
    brake_first_loop = False
    next_year += 1
print(next_happy_year)

 

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