on 4:23 a.m. 22 apr, 2022 2

Về chế độ màn hình tối (Dark Mode)

Mọi người đã quen thuộc với dark mode rồi nhưng LQDOJ thì lại chưa có tính năng này. Vì vậy trong bài đăng này, mình muốn tham khảo ý kiến các bạn về chế độ dark mode.

Đề xuất của mình là sử dụng Chrome extension Dark Reader, hoặc các ứng dụng tương tự trong Chrome. Với ứng dụng này, các bạn cũng có thể tùy chỉnh gam màu, những trang web cho phép sử dụng dark mode, và có thể chuyển đổi sáng và tối bằng tổ hợp phím Alt + Shift + D. Bên dưới là hình minh họa trang chủ:

darkmode

Các bạn cứ thoải mái để lại ý kiến hay đề xuất gì. Nếu mọi người đồng ý, mình có thể gắn bài đăng này vào mục About ở trên thanh điều hướng.

on 5:00 p.m. 15 apr, 2022 2

10^6, 10^7 và những người bạn Summary

Chào các bạn, vậy là contest 10^6, 10^7 và những người bạn đã kết thúc

Trước tiên, chùng mình xin lỗi các bạn do sự cố server nên việc chuẩn bị contest không được chu đáo nên gây ra nhiều vấn đề trong contest, chúng mình sẽ rút kinh nghiệm và chuẩn bị kỹ hơn cho các contest sau.

Chúng mình xin tuyên bố contest này unrated.

Lời giải của contest đã được gửi trong phần editorial của mỗi bài.

Cuối cùng chúc mừng Top 5 bạn đạt điểm cao nhất:

Div 1

THÍ SINH ĐIỂM THỜI GIAN
BaoJiaoPisu 336.67 02:38:57
letuano5 250.83 05:08:48
tanprodium 220 05:14:26
_Ahihi123 200 02:42:15
tamthegod 195 05:26:16

Div 2

THÍ SINH ĐIỂM THỜI GIAN
duyanh19256 300 06:24:58
phungthienphuoc 200 01:20:32
a520huynm 200 02:20:58
duyboyct 200 04:14:20
rukashii 136.67 02:56:42

Div 3

THÍ SINH ĐIỂM THỜI GIAN
tankhoaict 331 05:46:22
huyngu235 314.67 06:29:31
MinhTuan11 300 04:25:13
sus 260 04:13:13
Quocnguyenvan 245.33 06:13:39
on 11:00 p.m. 9 apr, 2022 13

10^6, 10^7 và những người bạn

Chào các bạn, mình là coordinator mới của LQDOJ. Đã lâu rồi LQDOJ không có contest nên hôm nay mình và mọi người quyết định tổ chức một contest cho các bạn.

Contest lần này gồm 3 div như sau:

Div 1 dành cho các bạn có rating từ 1600 trở lên.

Div 2 dành cho các bạn có rating từ 1599 trở xuống.

Div 3 dành cho các bạn tiểu học và trung học cơ sở.

Contest được diễn ra trong 2 tiếng từ 19h08 đến 21h38 ngày 10/4/2022.

Cảm ơn các bạn dangquan6b DeMen100ms huyhau6a2 Toilaaibanbietko7A4 đã tham gia ra đề cho contest này.

Cảm ơn bạn SPyofgame đã làm tester cho cuộc thi.

Cảm ơn admin Small cuom1999, CaiWinDao, coordinator Flower_On_Stone đã cho phép chúng mình tổ chức cuộc thi lần này.

Cảm ơn các bạn đã đọc và quan tâm theo dõi, nếu đề hay bộ test có sai xót gì các bạn có thể gửi báo cáo và mong các bạn thông cảm. Chúng mình sẽ luôn cập nhật tình hình và luôn có mặt trong khi cuộc thi đang diễn ra để hỗ trợ, giải quyết thắc mắc của các bạn và tránh những sai xót đáng tiếc.

Chúc các bạn có một cuộc thi thật tốt, đạt kết quả cao và học hỏi được nhiều kiến thức bổ ích qua cuộc thi lần này.

Cuối cùng xin chúc các bạn có một kỳ nghỉ Giỗ tổ Hùng Vương vui vẻ.

on 9:38 p.m. 9 apr, 2022 0

