Chào Mọi người em tên là Tạng. Hôm nay em lên đây có bài tập code nhờ mọi người giúp đỡ.
NGÀY THÁNG
Bộ phận chống buôn lậu và làm hàng giả chặn được một thông báo đã mã hóa của nhóm nghi can đang bị theo dõi. Chìa khóa giải mã thông báo nằm ở đoạn thông báo ngày tháng năm và có dạng YYYY MM DD, trong đó Y, M, D là các ký tự số. Khóa để giải mã là một ngày, tháng năm đúng nhận được bằng cách đổi chổ các ký tự số trong đoạn nói trên.
Một ngày tháng năm là đúng nếu 3 số nhận được đều lớn hơn không và tương ứng với một ngày trong lịch đang dùng. Với năm nhuận tháng 2 có 29 ngày. Năm nhuận là năm chia hết cho 400 hoặc không chia hết cho 100 nhưng chia hết cho 4. Riêng những năm lớn hơn 0 và là bội của 3328 là những năm nhuận đặc biệt, tháng 2 sẽ có 30 ngày.
Cho đoạn thông báo tách được. Hãy xác định số lượng ngày tháng hợp lý có thể rút ra từ thông báo và đưa ra các ngày tháng đó theo thứ tự tăng dần trên lịch. Ngày tháng năm đưa ra dưới dạng YYYY MM DD (xem ví dụ).
Dữ liệu: Vào từ thiết bị nhập chuẩn gồm một dòng chứa xâu 10 ký tự dạng
YYYY MM DD.
Kết quả: Đưa ra thiết bị xuất chuẩn:
- **Dòng đầu tiên chứa một số nguyên – số lượng ngày tháng hợp lệ,**
- **Mỗi dòng trong các dòng sau – một ngày thàng hợp lệ tìm được. Thông tin đưa ra theo thứ tự tăng dần trên lịch.**
***Ví dụ:***
| INPUT
|
| OUTPUT
| **0001 01 01**
|
| **16**
**0001 01 01 0001 01 10 0001 10 01 0001 10 10 0010 01 01 0010 01 10 0010 10 01 0010 10 10 0100 01 01 0100 01 10 0100 10 01 0100 10 10 1000 01 01 1000 01 10 1000 10 01 1000 10 10**
|
|
Em code bằng python rồi nhưng khi Submit bị
**Memory Limit Exceeded ****Mong mọi người fix giúp em cảm ơn.** **[ATTACH=JSON]{"data-align":"none","data-size":"full","title":"Untitled.png","data-attachmentid":539747}[/ATTACH]**
Chào bạn.
Có một số góp ý cho bạn lần sau đăng bài tập, nếu code có những chỗ khá rắc rối thì nhớ comment ý nghĩa những chỗ đó để cho người đọc vào có thể hiểu chỗ đó bạn đang làm gì. Ngoài ra, bạn cũng nên đặt tên biến sao cho người đọc có thể hiểu rõ ngữ nghĩa của nó, đừng nên viết tắt những từ không thông dụng như biến ntn.
Hơn nữa, tạo điều kiện cho các bạn khỏi đánh lại code của bạn, thì bạn có thể copy code của mình lên forum (nhớ dùng chế độ Wrap
đó).
**Tiếp Nhận phản hồi em gửi lại code
import math
from itertools import permutations as P
'NHẬP VÀ TẠO CÁC HOÁN VỊ CỦA CHUỖI SAU ĐÓ LƯU VÀO list ntn (là viết tắt ngày tháng nam)'
ntn = input()
ntn = ntn.replace(" ", "")
'Tạo hoán vị lưu thành list'
ntn = list(set([''.join(p) for p in P(ntn)]))
"sếp xếp lại list theo thứ tự từ nhỏ đến lớn"
ntn.sort()
'list ngày tháng nam xuất ra'
ntn1 = []
"XỬ LÝ LOẠI BỎ CÁC NGÀY THÁNG KHÔNG HỢP LỆ"
for i in ntn:
"Biến kiểm soát"
ks = 0
if int(i[0:4]) == 0 or int(i[4:6]) == 0 or int(i[6:None]) == 0:
continue
if int(i[4:6]) > 12 or int(i[6:None]) > 31:
continue
if int(i[4:6]) == 2 and int(i[0:4])%3328 == 0 and int(i[6:None]) <= 30:
ks = 1
elif int(i[4:6]) == 2 and int(i[6:None]) <= 29 and (int(i[0:4])%400 == 0 or (int(i[0:4])%100 != 0 and int(i[0:4])%4 == 0 )):
ks = 1
elif int(i[4:6]) == 2 and int(i[6:None]) <= 28:
ks = 1
elif int(i[4:6]) != 2:
if int(i[4:6]) in [4, 6, 9, 11]:
if int(i[6:None]) == 31:
continue
else:
ks = 1
else:
ks = 1
if ks == 1:
ntn1.append([i[0:4], i[4:6], i[6:None]])
del ntn
'ĐƯA RA KẾT QUẢ'
print(len(ntn1))
for i in ntn1:
print(' '.join(i))**
**
**
Mỗi lần bạn gọi int() sẽ tạo một object mới (tốn memory) nên bạn thử đặt 3 biến ngày tháng năm rồi dùng nó so sánh trong if thay vì mỗi lần so sánh lại sửa dụng int() như hiện tại xem sao.