Сильно упрощённое задание гитарного аккорда выглядит так:
- Сначала идёт буква ноты (A-G),
затем — необязательный знак бемоля b (нет у нот C и F) или диеза # (нет у нот B и E),
- Затем — необязательный модификатор аккорда "m", "Sus2", "SUS4", "7", "m7", "maj7", "M9", или "m9".
Кроме того, аккорд может сопровождаться табулатурой вида Аккорд: [шесть_номеров_ладов], где номер лада — это либо цифра, либо двузначное число в скобках (от 10 до 14 включительно); вместо номера лада может стоять "X" или "x" — это означает, что соответствующая струна не используется. Строй гитары считается классическим: E A D G B E.
- Написать программу, которая вводит строку и с помощью регулярных выражений выделяет из неё все задания аккордов, а если при аккорде указана табулатура — проверяет, есть ли в табулатуре тоника (взятая на какой-либо струне нота, по имени которой назван аккорд). На 12 ладу название ноты совпадает с открытой струной, на 13 и 14 — соответственно с 1 и вторым ладом.
Программа должна выводить тоники аккордов и добавлять «!», если табулатура указана, а тоники в ней нет.
C#M9: [XX(11)898] BAm CSus2: [x35533] G#maj7 A: [002220] Cbm9 Am9BbM9A#A: [11111] EM9: [099800] C: [000000]
На этой картинке изображена последовательность нот.
Каждая следующая нота берётся на один лад выше предыдущей (например, C: [X3XXXX], а C#: [X4XXXX])
Cbm9 — это не аккорд, а [11111] — не табулатура.
Некоторые тоники (например, E) могут встретиться на одной струне дважды: [0XXXXX] и [(12)XXXXX]
В [000000] нет C (там только E A D G B E)
C#M9 B Am CSus2 G#maj7 A C Am9 BbM9 A# A EM9 C!