April Fools 2022 Recap - Editorial - Trao giải

278211790-350716203774064-5455370917751442542-n

Lời đầu tiên, chúc mừng các bạn đã vượt qua Contest April Fools đến từ DACAP Industry!

Tổng kết Contest

Với số người tham gia là 178, đây là một bước nhảy vọt đáng kể so với con số 122 của April Fools 2021. Đồng thời thì chất lượng làm bài của các bạn cũng đã tốt và đồng đều hơn so với năm trước. Có lẽ một phần là do chất lượng của đề đã được cải thiện hơn rất nhiều, nhưng phần lớn là nhờ vào sự ủng hộ của mọi người dành cho Contest. Chúng mình xin chân thành cảm ơn các bạn đã quan tâm và dành thời gian để tạo nên thành công cho Contest lần này.

Nếu các bạn đang đọc bài viết này mà chưa tham gia Contest Cá tháng Tư vào ngày 1/4 vừa rồi, các bạn có thể tham gia ảo contest tại đây để đọc đề và thử làm bài xem khả năng của mình ở đâu trước khi tiếp tục đọc phần bài giải phía dưới.

Bình luận của người ra đề

  • malego290704
    Năm nay các bạn đã làm chúng mình rất bất ngờ với hàng loạt lượt AC ngay từ những phút đầu tiên. Tuy nhiên thì một điều khá thú vị đó là chưa có một ai đạt điểm tối đa, khi mỗi người lại làm được những bài khác nhau.
  • zipdang04
    Mình hơi tiếc vì đã xảy ra sự cố rejudge liên tục cho bài ngôn ngữ học, và chân thành xin lỗi các bạn rất nhiều. Bảng điểm của năm nay ngoại trừ việc có một khối 613.14 thì nhìn cũng có vẻ đẹp hơn năm ngoái, và rất may là vẫn có 1 bài của malego290704 chưa ai AC cả =)) Ngoài ra, tụi mình cũng rất vui và tự hào vì nhận được feedback rất tốt của anh RR (I_love_Hoang_Yen), như là một sự khẳng định cho uy tín và chất lượng của cú lừa lần này. Cảm ơn anh rất nhiều ạ <3
  • CarlavierVN
    Ngoài tiếc cho idol DeMen100ms ra thì không còn bình luận gì thêm :c
  • a519thinhnp (tin12q):
    :D không có bình luận gì trừ việc nhiều bạn không bị lừa 1u.
  • AquaRiasta

Bảng vàng

Như đã nêu ở bài thông báo, top 3 của contest lần này sẽ giành được phần thưởng là áo LQDOJ đến từ nhà tài trợ small. Chúng ta hãy cùng dành một tràng vỗ tay online nồng nhiệt cho top 3 của chúng ta: I_love_Hoang_Yen MewnianO21 nanidesuka

Đồng thời, một phần đặc trưng không thể thiếu của Contest April Fools đó là các vị trí giải phụ vô cùng hấp dẫn. Cùng xem liệu bạn có là kẻ may mắn đêm nay và được vinh danh tại đây không nhé!

  • Vua phá hoại server: MewnianO21 - AC sau 29 lần nộp bài E
  • Vua phá hại server: a219BachNX - 27 lần nộp bài B nhưng không được điểm nào
  • Vua lật kèo: MewnianO21 - từ top 27 leo lên top 2 ở phút áp chót
  • Vua đen đủi: DeMen100ms - mất vị trí top 3 vào lúc MewnianO21 lội ngược dòng
  • Vua keo kiệt: tuanlinh - 10.71 điểm - số điểm dương thấp nhất
  • Vua xác suất: Tanphuc - rank 36 - được thần may mắn đến từ random.org gọi tên
  • Vương quốc đoàn kết: Chuyên NBK Quảng Nam - nắm giữ top 5-12 (từ Giải Ngũ đến Giải Tá(n)) với nhiều bài code giống nhau

Các bạn có thể lấy giấy chứng nhận của mình tại đây.

Hướng dẫn giải (editorial)

Để thuận tiện hơn, nếu các bạn muốn sở hữu solution để nộp bài trực tiếp có thể lấy code của 8 bài tại đây.

Bài 1: từ tháng tư đến tháng tư

