Tulis program terpendek yang menghasilkan tab gitar untuk akord yang diberikan sebagai input.
Agar gitaris di antara Anda tidak memiliki keunggulan, dan untuk membuatnya deterministik (dan mungkin lebih mudah untuk dikodekan), berikut adalah satu - satunya bentuk akord yang diotorisasi:
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---
Perhatikan bahwa 5 akord pertama dan 7 akord terakhir dari setiap seri memiliki bentuk yang berbeda.
Semua akor adalah akord mayor atau minor sederhana (tidak ada 7 atau variasi lainnya).
Anda harus merawat flat juga. Peringatan:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
Keluaran harus menyertakan kolom pertama dengan nama kabel, seperti yang ditunjukkan di atas. Itu tidak harus menyertakan nama chord di atas. Akord harus dipisahkan oleh 3 -
seperti yang ditunjukkan di atas. 3 final -
adalah opsional.
Input adalah string yang terdiri dari nama akor, dipisahkan oleh spasi.
Contoh input adalah:
Bm Gb A E G D Em F#
dan output yang sesuai adalah:
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---
Jawaban:
JavaScript,
297277262235223 karakterTidak ada carriage return dalam versi golf yang signifikan; mereka ada hanya untuk membuat jawaban itu bisa dibaca. Titik koma adalah signifikan.
Sunting: Mengganti bagian luar
map
dengan loop sementara dan suntingan lainnya. Akhirnya dalam 2 × ukuran versi Golfscript (untuk saat ini)!Sunting: Mengganti
indexOf
dengan matematika, memecah tabel pencarian, perbaikan kecil lainnya.Sunting: Lain
map
kefor
dan dimasukkan ke dalam final\n
saya tidak perlu makan. Akhirnya di dalam versi Python Jules.Output tidak lagi mengambil keuntungan dari trailing
---
menjadi opsional seperti:sumber
Golfscript, 136 karakter
Sepenuhnya 23 karakter (17,5%) berurusan dengan dua karakter di awal setiap baris output.
Output sampel, menguji kasus tepi:
Saya hanya menghabiskan sekitar satu jam untuk ini, jadi mungkin bisa dikurangi setidaknya 5 hingga 10 karakter. Secara konseptual ternyata sangat mirip dengan solusi DocMax: tabel pencarian untuk empat kasus, kemudian ditambahkan oleh offset dan bergabung dengan string dalam urutan yang benar.
sumber
Setelah mengkodekan ini, saya menyadari saya bisa melakukan ini jauh lebih pintar ... mungkin saya akan membuat entri lain. Semoga saja saya mendapatkan poin karena menjadi yang tercepat!
Bagaimanapun, ada 962 karakter Perl.
Berikut adalah output yang sesuai.
sumber
Karena solusi yang lebih pendek telah diberikan (Sialan GolfScript!), Inilah milik saya:
Python, 229 karakter
Keluaran:
sumber
Python, 449 karakter
sumber
C99 - 231 karakter
Akor diberikan pada baris perintah, satu argumen per akor, dan tentu saja tidak ada validasi input dalam bentuk apa pun.
Contoh dijalankan:
Tidak bermain golf
C - 206 karakter tidak standar
Jika kita tidak peduli dengan spesifikasi bahasa, GCC dapat mengkompilasi one-liner berikut ke dalam biner fungsional, meskipun ia mencampur deklarasi variabel C99 dengan deklarasi argumen gaya K&R (dan deklarasi printf secara implisit).
sumber
C ++, 432
Perhatikan bahwa ini membutuhkan penyetelan gitar sebagai parameter pertama. (Kebanyakan penyetelan non-standar akan memberi Anda hasil fingerbreak yang konyol, tapi saya rasa Anda puas dengan penyetelan standar.)
Untuk Hotel California, Anda bisa melakukannya
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Hasil:sumber
390 345340 Catatan tambahanDisederhanakan menjadi pendekatan gitar-pragmatis (bentuk E hanyalah variasi dari bentuk A, digeser ke bawah string, dengan perubahan satu jari). Meminjam ide string yang disandikan dari jawaban lain.
Sebelumnya:
450 442418 Catatan tambahanSaya memperbaiki format output dengan yang ini juga. (Versi sebelumnya mulai "E ---" daripada "e".)
Cara menjalankannya:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(sembunyikan tajam dari cangkang).Versi un-golfed hampir lebih sulit daripada versi golf. Tetapi saya berusaha untuk teliti. Sunting: beberapa komentar lagi pada bits-tricky.
Dan bagaimana dengan House of the Rising Sun sebagai ujian?
sumber