Help for 4.Social Distribution from Lists Advanced - More Exercises.
Здравейте, ако някой е получил 100/100 на тази задача, би ли споделил с мен как го е постигнал. Опитах какво ли не, но явно пропускам нещо съществено защото две проверки не минават (60/100) Ето и условието:
A core idea of several left-wing ideologies is that the wealthiest should support the poorest, no matter what and that is exactly what you are called to do for this problem.
On the first line you will be given the population (numbers separated by comma and space ", "). On the second line you will be given the minimum wealth. You have to distribute the wealth, so that there is no part of the population that has less than the minimum wealth. To do that, you should always take wealth from the wealthiest part of the population. There will be cases, where the distribution will not be possible. In that case, print "No equal distribution possible"
Example:
Input |
Output |
2, 3, 5, 15, 75 5 |
[5, 5, 5, 15, 70] |
2, 3, 5, 15, 75 20 |
[20, 20, 20, 20, 20] |
2, 3, 5, 45, 45 30 |
No equal distribution possible |
population = input().split(', ') wealth_level = int(input()) population_list = sorted(list(map(lambda x: int(x), population))) max_element = max(population_list) min_element = min(population_list) length_population_list = len(population_list) low_element = 0 if sum(population_list) / length_population_list < wealth_level or wealth_level == 0 or min_element >= wealth_level: print('No equal distribution possible') else: for element in population_list: if element <= wealth_level: min_element = element population_list.remove(element) population_list.insert(0, wealth_level) population_list.remove(max_element) max_element -= (wealth_level - min_element) population_list.append(max_element) else: element = element max_element = max(population_list) print(population_list)
Благодаря за коментарите и добрия съвет!
Ще го имам предвид на изпит.
Ето ви едно просто и късо решение,задачата ми отне около 15 мин,попринцип някой ги решавам с дни,тука даже бях се отчаял предварително тъй като преди седмица гледах решенията ви и нищо не разбрах като цяло,но пък се радвам,че сам си измислил логиката,дори е вярна и при специални входове като 2,6,6,6:
Благодаря на всички колеги за тези решенията по-горе. Дебъгнах ги всички, но решението с което реших да остана, и ми помогна много да разбера задачата е на "Julianh12". Позволих си да рефакторирам неговия код един "break" и "continue", с цел да се избегне обикаляне през листа ако това не е необходимо вече. Слагам рефактурирания код.
Привет на всички, за мен няма достатъчно информация в условието, относно алгоритъма по който да разпределим богатството от най-богатите към най-бедните. Първо реших задачата, прехвърляйки на всяка итерация по единица богатство от текущ най-богат към текущ най-беден, следвайки логиката на равномерно отнемане и добавяне на богатство. Така, обаче не минава всички проверки. Търсената логика на разпределение е, да се добави максималната възможна част богатство към най-бедния, която може да бъде взета на една итерация от най-богатия.
Ето и моят вариант, минаващ всички проверки:
За тренинг, съм го разписал с функция.
мисля , че трябва да се ползват map() и filter()
ето моя код
data = list(map(int, input().split(", ")))
num = int(input())
while True:
for i, j in enumerate(data):
max_data = max(data)
index_max = data.index(max_data)
if j < num:
raz = num - j
if max_data > num:
data[i] = j + raz
data[index_max] -= raz
break
data2 = list(map(lambda x: x if x >= num else "no", data))
data3 = list(filter(lambda a: a != "no", data2))
if len(data) == len(data3):
print(data)
else:
print("No equal distribution possible")