[Buổi 31][Củng cố OOP nâng cao][ADV] Bài 1: Plugin Metric Pipeline có fallback


LÀM BÀI

Points: 100
Time limit: 2.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Plugin Metric Pipeline có fallback

Bối cảnh

Một pipeline đánh giá record (id,a,b) chạy qua một plugin metric được chọn khi runtime:

  • SUM: score=a+b.
  • RATIO: score=a/b; nếu b=0 ném runtime_error.
  • DIFF: score=abs(a-b).
  • WEIGHTED: score=2a+3b.

Mỗi plugin kế thừa abstract MetricPlugin với score(a,b)name(). Pipeline cần:

  1. Với từng record, chạy plugin; nếu plugin ném lỗi thì dùng fallback score=0 và tăng fallbackCount.
  2. Lưu kết quả bằng generic Result<T> gồm id, score, pluginName.
  3. Xếp result theo score giảm; tie ID tăng.
  4. In top k id:score, tổng score và fallbackCount.

Bài Hard mô phỏng kiến trúc plugin: core pipeline không đổi khi thêm metric mới, lỗi của một record không dừng batch, và generic result object tách representation kết quả khỏi loại plugin. Đây là bài tổng hợp cuối Module 08 trước Final Design Review.

B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.

B31 là phần tích hợp, nên bài toán cần thể hiện trách nhiệm giữa nhiều abstraction thay vì chỉ ghép cú pháp. Polymorphism chịu trách nhiệm thay behavior; template chịu trách nhiệm reuse theo type; exception chịu trách nhiệm recovery khi input/state bất hợp lệ. Core workflow phải tiếp tục giữ invariant dù một record hoặc command bị lỗi.

Yêu cầu

  1. Abstract MetricPlugin + 4 derived.
  2. Runtime plugin chọn một lần cho toàn batch.
  3. Exception per record có fallback.
  4. Template Result<double>.
  5. TOP k + TOTAL + FALLBACKS.

Input

Dòng 1 plugin n k; n dòng id a b.

Output

Ba dòng TOP, TOTAL, FALLBACKS.

Ràng buộc

1≤n≤5000, a,b trong |1e9|.

Ví dụ 1

Input

RATIO 4 3
A 10 2
B 5 0
C 9 3
D -4 2

Output

TOP A:5.00 C:3.00 B:0.00
TOTAL 6.00
FALLBACKS 1

Giải thích

RATIO: A=5, B lỗi b=0 nên fallback0, C=3, D=-2. Ranking A5,C3,B0,D-2; TOP3 A,C,B. Total6, fallbackCount1.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Ví dụ 2

Input

SUM 3 5
A 1 2
B 3 4
C -1 1

Output

TOP B:7.00 A:3.00 C:0.00
TOTAL 10.00
FALLBACKS 0

Giải thích

SUM scores A3,B7,C0. k5 nhưng chỉ có3 record, ranking B7,A3,C0. Không plugin error nên FALLBACKS0 và total10.

Mẫu này kiểm tra pipeline ở mức tích hợp: input đi qua validation, chọn runtime behavior, cập nhật aggregate rồi mới sinh output. Nếu một bước thất bại, fallback/ERROR phải đúng contract và các summary phía sau không được tính nhầm dữ liệu lỗi. Vì vậy trace mẫu chính là kiểm tra invariant xuyên suốt workflow.

Thông tin học tập

  • Module: M08
  • Buổi: B31
  • Loại bài: ADVANCED
  • Độ khó: Hard
  • Concepts: plugin polymorphism, template result, exceptions, ranking, extensible pipeline
  • Giới hạn kiến thức: B01-B31
  • Time limit: 2 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo