Hôm qua, tôi đã mua một cây kèn kèn:
Hình 1: Bản hòa âm.
Tuy nhiên, giấc mơ của tôi về việc có thể chơi những bản hòa tấu blues có hồn khiến mọi người cảm động và khiến một người đàn ông trưởng thành khóc nhanh chóng bị hai vấn đề:
- Bản hòa âm chỉ có thể chơi một số nốt nhất định;
- Tôi rất tệ khi chơi kèn harmonica.
Mặc dù tôi không có kỹ năng về hòa âm, nhưng vẫn có một số bài hát mà tôi có thể chơi trên đó. Tuy nhiên, không rõ ràng ngay lập tức nếu tôi có thể chơi một số bản nhạc trên bản hòa âm hay không. Đưa ra các nốt nhạc của một bản nhạc, viết một chương trình để xác định xem tôi có thể chơi nó trên bản hòa âm của mình hay không.
Như hình trên cho thấy, bản hòa âm của tôi có mười lỗ. Với mỗi lỗ, tôi có thể thở ra hoặc hít vào nó - lỗ mà tôi chọn, và liệu tôi hít vào hay thở ra vào nó sẽ thay đổi cao độ của âm thanh phát ra. Mỗi lỗ có một mức độ khác nhau khi thở ra và hít vào, nhưng có một số kết hợp dẫn đến cùng một lưu ý. Nhìn chung, kèn kèn của tôi có thể chơi 19 nốt khác nhau. Các nốt nhạc được trình bày trong ký hiệu khoa học âm nhạc - chữ cái đại diện cho nốt nhạc, và con số đại diện cho quãng tám của nó.
Hole Breathing Note
1 Exhale C4
1 Inhale D4
2 Exhale E4
2 Inhale G4
3 Exhale G4
3 Inhale B4
4 Exhale C5
4 Inhale D5
5 Exhale E5
5 Inhale F5
6 Exhale G5
6 Inhale A5
7 Exhale C6
7 Inhale B5
8 Exhale E6
8 Inhale D6
9 Exhale G6
9 Inhale F6
10 Exhale C7
10 Inhale A6
Ví dụ, nếu tôi thở ra ở lỗ 3, tôi sẽ nhận được một G4
ghi chú. Nếu tôi hít vào lỗ 2, tôi cũng sẽ nhận được một G4
ghi chú. Nếu tôi thở ra ở hố số 7, tôi sẽ nhận được a C6
.
Khi tôi thở vào harmonica, ngoài việc thở ra hoặc hít vào, tôi cũng có thể chọn để thở mỏng hoặc rộng rãi . Hít thở mỏng chỉ khiến một lỗ phát ra âm thanh, trong khi thở rộng gây ra một lỗ và cả hai lỗ ở hai bên của lỗ đó phát ra âm thanh. Tôi không có kỹ năng đắp nổi để thổi vào hai lỗ - đó là một hoặc ba.
Ví dụ, nếu tôi thở ra một cách mỏng manh vào lỗ 4, chỉ có lỗ 4 sẽ phát ra âm thanh, vì vậy tôi sẽ có được âm thanh C5. Nếu tôi thở ra rộng rãi vào lỗ 4, lỗ 3, 4 và 5 sẽ phát ra âm thanh và tôi sẽ nhận được hợp âm G4, C5, E5. Nếu tôi hít vào lỗ 4, lỗ 3, 4 và 5 sẽ phát ra âm thanh nhưng thay vào đó họ sẽ chơi các nốt hít, dẫn đến hợp âm B4, D5, F5. Lưu ý rằng đối với các lỗ ở hai đầu, nếu tôi thở rộng vào chúng chỉ có hai lỗ sẽ phát ra (vì không có lỗ 0 hoặc lỗ 11).
Tuy nhiên, tôi không thể hít vào và thở ra cùng một lúc. Chẳng hạn, tôi có thể thở ra các lỗ 4, 5 và 6 để tạo ra các nốt C5, E5 và G5 cùng lúc, tạo thành một hợp âm. Tuy nhiên, tôi không thể hít vào và thở ra cùng một lúc, vì vậy tôi không thể chơi hợp âm C5, F5, A5 vì tôi phải thở ra bằng cách nào đó ở lỗ 4 và hít vào lỗ 5 và 6. Nếu Điều này vẫn chưa rõ ràng, chủ đề bình luận này có thể hữu ích.
Đầu vào là các ghi chú của âm nhạc. Các ghi chú được ký hiệu giống như cách chúng ở trên bảng và chúng được phân tách bằng dấu phẩy. Ghi chú được bọc trong dấu ngoặc nhọn đại diện cho một hợp âm. Ví dụ:
C4,D4,G4,{D5,F5,A5},B5
Điều này có nghĩa là, "C4, rồi D4, rồi G4, rồi D5, F5 và A5 cùng một lúc, rồi B5." Chương trình của bạn sẽ lấy một chuỗi ở định dạng này làm đầu vào và đầu ra True
nếu tôi có thể phát nhạc trên bản hòa âm của mình, hoặc False
nếu không. Đối với đầu vào và đầu ra mẫu, ví dụ trên nên xuất ra True
. Mặt khác, đầu {C5,F5,A5}
vào sẽ xuất ra False
.
Đây là mã golf, vì vậy mục ngắn nhất sẽ thắng.
Dưới đây là một số trường hợp thử nghiệm:
Đầu vào (AC Major scale):
C4,D4,E4,F4,G4,A4,B4,C5
Đầu ra:
False
(vì hòa âm không thể chơi F4 hoặc A4)
Đầu vào (2 thanh mở của Let It Go ):
E6,F6,A5,E6,F6,F6,E6,A5,F6,E6
Đầu ra:
True
Đầu vào:
{E6,G6,F6}
Đầu ra:
False
Đầu vào:
{G4,C5,E5},{F5,A5,B5}
Đầu ra:
True
Bạn có thể cho rằng các hợp âm sẽ đến theo thứ tự cao hơn đến cao hơn.