Ở test ví dụ, các bạn thấy input là 1, và output là abcdef. Nếu vào thư mục theo đường dẫn a/b/c/d/e/f, sẽ thấy một file 1.txt. Tương tự với test ví dụ còn lại.

Từ đây, ta suy ra output sẽ là đường dẫn thư mục các file.

Các bạn dùng Windows bằng cách sử dụng chức năng search của Windows Explorer.

Thử tìm các file 3.txt, 4.txt để tìm các file số, các bạn sẽ đúng 5/7 test. Nếu tìm tất cả các file dùng wildcard *.txt sẽ tìm ra toàn bộ các file.

Bài 2: không có bài

Hãy bôi đen đề bài.

Bạn nào dùng darkmode sẽ nhìn ra hẳn đề của bài này :( Và điều này thì mình chưa biết cách khắc phục.

Bài 3: ngôn ngữ học

Thực ra, trước khi thi, mình có làm thử bài ngôn ngữ học, và tốn tầm 1 tiếng để AC bài này. Nên mình rất bất ngờ khi anh Trung AC rất nhanh.
Ngoài ra, mình không nghĩ là các bạn if test nhanh như vậy, khiến cho mình phải sinh test lại (bằng cách ngồi hoán vị các từ cả lên =)) ). Mỗi tội sinh hơi ẩu nên phải up lại rejudge một mớ lần. Các bạn cũng rất thông minh khi chọn cách if từng từ, tuy nhiên chia buồn với các bạn là vẫn không AC :))

Cách giải của bài này tuy đơn giản nhưng code khá mệt. Với mỗi ngôn ngữ, hãy lựa ra bộ ký tự đặc biệt của mỗi ngôn ngữ, và nếu trong đoạn text đề cho có ký tự đặc biệt của ngôn ngữ đó thì đáp án là ngôn ngữ đó.
Tuy nhiên có các vấn đề sau:

  • Trong Tiếng Nhật và thậm chí là Hàn có một số đoạn text tiếng Trung. Vì vậy nên phải xử lý Hàn và Nhật trước khi xử lý tiếng Trung.
    Trên thực tế thì mình có sinh vài test có Kanji và Hanja, nhưng mà tới lúc viết editorial này mới phát hiện ra là nó chưa được chuẩn lắm nên chắc là sẽ k bắt được đâu :(( Đáng lẽ cũng nên có vài test bắt tiếng Pháp và tiếng Việt nữa (à, è, …)
  • Ngoài ra còn có trường hợp code thì chắc phải if test thôi :’)
Bài 4: Start up giả cầy

In ra 4242 là câu trả lời của tất cả mọi thứ! Mọi thông tin liên quan xin vui lòng liên hệ: https://en.wikipedia.org/wiki/42_(number)#:~:text=The%20number%2042%20is%2C%20in,period%20of%207.5%20million%20years.

Bài 5: Gọi vốn giả cầy

Chú ý: Bài CHỨA 2 bộ test hay cần phải đọc 2 lần số \(n\) và \(n\) số \(a[i]\).

Sở dĩ dùng từ “chứa” là do để AC thì các bạn cần đọc dòng “Sample input 2:” ở trong bộ test input ngay sau khi đọc hết \(n\) số \(a[i]\) lần một cũng như in ra “Sample output 2:” ở giữa 2 kết quả của 2 bộ test (2 string cần đọc và in trên đã không được in đậm trong test ví dụ của đề bài và hai dòng “Sample input/output:” được in đậm thì không có chứa số “1”).

Còn lại thì các bạn chỉ cần tính tổng cho mỗi bộ test gồm \(n\) số \(a[i]\) và in ra màn hình.

Bài 6: Body Samsung

Cô ấy thích những câu chứa những từ chỉ gồm những ký tự có mã ASCII \(\ge 100\) ( :’) ).

Xét những ký tự trong xâu, nếu không có ký tự nào có mã ASCII \(\ge 100\) thì in YES, ngược lại in NO.

Bài 7: Giấc mơ

Đây là một bài với đề bài rất ngắn, tuy nhiên lại chứa tới hai yếu tố của bài toán. Theo quan sát của chúng tôi, một số bạn đã tìm ra được yếu tố thứ nhất và giành được 36 điểm, tuy nhiên chưa có ai tìm ra được yếu tố còn lại.

