Đưa ra hai tên ghi chú, bạn phải viết một chương trình xác định xem khoảng thời gian được tạo bởi hai ghi chú này là phụ âm hay phụ âm.
Giới thiệu
Trong âm nhạc phương Tây, chỉ có 12 âm "khác nhau". Tên của họ, được sắp xếp từ thấp nhất đến cao nhất, là : C, C#, D, D#, E, F, F#, G, G#, A, A#, B
. Trình tự là theo chu kỳ, tức là nó tiếp tục với cái khác C
sau B
, vô tận.
Khoảng cách giữa hai âm được gọi là một khoảng . Khoảng cách giữa bất kỳ hai ghi chú rằng là liền kề trong loạt trên (ví dụ C — C#
hay E — F
) được gọi là một semitone . Khoảng thời gian giữa các ghi chú xa hơn được định nghĩa là số bước nửa cung cần thiết để có được từ lần đầu tiên đến lần thứ hai (trong khi có thể bao quanh chuỗi). Một số ví dụ: D to E
= 2 semitones, C to G
= 7 semitones, B to D#
= 4 semitones (phần này bao quanh chuỗi). 1
Bây giờ, các khoảng này được chia thành hai loại: phụ âm (âm thanh dễ chịu nếu bạn chơi hai nốt cùng một lúc) và không đồng nhất (không quá nhiều).
Hãy xác định các khoảng phụ âm là: 0, 3, 4, 5, 7, 8 và 9 semitones.
Phần còn lại của chúng là không đồng nhất, cụ thể là: 1, 2, 6, 10 và 11 semitones.
Các thách thức
Viết một "chương trình" (theo nghĩa rộng thông thường của từ này: một hàm hoàn toàn ổn) để làm như sau:
Lấy hai tên ghi chú (chuỗi từ chuỗi trên) làm đầu vào. Bạn có thể lấy chúng theo cách bạn thích (từ stdin, làm đối số, được phân tách bằng bất cứ thứ gì bạn muốn, thậm chí thoải mái lấy chúng làm danh sách các ký tự (ví dụ
["C","#"]
). Tuy nhiên, bạn không được gán bất kỳ tên nào khác cho ghi chú (đặc biệt là bạn không được đánh số chúng từ 0 đến 11 và sử dụng các số).Đối với bạn những người đam mê âm nhạc ngoài kia, các ghi chú sẽ được chỉ định mà không có quãng tám. Trong trường hợp này, nó cũng không quan trọng theo thứ tự các ghi chú đến và thấp hơn và cao hơn. Cuối cùng, bạn không cần phải xử lý bất kỳ tên nào không có trong danh sách trên. Không có cải tiến khác như
E#
, không có căn hộ, thay đổi kép và như vậy.Chọn bất kỳ hai giá trị khác nhau. Chương trình của bạn phải xuất một trong số chúng bất cứ khi nào khoảng thời gian được hình thành bởi hai ghi chú trong đầu vào là phụ âm và cái còn lại nếu không. (Có thể
True
vàFalse
, nhưng thậm chí là π và e nếu bạn muốn :))Đây là một mã golf. Chương trình ngắn nhất tính theo byte trong mỗi ngôn ngữ sẽ thắng. Chúc vui vẻ!
Ví dụ và trường hợp thử nghiệm
Note 1 Note 2 Output Interval [semitones]
C D Dissonant 2
A# A# Consonant 0
G D Consonant 7 (wraparound)
D# A Dissonant 6
F E Dissonant 11
A C Consonant 3
Tôi không thêm nhiều người trong số họ vì không có trường hợp đặc biệt nguy hiểm nào trong việc này.
Đây là một thử thách đầu tiên của tôi, vì vậy mọi lời chỉ trích mang tính xây dựng đều được chào đón nồng nhiệt:. Nếu bạn thấy lý thuyết cẩu thả, hãy đặt câu hỏi. Cuối cùng, xin đừng nói với tôi rằng đây là bản sao của cái này hay cái này . Tôi chắc chắn là không. (Cái sau khá giống nhưng phức tạp hơn. Tôi nghĩ rằng việc đưa ra một thử thách đơn giản hơn một chút sẽ giúp mọi người tham gia dễ dàng hơn.)
1 : Tôi đã cố gắng đơn giản hóa lời giải thích này hết mức có thể. Có rất nhiều lý thuyết xung quanh các khoảng. Xin đừng đánh tôi vì đã để nó ra ngoài.