Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .github/workflows/ruff.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Ruff
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff
# Update output format to enable automatic inline annotations.
- name: Run Ruff
run: ruff check --output-format=github .
76 changes: 76 additions & 0 deletions src/coding_style_and_linters/task_decoration/decorated_task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Берём монеты нужных по условию номиналов и обрабатываем на предмет повторов. Также считываем номинал монеты для размена
if input("У вас есть отчество? (Y/n): ") == "Y":
our_money = {
len(string): 0 for string in input("Введите через пробел ваши ФИО: ").split()
}
else:
our_money = {
len(string): 0 for string in input("Введите через пробел ваши ФИ: ").split()
}
our_money[19] = 0
money = int(input("Введите достоинство монеты для размена (натуральное число): "))

# Делаем словарь с ключами в виде номиналов наших монет и значениями в виде нулей.
# Затем мы возможно будем его использовать для подсчёта количества каждой монеты.
our_money = {key: value for key, value in our_money.items() if key <= money}

# Если у нас нету монет никаких номиналов, то выводим код ошибки.
if len(our_money) == 0:
print("-42!")
# Если монета одна, то смотрим на кратность монеты для размена нашей монете.
elif len(our_money) == 1:
if money % min(our_money) == 0:
print(f"Кол-во {min(our_money)} - {money // min(our_money)}")
else:
print("-42!")
# Если монеты две, то считаем по алгоритму заполнения по максимуму более крупными монетами,
# с последующим вычитанием крупных монет и прибавкой мелких.
elif len(our_money) == 2:
our_money[max(our_money)] = money // max(our_money)

while our_money[max(our_money)] >= 0:
our_money_sum = sum(key * value for key, value in our_money.items())

if our_money_sum == money:
print(
"\n".join(f"Кол-во {key} - {value}" for key, value in our_money.items())
)
break

if our_money_sum + our_money[min(our_money)] > money:
our_money[max(our_money)] -= 1
else:
our_money[min(our_money)] += 1
else:
print("-42!")
# Если монеты три, то происходит нечто по типу полного перебора, который я не исправил до сих пор, но скоро сделаю.
else:
max_money = max(our_money)
min_money = min(our_money)
mid_money = sum(our_money.keys()) - max_money - min_money
flag = False

for min_count in range(0, money // min_money + 1):
for mid_count in range(0, money // mid_money + 1):
if min_count * min_money + mid_count * mid_money > money:
break
for max_count in range(0, money // max_money + 1):
if min_count + mid_count + max_count > money:
break
if (
min_count * min_money
+ mid_count * mid_money
+ max_count * max_money
== money
):
print(f"Кол-во {min_money} - {min_count}")
print(f"Кол-во {mid_money} - {mid_count}")
print(f"Кол-во {max_money} - {max_count}")
flag = True
break
if flag:
break
if flag:
break
else:
print("-42!")