Ở đề bài này, câu đầu tiên chỉ là một câu dẫn và không chứa một thông tin gì của bài toán. Cả hai yếu tố đều nằm ở câu thứ hai:
Hãy đếm số giấc mơ của anh ấy!!!

Yếu tố đầu tiên mà một số bạn tìm ra, đó là "đếm số giấc mơ" tương đương với "đếm ước". Vì vậy, với số \(N\) được cho các bạn cần tìm số ước của \(N\), tạm gọi là \(D\).
Yếu tố thứ hai nằm ở cuối câu: "!!!", với ý nghĩa là "triple factorial" (mình không biết tiếng Việt nghĩa là gì, với ! là giai thừa, !! là giai thừa kép).

Ví dụ:

  • \(7! = 7×6×5×4×3×2×1\)
  • \(7!! = 7×5×3×1\) (lưu ý: \(7!! \neq (7!)!\))
  • \(7!!! = 7×4×1\)

Vậy đáp án của bài toán là \(D!!! (mod\) \(10^9+7)\).
Vì kết quả giai thừa có thể rất lớn nên các bạn cần \(mod\) \(10^9+7\) ở từng bước nhân trong tính giai thừa.

Các bạn làm cách tìm ước có điểm ở nhũng test đầu tiên vì số ước của \(N \le 4\), vậy nên \(D = D!!!\).

Bài 8: Tiền ảo

Đây là một bài không có yếu tố bẫy trong đề, tuy nhiên đây là một bài phức tạp, gồm nhiều bước nhỏ và có những điểm đáng chú ý khi làm bài.

Bước đầu tiên đó là lấy dữ liệu của block về. Ở đây có 2 cách làm cho các bạn lựa chọn:

  • Sử dụng web scraping để đọc 10000 trang web theo format đã cho trong đề. Web scraping là một chủ đề lớn, tuy nhiên ở đây các bạn chỉ cần làm công việc cơ bản nhất là đọc trực tiếp dữ liệu trang. Các bạn có thể tham khảo phần đầu của một bài tutorial của RealPython để áp dụng giải bài toán.
  • Nếu các bạn biết đến GitHub và GitHub Pages thì có thể thấy mình host file tại trang web GitHub cá nhân của mình. Từ đó bạn có thể truy cập vào trang GitHub của repository để clone cả trang web về đọc file ngay trên máy.

Bước tiếp theo đó là đọc dữ liệu của 10000 trang/file này. Cần lưu ý những block không nằm trong chuỗi sẽ không chứa dữ liệu. Trong bài có lấy ví dụ về block 0001 và 0002 chứa dữ liệu, nhưng nếu các bạn thử mở block 0000 sẽ thấy dòng BlockID {ID} does not exist. Có 10% tương ứng với 1000 block invalid, vậy nên khi đọc dữ liệu các block cần kiểm tra xem ô này có chữa dữ liệu hay không, có thể kiểm tra bằng cách kiểm tra kí tự đầu tiên có phải là B hay không.

Nếu ô có chứa dữ liệu, có thể lưu dữ liệu vào một dictionary/map để theo dõi block phía sau của block này là block nào (vì dữ liệu đọc chỉ cho block phía trước). Từ đó, bắt đầu từ block ID 0 sẽ dựng được chuỗi block của blockchain. Từ đó có thể sử dụng thêm một dictionary/map để theo dõi mỗi người có bao nhiêu tiền. Một lưu ý cuối cùng ở bước này đó là có những transaction không hợp lệ, tức là số tiền chuyển lớn hơn số tiền có sẵn thì giao dịch đó sẽ không được tính.

Cuối cùng, vì số lượng user trong blockchain không nhiều, vậy nên có thể đưa ra một dictionary/map lưu đáp án hoặc if test làm bài nộp.

Lời kết

Xin trân trọng cảm ơn nhà tài trợ kim cương - thầy small với những phần thưởng vô cùng giá trị.
Xin trân trọng cảm ơn LQDOJ và đội ngũ coordinator đã tạo điều kiện để tổ chức thành công contest.
Xin trân trọng cảm ơn những bạn đã nhận lời quảng cáo để góp phần lan tỏa cuộc thi đến với mọi người.
Xin trân trọng cảm ơn những phản hồi tích cực từ các bạn, các anh chị, các thầy cô giáo đã dành cho chúng tôi.
Xin trân trọng cảm ơn các bạn thí sinh của Contest April Fools 2022 đã quan tâm và tham gia hết mình với contest.

