DOScember - Lập trình MS-DOS với chương trình DOS vui có thưởng

Phần thường là $25 từ mình, gửi qua bitcoin, paypal, hay Amazon Gift Card hoặc séc cho người dầu tiên giải được nhanh hơn chương trình của mình (1 phút cho file bench1 đính kèm bên dưới). Nếu không ai đánh bại được mình thì phần thưởng lớn nhất là 15 đô la.

Hãng máy tính lừng danh Quả Cam đang thiết kế một chiếc đồng hồ thông minh có tên Orange Watch SE. Đồng hồ này có sensor thông minh đo máu và cho biết người đeo có bị bệnh tim không. Ngặt nỗi đồng hồ này chạy CPU Intel 386 và chạy MS-DOS nên bạn cần thiết kế chương trình rất tối ưu cho nó.
Sensor thu các số và ghi lại từ 1-255 thành một dãy có n số. Chương trình này so sánh mỗi con số này với trung vị của d con số trước đó, nếu như nó lớn hơn hoặc bằng 2 lần số trung vị thì cảnh báo một lần. Nhiệm vụ của bạn là viết chương trình để trả lời xem với một dãy số thì nó cần cảnh báo tổng cộng bao nhiêu lần.
Cho ví dụ, với d = 3 và bạn có dãy số n = 5 [ 60 50 80 120 130 ]. 3 con số dầu thì chỉ cần thu thập không làm gì. Con số thứ 4, 120, bạn cần so sánh với 2 lần 60, trung vị của 3 con số trước đó [ 60 50 80 ]: 120 >= 2*60 -- cảnh báo một lần. Tương tự con số thứ 5, 130, so sánh với [ 50 80 120 ] -- 130 < 2*80 -- không cảnh báo. Như vậy ta cảnh báo tổng cộng 1 lần.
File đầu vào dưới dạng "n d x1 x2 x3 ... xn". Bạn đọc file này và ghi ra console con số trả lời cho số lần cảnh báo. Ví dụ như ở trên, file sẽ có dạng "5 3 60 50 80 120 130". Chương trình của bạn sẽ ghi ra "1".
Để giả lập thiết bị Orange Watch, bạn cần download và cài đặt DOSBox. Trên Ubuntu, bạn có thể cài bằng lệnh: 
sudo apt install dosbox
Đặt thiết lập cho DOSBox (~/.dosbox/dosbox*.conf) như sau:  
[cpu]
core=normal
cputype=386
cycles=fixed 4000

Bạn có thể dùng bất cứ ngôn ngữ gì để viết chương trình -- Pascal, C, C++, Assembly, cái gì cũng được. Nếu như bạn muốn dùng C/C++ thì bạn có thể cài đặt bộ dịch OpenWatcom cho DOS tại OpenWatcom.org. Mình có chương trình mẫu C đính kèm dưới đây, bạn chỉ phải viết hàm tính. Dịch bằng "wcl386 FILE.C".  
Dĩ nhiên điều kiện để thưởng là chương trình trước tiên phải ra kết quả đúng và chạy trên DOS. Để ăn 25 đô bạn cần chương trình hoàn thành ra kết quả đúng dưới 1 phút khi cho file bench1 với thiết lập DOSBox trên. Nếu gửi mã nguồn, mình chỉ dịch được C bằng wcl386. Nếu không gửi mã nguồn, bạn có thể gửi file EXE bằng cách mã hóa qua base64, zip lại rồi gửi cho mình qua Google docs hoặc email (htruong@tnhh.net) - đừng zip file EXE, Google sẽ chặn.
27
1246 lượt xem
27
9
9 bình luận