Năm nay là 930, và Giáo hội Gregorian đang gặp vấn đề. Họ có hàng ngàn trang nhạc thánh ca, nhưng vấn đề là tất cả các bản nhạc chỉ đơn giản được ném lên một đống thay vì có bất kỳ hệ thống tổ chức thực sự nào:
Hình ảnh của người chơi gamerprinter tại Cartographers 'Guild .
Giáo hội cần tổ chức tất cả các bản nhạc, vì vậy họ đã thuê một kỹ sư phần mềm thời trung cổ để viết một chương trình để tổ chức nó cho họ. Bạn là kỹ sư phần mềm đã được thuê. Tuy nhiên, quá trình biên soạn trong thời trung cổ liên quan đến chương trình được viết lên giấy bởi một nhóm các kinh sư chậm trong Kinh thánh. Để giảm thời gian cần thiết cho nhóm các nhà ghi chép để biên dịch mã của bạn, bạn phải làm cho chương trình càng nhỏ càng tốt.
Giáo hội muốn âm nhạc thánh ca được tổ chức dựa trên quy mô âm nhạc mà họ được viết. Tất cả nhạc thánh ca của Giáo hội được viết theo thang âm Dorian . Đưa ra các ghi chú của một bản nhạc nhất định, chương trình của bạn sẽ xuất ra thang âm Dorian. Nó ở đây, tôi sẽ giải thích chính xác thang âm Dorian là gì. Nếu bạn đã biết, bạn có thể bỏ qua phần này.
Có 12 nốt có thể trong bất kỳ giai điệu nào. Ở đây họ theo thứ tự:
C C# D D# E F F# G G# A A# B
Một nửa cung (được biểu diễn bằng cách sử dụng a S
) đang tăng một bước sang phải, bao quanh (vì vậy một nửa cung từ B sẽ trở lại C). Một âm (được biểu diễn bằng a T
) là hai nửa cung. Chẳng hạn, một nửa cung lên từ F # sẽ là G. Một âm lên từ F # sẽ là G #.
Để tạo thang đo Dorian, chúng tôi bắt đầu từ bất kỳ ghi chú nào trong danh sách, sau đó di chuyển lên theo mẫu sau, liệt kê các ghi chú mà chúng tôi gặp phải:
T, S, T, T, T, S
Một ví dụ. Tôi bắt đầu từ A. Các ghi chú của thang Dorian của tôi trở thành:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
Quy mô có ghi chú A, B, C, D, E, F #, và G. Bởi vì tôi bắt đầu từ A, chúng tôi sẽ gọi đây là quy mô Dorian A . Do đó, có 12 thang Dorian khác nhau, mỗi thang được đặt tên theo ghi chú mà chúng bắt đầu. Mỗi người trong số họ sử dụng cùng một mẫu âm và nửa cung, chỉ bắt đầu từ một vị trí khác nhau. Nếu lời giải thích của tôi không mạch lạc, bạn cũng có thể tham khảo Wikipedia .
Đầu vào của chương trình có thể được cung cấp từ bất cứ điều gì phù hợp với chương trình của bạn (ví dụ STDIN, đối số dòng lệnh, raw_input()
). Nó có thể không được khởi tạo trước trong một biến. Đầu vào sẽ là một danh sách các ghi chú được phân tách bằng dấu phẩy, thể hiện giai điệu của bản nhạc. Có thể có ghi chú lặp đi lặp lại. Sẽ luôn có đủ các ghi chú khác nhau trong đầu vào để có thể suy luận quyết định tỷ lệ của mảnh. Một ví dụ đầu vào:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Đầu ra của chương trình phải là chuỗi Dorian scale in X
, trong đó X là ghi chú bắt đầu của thang đo. Đầu ra của đầu vào ví dụ:
Dorian scale in B
So sánh điều này với thang âm Dorian trong B ( B C# D E F# G# A
) chúng ta thấy rằng tất cả các nốt của giai điệu đều nằm trong thang âm này. Lưu ý C # không được sử dụng trong trường hợp này. Tuy nhiên, có đủ ghi chú để xác định rõ ràng B Dorian là khóa chính xác. Không có thang âm Dorian nào phù hợp, bởi vì bất kỳ thang âm nào khác mà chúng tôi thử, luôn có ít nhất một nốt nhạc của giai điệu không thuộc về thang âm.
Đây là mã golf, vì vậy, mục có số lượng nhân vật ngắn nhất sẽ thắng. Hỏi trong các ý kiến nếu bạn có câu hỏi.