DACAP Industry

on 8:07 p.m. 30 mar, 2022 9

April Fools 2022

277410933-3128590090717946-983948676367425039-n


Contest Cá tháng Tư đã quay trở lại!

Là đơn vị đầu tiên đem cuộc thi ngày Cá tháng Tư bằng hình thức lập trình thi đấu về với Việt Nam, DACAP Industry (tiền thân là Hội Anh em Đa cấp A519) vô cùng vui mừng khi thông báo rằng Contest April Fools - Cá tháng Tư sẽ tái xuất giang hồ với phiên bản 2022 mới nhất. Tiếp nối thành công của năm trước, năm nay các bài tập trong contest đã được cải tiến để thêm phần lừa lọc, giúp cho các bạn có một trải nghiệm tuyệt vời hơn nữa. Với quãng độ khó được mở rộng cùng phần đề bài được trau chuốt kĩ lưỡng, chúng tôi tin rằng đây sẽ là một cuộc thi thỏa mãn không chỉ tính chuyên môn mà còn là tính giải trí cho các bạn.

Đối với Contest April Fools, điểm đặc biệt của bài toán không phải là sự đòi hỏi chuyên môn về các thuật toán, mà là khả năng giải quyết vấn đề, tìm ra nhiệm vụ trong đề bài và đưa ra phương án thích hợp. Chính bởi đặc điểm như vậy mà contest này sẽ là một contest unrated, tuy nhiên không phải vì vậy mà sẽ không có sự cạnh tranh để giành lấy những vị trí cao nhất. Cơ cấu giải thưởng của chúng ta sẽ như sau:

  • 3 vị trí đầu bảng sẽ được tặng áo LQDOJ (với sự tài trợ của thầy Small)
  • Các vị trí dẫn đầu sẽ được vinh danh trong bài tổng kết contest
  • Giấy PDF chứng nhận cho các vị trí dẫn đầu cũng như các giải phụ

Còn chần chừ gì nữa mà không nhanh chóng đăng kí tài khoản tại https://lqdoj.edu.vn ngay nào! Hẹn gặp lại các bạn vào ngày Cá tháng Tư!]

on 4:11 a.m. 22 mar, 2022 13

Demo giao diện mới

Theo trào lưu đổi giao diện hằng năm, LQDOJ cũng sẽ có giao diện trang chủ mới. Tuy nhiên, vì bản demo còn rất sơ khai nên các bạn hãy thoải mái đề xuất ý tưởng bên dưới để giúp bọn mình cải thiện. Một số điểm mới trong lần demo này:

  1. Các bạn có thể "lướt" bài tập ở trang chủ. Tuy nhiên, hệ thống "recommendation" còn khá sơ khai và còn nhiều chỗ có thể cải thiện :)

  2. Đưa comment về lại trang bài tập, thay vì sang trang mới.

  3. Có thể các bạn không để ý, nhưng web đã có hệ thống inbox riêng tư. Trong trang chat, các bạn có thể click vào tên người dùng bên cột trái / tìm người dùng để tạo phòng mới.

Trong trường hợp bị lỗi giao diện, hãy thử Ctrl+F5 để tải lại. Cảm ơn các bạn đã luôn đồng hành! Hy vọng LQĐ năm nay full giải VOI 😂

on 8:46 p.m. 12 mar, 2022 5

"Dân chủ hóa" việc đánh giá độ khó bài tập

Để khuyến khích phong trào tự học, tự rèn luyện của các bạn, ngay từ ban đầu LQDOJ đã tiến hành xếp hạng người dùng theo tiêu chí mặc định là tổng điểm của các bài tập mà các bạn AC. Điểm của mỗi bài tập sẽ được tính bởi người ra đề (problem setter) hoặc các admin. Chiến lược này ban đầu tỏ ra hiệu quả, nhưng khi danh sách bài tập "phình quá to" so với thời sơ khai của web, các admin không còn đủ thời gian để kiểm định tính hợp lý của điểm từng bài nữa. Nhiều trường hợp, cảm tính chủ quan của problem setter về bài tập chưa thật sự chuẩn xác so với độ khó thực tế của nó, vì vậy họ đã set một mức điểm không hợp lý cho bài. Càng nhiều con điểm bất hợp lý như vậy tích tụ lại thì bảng xếp hạng càng có nguy cơ không phản ánh được thực lực của các coders!

