Сильно упрощённое задание гитарного аккорда выглядит так:
- Сначала идёт буква ноты (A-G),
затем — необязательный знак бемоля b (нет у нот C и F) или диеза # (нет у нот B и E),
- Затем — необязательный модификатор аккорда "m", "7", "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]
Cbm9 — это не аккорд, а [11111] — не табулатура.
C#M9 B Am CSus2 G#maj7 A C Am9 BbM9 A# A EM9 C!
