Dễ

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

stringparsingcomparetrap

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

  1. Cùng số phần, cùng số chữ sốmẫu
  2. 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.

Đang kết nối máy chấm…
Đang nạp bản nháp…

Tab để thụt lề. Nhấn Esc rồi Tab để rời trình soạn. Bản nháp tự lưu trong trình duyệt.

Gợi ý

Mỗi gợi ý mở trước khi AC giảm 10% điểm của đề.

Lời giải và phân tích

Lịch sử nộp bài

Chưa có lượt nào.

Độ khó: Dễ. Điểm gốc 20.