Napisz najkrótszy program, który generuje tabulatury gitarowe dla akordów podanych jako wejście.
Aby gitarzyści spośród was nie mieli przewagi i aby uczynić ją deterministyczną (i prawdopodobnie łatwiejszą do kodowania), oto jedyne dozwolone formy akordów:
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---
Zauważ, że 5 pierwszych akordów i 7 ostatnich akordów z każdej serii mają różne formy.
Wszystkie akordy są prostymi większymi lub mniejszymi akordami (nr 7 lub inne odmiany).
Powinieneś także zadbać o mieszkania. Przypomnienie:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
Dane wyjściowe muszą zawierać pierwszą kolumnę z nazwami przewodów, jak pokazano powyżej. To nie nie muszą zawierać nazwę akordu na górze. Akordy muszą być oddzielone 3-
jak pokazano powyżej. Ostatnie 3 -
są opcjonalne.
Dane wejściowe to ciąg znaków składający się z nazw akordów oddzielonych spacjami.
Przykładowe dane wejściowe to:
Bm Gb A E G D Em F#
a odpowiednie wyjście to:
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---
Odpowiedzi:
JavaScript,
297277262235223 znakówBrak zwrotów karetki w wersji golfowej jest znaczący; są one tylko po to, aby odpowiedź była czytelna. Średniki są znaczące.
Edycja: zamieniłem zewnętrzną
map
na pętlę while i inne zmiany. Wreszcie wewnątrz 2 × wielkości wersji Golfscript (na razie)!Edycja: Zastąpiłem
indexOf
matematyką, zepsułem tablicę odnośników, inne drobne poprawki.Edit: Inną
map
sięfor
i umieścić w końcowej\n
I zostały niepotrzebnie jedzenia. Wreszcie wewnątrz wersji Julesa w języku Python.Dane wyjściowe nie korzystają już z
---
opcjonalnego zakończenia , ponieważ:źródło
Golfscript, 136 znaków
W pełni 23 znaki (17,5%) dotyczą tych dwóch znaków na początku każdego wiersza wyjściowego.
Przykładowe dane wyjściowe, testowanie przypadków na krawędziach:
Spędziłem na tym tylko około godziny, więc prawdopodobnie można go zmniejszyć przynajmniej o 5 do 10 znaków. Koncepcyjnie okazuje się, że jest całkiem podobne do rozwiązania DocMax: tabela odnośników dla czterech przypadków, następnie zwiększ o przesunięcie i połącz ciągi we właściwej kolejności.
źródło
Po zakodowaniu tego, zdałem sobie sprawę, że mogłem zrobić to znacznie mądrzej ... może zrobię kolejny wpis. Mam nadzieję, że dostanę punkty za bycie najszybszym!
W każdym razie jest 962 znaków Perla.
Oto odpowiednie wyjście.
źródło
Ponieważ już podano krótsze rozwiązania (cholera, GolfScript!), Oto moje:
Python, 229 znaków
Wydajność:
źródło
Python, 449 znaków
źródło
C99 - 231 znaków
Akordy są podawane w wierszu poleceń, jeden argument na akord i oczywiście nie ma żadnego rodzaju sprawdzania poprawności wejściowej.
Przykładowy przebieg:
Nie grał w golfa
Niestandardowe C - 206 znaków
Jeśli nie dbamy o specyfikacje językowe, GCC może skompilować następujący jednowierszowy plik do funkcjonalnego pliku binarnego, nawet jeśli miesza deklaracje zmiennych C99 z deklaracją argumentów w stylu K&R (i niejawną deklaracją printf).
źródło
C ++, 432
Zauważ, że wymaga to strojenia gitary jako pierwszego parametru. (Większość niestandardowych ustawień dostarczy ci absurdalnych wyników, ale wydaje mi się, że jesteś zadowolony ze standardowego strojenia.)
W przypadku hotelu California możesz to zrobić
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Wynik:źródło
390 345340 PostscriptumUproszczone do gitarowo-pragmatycznego podejścia (kształt E jest tylko odmianą kształtu A, przesuniętego w dół struny, z jedną zmianą palca). Pożyczkę z zakodowanym ciągiem znaków uzyskałem z innych odpowiedzi.
Poprzednio:
450 442418 PostscriptumNaprawiłem również format wyjściowy z tym. (Poprzednie wersje zaczynały się „E ---” zamiast „e”.)
Jak go uruchomić:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(ukryj ostrze przed skorupą).Wersja bez golfa była prawie trudniejsza niż wersja z golfem. Ale starałem się być dokładny. Edycja: jeszcze kilka komentarzy na temat podstępnych bitów.
A co powiesz na House of the Rising Sun jako test?
źródło