Từ bất cập này, đồng thời cũng xuất phát từ kim chỉ nam của LQDOJ là "lấy người dùng làm trung tâm" và "số đông luôn đúng," chúng mình đang triển khai tính năng cho phép người dùng tham gia đánh giá độ khó cho các bài tập mà họ đã AC. Nếu các bạn quay lại trang đề bài của các bài tập mà mình giải xong thì có thể nhìn thấy mục đánh giá này:

Chúng mình rất trân trọng phản hồi của tất cả các bạn để cải thiện độ chính xác cho điểm số của các bài. Điểm của từng bài tập sẽ được cập nhật nhanh chóng một khi chúng mình hoàn thành việc làm sạch dữ liệu đánh giá. Lời cuối, xin chân thành cảm ơn toàn thể cộng đồng đã đóng góp cho LQDOJ ngày một vững mạnh!

on 9:53 p.m. 16 dec, 2021 36

JUMP CONTEST

Xin chào tất cả các bạn.

Lần này mình(algorit) và bin9638 quyết định tổ chức \(JUMP\) \(CONTEST\) để giúp các bạn rèn luyện, củng cố và nâng cao kiến thức lập trình thi đấu của bản thân. Giúp các bạn hoàn thiện hơn về mặt thuật toán, tư duy và khả năng đọc đề.

Cuộc thi lần này bắt đầu vào 19:00h - Thứ 7 ngày 18/12/2021. Các bạn sẽ có 150 phút để giải quyết \(6\) bài tập

  • Bảng A : Dành cho học sinh tiểu học và ngôn ngữ lập trinh duy nhất được cho phép là \(Scratch\).
  • DIV 1 : Dành cho các bạn có Rating từ 1600 trở lên, sẽ dành cho các bạn có tư duy, kĩ năng xử lý để giải quyết các bài tập khó khăn hơn.
  • DIV 2 : Dành cho các bạn có Rating dưới 1600, gồm các bài tập cơ bản, tiếp cạnh các với các thuật toán, yêu cầu xử lí ở mức trung bình.

Hy vọng rằng mọi người sẽ có một trải nghiệm thú vị trong cuộc thi lần này. Mong rằng các bạn không vi phạm những nội quy khi tham gia cuộc thi (đặc biệt là hành vi chép code), chấp hành đúng theo luật để giúp bạn cải thiện kiến thức, nâng cao kỹ thuật tốt hơn.

Cảm ơn thầy Đỗ Văn Nhỏ và đội ngũ Admin cuom1999, ami, CaiWinDao đã cho phép chúng mình tổ chức cuộc thi lần này.

Cảm ơn các bạn đã đọc và quan tâm theo dõi, nếu đề hay bộ test có sai xót gì các bạn có thể gửi báo cáo và mong các bạn thông cảm. Chúng mình sẽ luôn cập nhật tình hình và luôn có mặt trong khi cuộc thi đang diễn ra để hỗ trợ, giải quyết thắc mắc của các bạn và tránh những sai xót đáng tiếc.

Chúc các bạn có một cuộc thi thật tốt, đạt kết quả cao và học hỏi được nhiều kiến thức bổ ích qua cuộc thi lần này.

on 4:49 p.m. 9 dec, 2021 27

[Góc engineering] Câu chuyện về đợt "cúp điện" lâu nhất lịch sử

