So sánh số phiên bản: "1.10" > "1.9" nhưng chuỗi nói ngược lại
Class cần viết: ver_cmp · cần máy chấm có SystemVerilog · 6 case (2 mẫu) · giới hạn 4 s/case · ~20 phút
Script regression, bộ quản lý IP và flow EDA thường phải chọn "phiên bản mới nhất" của một thư viện hay một bản phát hành công cụ. Số phiên bản trông như chuỗi, nhưng không được so như chuỗi.
Viết class ver_cmp với hàm static int compare(string a, string b):
- trả −1 nếu a < b, 0 nếu bằng nhau, 1 nếu a > b;
- mỗi phiên bản gồm một hoặc nhiều phần ngăn bởi dấu chấm, mỗi phần là một số thập phân không âm, có thể có số 0 ở đầu (
"01"= 1); - so lần lượt từng phần theo giá trị số, từ trái sang phải; phần đầu tiên khác nhau quyết định kết quả;
- phiên bản có ít phần hơn được coi như có thêm các phần bằng 0 ở cuối.
Ví dụ: compare("1.9", "1.10") = −1; compare("1.2", "1.2.0") = 0; compare("1.02", "1.2") = 0; compare("1.2.3", "1.3") = −1.
Đầu vào luôn hợp lệ: không rỗng, chỉ có chữ số và dấu chấm, không có hai dấu chấm liền nhau hay dấu chấm ở đầu/cuối, mỗi phần nhỏ hơn 10⁶.
Các case
- Cùng số phần, cùng số chữ sốmẫu
- Số nhiều chữ số: 1.10 và 1.9mẫu
Cùng 4 case ẩn kiểm các yêu cầu còn lại của đề. Case ẩn chỉ báo đúng/sai, không nói chi tiết: tự tìm chỗ sai từ đề, hoặc mở gợi ý.
Testbench có mô hình tham chiếu riêng, độc lập với lời giải mẫu. Lời giải mẫu đã chạy qua mọi case trên simulator thật, và 4 bản lỗi mẫu đều bị ít nhất một case bắt. Case mẫu sai sẽ cho biết chỗ sai đầu tiên (giá trị mong đợi so với giá trị nhận được); case ẩn chỉ báo đúng/sai.