-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhw02_hard.py
More file actions
146 lines (121 loc) · 4.61 KB
/
hw02_hard.py
File metadata and controls
146 lines (121 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
__author__ = 'Пашков Игорь Владимирович'
# Задание-1: уравнение прямой вида y = kx + b задано в виде строки.
# Определить координату y точки с заданной координатой x.
equation = 'y = -12x + 11111140.2121'
x = 2.5
# вычислите и выведите y
print('')
print('Задача 1')
print('')
equation = equation.split(' ')
z1_unit1 = float(equation[2].split('x')[0])
z1_unit2 = float(equation[4])
print('y =', z1_unit1 * x + z1_unit2)
# Задание-2: Дата задана в виде строки формата 'dd.mm.yyyy'.
# Проверить, корректно ли введена дата.
# Условия корректности:
# 1. День должен приводиться к целому числу в диапазоне от 1 до 30(31)
# (в зависимости от месяца, февраль не учитываем)
# 2. Месяц должен приводиться к целому числу в диапазоне от 1 до 12
# 3. Год должен приводиться к целому положительному числу в диапазоне от 1 до 9999
# 4. Длина исходной строки для частей должна быть в соответствии с форматом
# (т.е. 2 символа для дня, 2 - для месяца, 4 - для года)
# Пример корректной даты
# date = '01.11.1985'
# Примеры некорректных дат
# date = '01.22.1001'
# date = '1.12.1001'
# date = '-2.10.3001'
print('')
print('Задача 2')
print('')
import calendar
z2_result = False
days_in_month = 0
z2_day, z2_month, z2_year = input('Введите дату в формате dd.mm.yyyy: ').split('.')
try:
int(z2_day)
int(z2_month)
int(z2_year)
z2_result = True
except ValueError:
z2_result = False
if (len(z2_day) == 2
and len(z2_month) == 2
and len(z2_year) == 4
and z2_result == True):
z2_result = True
else:
z2_result = False
if z2_result:
z2_day = int(z2_day)
z2_month = int(z2_month)
z2_year = int(z2_year)
days_in_month = calendar.monthrange(z2_year, z2_month)[1]
z2_result = True
else:
z2_day = 0
z2_month = 0
z2_year = 0
z2_result = False
if (1 <= z2_day <= days_in_month
and 1 <= z2_month <= 12
and 1 <= z2_year <= 9999
and z2_result == True):
z2_result = True
else:
z2_result = False
if z2_result:
print('Ошибок в дате не обнаружено.')
else:
print('Введена некорректная дата.')
# Задание-3: "Перевёрнутая башня" (Задача олимпиадного уровня)
#
# Вавилонцы решили построить удивительную башню —
# расширяющуюся к верху и содержащую бесконечное число этажей и комнат.
# Она устроена следующим образом — на первом этаже одна комната,
# затем идет два этажа, на каждом из которых по две комнаты,
# затем идёт три этажа, на каждом из которых по три комнаты и так далее:
# ...
# 12 13 14
# 9 10 11
# 6 7 8
# 4 5
# 2 3
# 1
#
# Эту башню решили оборудовать лифтом --- и вот задача:
# нужно научиться по номеру комнаты определять,
# на каком этаже она находится и какая она по счету слева на этом этаже.
#
# Входные данные: В первой строчке задан номер комнаты N, 1 ≤ N ≤ 2 000 000 000.
#
# Выходные данные: Два целых числа — номер этажа и порядковый номер слева на этаже.
#
# Пример:
# Вход: 13
# Выход: 6 2
#
# Вход: 11
# Выход: 5 3
print('')
print('Задача 3')
print('')
z3_square = 0
z3_pos = 0
z3_floor = 0
z3_onfl = 1
z3_flin = 1
z3_room = int(input('Введите номер комнаты: '))
while z3_pos < z3_room:
z3_square += 1
z3_pos += z3_square ** 2
z3_floor += z3_square - 1
z3_min = z3_pos - z3_square ** 2 + 1
while z3_min < z3_room:
z3_onfl += 1
if z3_onfl > z3_square:
z3_onfl = 1
z3_flin += 1
z3_min += 1
print('Этаж: {}, позиция: {}.'.format(z3_flin + z3_floor, z3_onfl))