Thông báo lỗi 502 Bad Gateway đã trở thành một mảnh ghép thân thương của trang web LQDOJ trong lòng người dùng nhờ lịch bảo trì dày đặc và đầy bất ngờ của nhà cung cấp máy chủ ảo. Các bạn có thể bắt gặp lỗi 502 khi đang tham gia contest, khi chat chit, viết blog và thậm chí là khi ... chỉ vừa mới đăng nhập xong. Dù mật độ lỗi xảy ra khá thường xuyên nhưng team dev web cũng luôn xử lý chúng rất nhanh gọn để không làm gián đoạn trải nghiệm của mọi người. Tuy nhiên, may mắn đã không mỉm cười với chúng mình vào sự cố ngày thứ bảy vừa rồi (04/12) nữa. Diễn biến của "tuần cuối năm u ám" này (được chính thức đặt tên để kỷ niệm một bài học nhớ đời) có thể được tóm tắt như sau:

  • Vào tầm 16h ngày thứ bảy, thầy Small thông báo cho toàn thể các admin về việc LQDOJ lại bị lỗi 502 sau khi bảo trì máy chủ và việc restart các service không có tác dụng.
  • 17h cùng ngày, server được reboot và tình hình vẫn không tươi sáng hơn. CaiWinDao thử khởi động development server bằng lệnh kinh điển python manage.py runserver và nhận được thông báo lỗi khô khốc: "Table 'dmoj.django_migrations' doesn't exist in engine". Đọc lướt thấy keyword migrations đã biết ngay lành ít dữ nhiều, CaiWinDao đã xác định rằng web không thể có cơ may sống lại trước khi cuom1999 thức giấc.
  • 20h (ở Mỹ đang là buổi sáng), cuom1999 sau bài thể dục buổi sáng đã gấp rút chạy lệnh sao lưu dữ liệu ... ./backup.sh, tuy nhiên, một thông báo lỗi nghiệt ngã đã chờ sẵn: mysqldump: Got error: 1932: "Table 'dmoj.auth_group' doesn't exist in engine" when using LOCK TABLES. Định mệnh đã rõ: Database đã bị crash, MariaDB chính thức đình công. cuom1999 tạm gác việc debug để lên trường dự thi Putnam.
  • Sau hơn một ngày tra cứu, một giải pháp khả thi xuất hiện là sử dụng mysqlfrm để restore database từ các mảnh .idb.frm. Nghe có vẻ đơn giản nhưng việc thực thi đã gặp rất nhiều rào cản nên người dùng vẫn phải chờ đợi mỏn mỏi :(
  • Vào thứ hai tuần sau, team hạ tầng server bắt đầu tiến hành tạo một bản sao của web từ mã nguồn trên Github và dữ liệu cào được vào ngày 4/12. cuom1999 đã tham gia hỗ trợ hiệu chỉnh các table trong database để bản sao này có thể chạy trơn tru.
  • Trưa ngày hôm nay, thứ năm (09/12), LQDOJ đã chính thức "hồi sinh" dù vẫn còn tồn tại một số lỗi nhỏ trong đồng bộ dữ liệu. Toàn thể ban quản trị đều thở phào nhẹ nhõm!

Chúng mình thấu hiểu sâu sắc rằng LQDOJ đóng một vai trò không nhỏ trong quá trình học tập và tự rèn luyện của các bạn. Chúng mình cũng xin chân thành cáo lỗi về sự cố vừa qua. Kể từ ngày hôm nay, server sẽ chính thức thực hiện việc sao lưu (backup) vào mỗi ngày để việc khắc phục các sự cố (nếu xảy ra trong tương lai) được nhanh nhất có thể. Xin cảm ơn sự đồng hành và ủng hộ của tất cả thầy cô và các bạn học sinh!

on 3:21 p.m. 9 dec, 2021 4

Web đã fix xong

Chào các bạn!

Sau mấy ngày LQDOJ bị lỗi dữ liệu khá nặng. Để đảm bảo dữ liệu không bị mất nhiều nên đội ngũ phát triển LQDOJ đã mất khá nhiều thời gian để khôi phục lại dữ liệu.

Đến hiện tại thì dữ liệu của hệ thống đã khôi phục khá hoàn thiện và LQDOJ đã hoạt động trở lại. Dù vậy phần bài nộp của hai ngày 3/12 và 4/12 không thể khôi phục được. Rất xin lỗi các bạn vì sự cố này. Chúc các bạn luyện tập vui vẻ.

P/S 1: Hệ thống rating đã được cập nhật theo phong trào :))

P/S 2 : Hiện tại nhiều dữ liệu vẫn bị lỗi. Chúng mình vừa mới sửa bảng người dùng, nhưng nhiều khả năng là vẫn còn rất nhiều lỗi. Các bạn có thể đóng góp bên dưới phần bình luận và chúng mình sẽ cố gắng khắc phục.

P/S 3: Một số bài nộp không hiển thị testcases vì dữ liệu không khôi phục được. Để khắc phục điều này, các bạn có thể chọn nộp lại bài.