-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtruncateString.py
39 lines (31 loc) · 1.98 KB
/
truncateString.py
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
# vietcv Đơn giản 100 Điểm
# Giới hạn ký tự: 3000
# Tiếng Việt
# Cho một xâu kí tự chứa các chữ số từ 0 tới 9
# Người ta áp dụng phép biển đổi xâu dựa trên các nguyên tắc sau:
# nếu chữ số ngoài cùng bên trái chia hết cho 3, xóa nó khỏi xâu kí tự
# nếu không thỏa mãn điều kiện trên, và nếu chữ số ngoài cùng bên tay phải chia hết cho 3, xóa nó khỏi xâu kí tự
# nếu không thỏa mãn 2 điều kiện trên, và nếu tổng chữ số ngoài cùng bên trái và ngoài cùng bên phải chia hết cho 3, xóa cả hai chữ số trên khỏi xâu
# Các phép toán trên được áp dụng vào xâu ban đầu cho tới khi xâu trở thành rỗng, hoặc ko đáp ứng cả 3 điều kiện trên
# Cho một xâu kí tự, hãy tìm xâu kết quả cuối cùng khi áp dụng liên tục các phép toán trên
# Ví dụ:
# Với s = "312248", thì kết quả truncateString(s) = "2".
# Các bước thực hiện để ra kết quả trên như sau:
# Kí tự đầu tiên bên trái 3 chia hết cho 3 và bị xóa. Xâu s trở thành "12248";
# Cả 1 và 8 đều không chia hết cho 3, nhưng tổng của chúng là 9 thì chia hết cho 3, do đó cả 1 và 8 bị xóa khỏi xâu. Xâu s trở thành "224";
# Cả 2 và 4 đều không chia hết cho 3, nhưng tổng của chúng là 6 thì chia hết cho 3, do đó cả 2 và 4 bị xóa khỏi xâu. Xâu s trở thành "2";
# Xâu "2" không thỏa mãn điều kiện nào trong các điều kiện trên, do đó đây là xâu đáp án cuối cùng.
def truncateString(s):
a = [i for i in s]
while len(a)!=0:
if int(a[0])%3==0:
a.pop(0)
elif int(a[len(a)-1])%3==0:
a.pop(len(a)-1)
elif (int(a[0])+int(a[len(a)-1]))%3==0:
a.pop(0)
a.pop(len(a)-1)
else:
break
return "".join(a)
print(truncateString("312248"))