Напишите самую короткую программу, которая генерирует гитарные вкладки для аккордов, указанных в качестве входных данных.
Чтобы у вас среди гитаристов не было преимущества, и чтобы сделать его детерминированным (и, вероятно, более простым для кодирования), вот единственные разрешенные формы аккордов:
Major chords:
E F F# G G# A A# B C C# D D#
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---2---3---4---5---6---7---8---
G 1---2---3---4---5---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---
Minor chords:
Em Fm F#m Gm G#m Am A#m Bm Cm C#m Dm D#m
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---1---2---3---4---5---6---7---
G 0---1---2---3---4---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---
Обратите внимание, что 5 первых аккордов и 7 последних аккордов каждой серии имеют разные формы.
Все аккорды являются простыми мажорными или минорными аккордами (без 7-й или других вариаций).
Вы должны заботиться о квартирах тоже. Напоминание:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
Выходные данные должны содержать первый столбец с именами кабелей, как показано выше. Он не должен включать название аккорда на вершине. Аккорды должны быть разделены на 3, -
как показано выше. Финальные 3 -
являются необязательными.
Ввод - это строка, состоящая из имен аккордов, разделенных пробелами.
Пример ввода:
Bm Gb A E G D Em F#
и соответствующий вывод:
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---
Ответы:
JavaScript,
297277262235223 символаНикакие возвраты каретки в версии для гольфа не имеют значения; они существуют только для того, чтобы сделать ответ читабельным. Точки с запятой значимы.
Редактировать: заменен внешний
map
цикл while и другие правки. Наконец внутри 2 × размер версии Golfscript (пока)!Изменить: Заменены
indexOf
с математикой, сломали таблицу поиска, другие небольшие улучшения.Edit: Еще
map
доfor
и положить в окончательном\n
я был излишне еды. Наконец в версии Python Жюля.Выход больше не использует преимущество трейлинга
---
как:источник
Golfscript, 136 символов
23 символа (17,5%) имеют дело с этими двумя символами в начале каждой строки вывода.
Пример вывода, тестирование крайних случаев:
Я потратил на это всего около часа, так что, вероятно, его можно уменьшить как минимум на 5-10 символов. Концептуально это оказывается очень похоже на решение DocMax: ищите таблицу для четырех случаев, затем увеличивайте смещение и соединяйте строки в правильном порядке.
источник
После этого я понял, что мог бы сделать это намного умнее ... возможно, я сделаю еще одну запись. Надеюсь, я просто получу очки за то, что был самым быстрым!
Во всяком случае, есть 962 символов Perl.
Вот соответствующий вывод.
источник
Поскольку более короткие решения уже были даны (черт возьми, GolfScript!), Вот мое:
Питон, 229 символов
Выход:
источник
Python, 449 символов
источник
C99 - 231 символов
Аккорды задаются в командной строке, по одному аргументу в аккорде, и, конечно, нет никакой проверки входных данных.
Образец прогона:
Un-golfed
Нестандартный C - 206 знаков
Если нам не нужны языковые спецификации, GCC может скомпилировать следующую однострочную строку в функциональный двоичный файл, даже если он смешивает объявления переменных C99 с объявлением аргументов в стиле K & R (и неявным объявлением printf).
источник
C ++, 432
Обратите внимание, что это требует настройки гитары в качестве первого параметра. (Большинство нестандартных настроек даст вам смешные результаты, но я думаю, что вы довольны стандартной настройкой.)
Для отеля Калифорния вы можете сделать
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Результат:источник
390 345340 ПостскриптумУпрощено до прагматического подхода к гитаре (форма E - это всего лишь вариация формы A, сдвинутая вниз по струне, со сменой одного пальца). Заимствовал идею закодированной строки из других ответов.
Ранее:
450 442418 ПостскриптумЯ исправил выходной формат с этим тоже. (Предыдущие версии начинались с «E ---», а не «e».)
Как его запустить:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(спрячьте острие от раковины).Версия без гольфа была почти сложнее, чем игра в гольф. Но я старался быть тщательным. Изменить: еще несколько комментариев на хитрости.
А как насчет Дома Восходящего Солнца в качестве теста?
источник