Rất nhiều người thích chơi nhạc để giải trí và giải trí. Thật không may, âm nhạc đôi khi khá khó khăn. Đó là lý do tại sao bạn ở đây!
Bài tập
Đó là công việc của bạn để làm cho việc đọc nhạc dễ dàng hơn nhiều đối với những người đấu tranh với nó. Bạn cần viết một chương trình hoặc chức năng làm đầu vào cho một nhân viên âm nhạc và xuất ra tên của các ghi chú được viết trên nhân viên đó.
Nhân viên, khóa, và ghi chú
Một nhân viên âm nhạc , hoặc stave, là năm dòng ngang, giữa là bốn không gian. Mỗi dòng hoặc không gian đại diện cho một ghi chú khác nhau (cao độ), tùy thuộc vào khóa của âm nhạc.
Có một vài loại khóa âm nhạc khác nhau để lựa chọn, nhưng bây giờ chúng ta sẽ chỉ giao dịch với một loại khóa : âm treble . Trên khóa của âm bổng, các ghi chú được thể hiện trên các nhân viên như sau:
Dòng F ---------- Đ ---------- B ---------- G ---------- E ----------
Không gian ---------- E ---------- C ---------- Một ---------- F ----------
Định dạng của đầu vào
Đầu vào sẽ được cung cấp dưới dạng một chuỗi, như sau:
--------------- --------------- --------------- --------------- ---------------
Năm dòng và bốn không gian của nhân viên được xây dựng trong chín hàng ký tự. Các dòng của nhân viên được xây dựng với các -
ký tự (gạch nối) và khoảng trắng với ( dấu cách ). Mỗi hàng được phân tách với hàng tiếp theo bởi một ký tự dòng mới, ví dụ:
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
Các hàng có độ dài tùy ý (đến một mức hợp lý có thể được xử lý bằng ngôn ngữ lập trình của bạn) và mỗi hàng có độ dài chính xác bằng các ký tự như các ký tự khác. Cũng lưu ý rằng các hàng sẽ luôn có độ dài chia hết cho ba (để phù hợp với mẫu của một ghi chú theo sau là hai cột không có ghi chú).
Ghi chú được đặt trên nhân viên này bằng cách thay thế phù hợp -
hoặc nhân vật với
o
. Các ghi chú cũng có thể được nâng lên (sắc nét) hoặc hạ thấp (bằng phẳng) theo một nửa cung (khoảng một nửa độ chênh lệch tần số giữa một nốt và các nốt liền kề của nó). Điều này sẽ được đại diện bởi các nhân vật #
và b
, tương ứng, thay cho o
. Mỗi ghi chú sẽ được phân tách từ tiếp theo bởi chính xác hai -
ký tự và ghi chú đầu tiên sẽ luôn xuất hiện trên "cột" đầu tiên của -
và (khoảng trắng) ký tự.
Khi xuất tên ghi chú, chương trình của bạn phải luôn sử dụng các chữ cái viết hoa ( A B C D E F G
) tương ứng với ghi chú được đưa ra cho nhân viên. Đối với các ghi chú sắc nét ( #
) và phẳng ( b
), chương trình của bạn cần nối thêm #
và b
tương ứng vào chữ cái tương ứng với ghi chú. Đối với một ghi chú tự nhiên không sắc nét hoặc bằng phẳng, một (không gian) nên được thêm vào.
Thí dụ
Đầu vào:
--------------------- o-- o --------------- o -------- o --------- b -------------- o --- o -------------------- o ------------------------
* lưu ý tất cả "khoảng trống" trong ví dụ này thực sự là (ký tự khoảng trắng ).
Trong trường hợp này (thang đo F đơn giản), chương trình của bạn sẽ xuất ra điều này:
FGA Bb CDEF
Lưu ý khoảng cách giữa các ký tự của đầu ra phải chính xác như được hiển thị ở trên, để khớp chính xác với các ghi chú trên nhân viên. Giữa tất cả các tên ghi chú có hai ký tự (dấu cách), ngoại trừ giữa
Bb
và C
. Ở b
đây thay thế một trong các ký tự (không gian).
Một ví dụ khác
Đầu vào:
------------------------ o ------------------ # ----- # ------------ o ----------- o ------ # ----------------- # o -----------------------
Đầu ra:
E F# G# A B C# D# E
Thêm một ví dụ nữa cho sự may mắn
Đầu vào:
--------------------- ồ --------------------- o --------------------- --------------- o - o-- ---------------------
Đầu ra:
E E E C E G G
Quy tắc
- Ghi chú sẽ chỉ được đưa ra trong phạm vi năm nhân viên của E phẳng đến F sắc nét (ngoại trừ các thách thức, xem bên dưới)
- Bất kỳ ghi chú nào cũng có thể sắc nét hoặc bằng phẳng, không chỉ những nốt thường thấy trong âm nhạc (ví dụ: mặc dù B # thực sự chỉ được phát dưới dạng C trong thực tế, B # vẫn có thể xảy ra trong đầu vào)
- Bạn có thể giả sử sẽ có chính xác một nốt trên 3 cột (vì vậy sẽ không có hợp âm hoặc bất cứ thứ gì tương tự, và cũng không có phần còn lại)
- Bạn có thể giả sử ghi chú cuối cùng sẽ được theo sau bởi hai cột không có ghi chú
- Bạn có thể giả sử ngay cả dòng cuối cùng của nhân viên sẽ được theo sau bởi một ký tự dòng mới
- Đầu vào phải được lấy từ STDIN (hoặc ngôn ngữ tương đương) hoặc làm tham số chức năng
- Đầu ra phải là STDOUT (hoặc ngôn ngữ tương đương) hoặc là kết quả trả về nếu chương trình của bạn là một hàm
- Lỗ hổng tiêu chuẩn và tích hợp được cho phép! Âm nhạc là về thử nghiệm và chơi xung quanh. Hãy tiếp tục và vui vẻ với ngôn ngữ của bạn (mặc dù nhận ra rằng việc khai thác lỗ hổng có thể không tạo ra chương trình thú vị nhất)
- Đây là môn đánh gôn , vì vậy chương trình ngắn nhất tính bằng byte thắng
Thử thách tiền thưởng
- -10% nếu chương trình của bạn cũng có thể xử lý thành công không gian phía trên dòng trên cùng của nhân viên (G, G #, Gb).
- -10% nếu chương trình của bạn cũng có thể xử lý thành công không gian bên dưới dòng dưới cùng của nhân viên (D, D #, Db)
- Trong những trường hợp này, chương trình của bạn sẽ lấy đầu vào là một hàng bổ sung ở đầu và cuối; các hàng này phải được xử lý giống hệt như chín hàng khác