Diagram fretboard gitar terlihat seperti ini:
0 1 2 3 4 5 6 7 8 9 10 11 12 <- Fret number (0 means it's open)
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
|-B--C--C#-D--D#-E--F--F#-G--G#-A--A#-B
|-G--G#-A--A#-B--C--C#-D--D#-E--F--F#-G
|-D--D#-E--F--F#-G--G#-A--A#-B--C--C#-D
|-A--A#-B--C--C#-D--D#-E--F--F#-G--G#-A
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
Seperti yang Anda lihat, string pertama (dari atas) terbuka adalah E
. Fret pertama pada string pertama adalah F
. Fret keempat pada string ketiga adalah a B
. Perhatikan bahwa not pertama adalah fret nol, bukan yang pertama.
Ini dapat ditulis dengan angka pada format string, fret
. String diberi nomor dari 1 hingga 6 dari atas ke bawah. Fret diberi nomor dari 0 hingga 12 dari kiri ke kanan. Yang pertama E
karena itu 1, 0
. Beberapa contoh lain:
1, 0 --> E
1, 1 --> F
3, 5 --> C
5, 1 --> A#
6, 6 --> A#
Tantangan:
Ambil N
pasangan angka ( s
dan f
), dan hasilkan suksesi nada terbatas.
- Masukan mungkin dalam format apa pun yang sesuai. tuple, 2D-matrix, dua daftar terpisah, daftar yang saling terkait (string, fret, string, fret ...) dll.
- Nada keluaran harus dipisahkan, tetapi pembatasnya opsional (koma, spasi, tanda hubung ...). Outputnya bisa dalam huruf besar atau kecil.
s
(untuk string) akan berada dalam kisaran[1, 6]
(Anda dapat memilih untuk memiliki indeks 0)f
(untuk fret) akan berada dalam kisaran[0, 12]
Uji kasus dan contoh:
1 4 5 2 1 3 <- String
4 2 6 3 5 1 <- Fret
G# E D# D A G#
6 2 3 1 4 2 3 2 2 2 6 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12
E C A G F# E C# F# G G# D G# B
3 3 3 3 3 3 3 3 3 3 3 3 3 <- String
0 3 5 0 3 6 5 0 3 5 3 0 0 <- Fret
G A# C G A# C# C G A# C A# G G
// The same test case, but different input and output format:
(3,0)(3,3)(3,5)(3,3)(3,6)(3,5)(3,0)(3,3)(3,5)(3,3)(3,0)(3,0)
G,A#,C,G,A#,C#,C,G,A#,C,A#,G,G
Semoga sukses, dan senang bermain golf!
Jawaban:
05AB1E ,
48474340 byteMenggunakan pengodean CP-1252 .
Baik senar maupun fret berbasiskan 0.
Penjelasan
Cobalah online!
Disimpan 7 byte berkat Adnan
sumber
"AA#BCC#DD#EFF#GG#"•7V3•3BS£
bukannya"A A# B C C# D D# E F F# G G#"#
beberapa byte lebih pendek :)."AA#BCC#DD#EFF#GG#"
string:•™ÎÚ,Ülu•žh'#A«‡
(karena huruf kecil diperbolehkan: p).JavaScript (ES6),
7970 byteMembutuhkan string berbasis 1. Sunting: Disimpan 9 byte dengan langsung menghitung konversi string ke fret, berdasarkan jawaban lama @ nimi.
sumber
Mathematica, 62 byte (tidak bersaing)
The
{24,19,15,10,5,0}
dan theE2
mewakili nada senar terbuka dari enam senar gitar (misalnya, senar teratas adalah 24 semi nada di atas catatan E2). Non-bersaing karena tidak mencetak nama not-not — ia memainkan urutan not! (hanya jika Anda memiliki Mathematica, sayangnya) Misalnya,memainkan 4 bar pembuka dari Canon Pachelbel. (yaitu tentang sebanyak Pachelbel Canon yang saya bisa berdiri)
sumber
MATL ,
484745 byteTerima kasih kepada @Emigna untuk koreksi terkait format input.
Gitar dan kode golf ... Saya harus menjawab yang ini!
Format input adalah: array string (berbasis 1), kemudian array fret (berbasis).
Cobalah online!
Penjelasan
Beberapa fitur bahasa yang digunakan dalam jawaban ini:
Kode yang dikomentari:
sumber
Jawa, 174
Tidak Disatukan:
sumber
C,
104103 byteMengambil angka sebagai
string fret
pasangan di stdin, dan mengeluarkan catatan setelah setiap pasangan. Misalnya:sumber
Ruby, 63 byte
mengambil array array 2-elemen, dalam urutan
[string,fret]
.Penjelasan
Dalam penyetelan standar, gitar adalah salah satu dari beberapa instrumen senar (tertekuk atau resah) yang memiliki interval tidak konsisten di antara senar-senarnya. Sebagian besar memiliki interval 5-semiton yang konsisten antara semua pasangan string yang berdekatan ("keempat") atau interval 7-semiton yang konsisten antara semua pasangan string yang berdekatan ("kelima.") Ini sesuai dengan rasio frekuensi 3: 4 dan 2: 3 masing-masing, dan yang terpenting kedua hanya untuk "oktaf" dengan rasio frekuensi 1: 2.
Gitar sebagian besar memiliki interval 5-semitone. Jika memiliki 5 di antaranya akan memiliki perbedaan 25 semiton antara string 1 dan 6. Sebagai gantinya, interval antara string ke-2 dan ke-3 dikurangi menjadi 4 semiton, memberikan perbedaan 24 semiton (2 oktaf) yang lebih baik untuk memainkan akord.
Ini tidak nyaman untuk program ini, jadi kami mulai dengan mengubah intonasi gitar 1-indeks menjadi intonasi 5-string-bass 0 yang diindeks, yang memiliki semua interval 5 semiton:
Selanjutnya kita tambahkan 2, dan memberikan tuning dari 12 senar bass fiktif, dengan intonasi dari senar terbuka sebagai berikut, dan semua interval menjadi 5 semitones (12 senar "bass" memang ada tetapi saya tidak yakin ada banyak dengan tepat ini penyetelan.)
Seperti dapat dilihat, semua benda tajam dikelompokkan bersama. Pola ini dapat diulangi sampai tak terhingga. Ini dikenal sebagai "lingkaran kelima" dan merupakan dasar bagi skala musik Barat (dengan sedikit penyesuaian tuning, lingkaran dapat ditutup karena fakta bahwa
(3/2)**12
dan2**7
jumlahnya sangat mirip.Sekarang kita berurusan dengan parameter fret. Tidak seperti banyak jawaban lain di sini, yang menerjemahkan parameter string menjadi sejumlah fret, saya menerjemahkan parameter fret ke sejumlah string. Dalam tabel di atas dapat dilihat bahwa menambahkan 7 ke nomor string menempatkan kita pada string yang nama notnya satu semitone lebih tinggi. (Ini dalam oktaf yang sama sekali berbeda tapi itu tidak masalah.) Jadi kita tambahkan
i[1]*7
ke nomor string, dan bawa modulo 12:Kami mengurangi ini dari 6 untuk mendapatkan angka dalam kisaran 6 hingga -5 dan mencari huruf dalam
BEADGCF
(Ruby memungkinkan indeks negatif untuk membungkus kembali ke akhir array.) Jikan>=7
kita perlu menambahkan#
simbol untuk menyelesaikan output .Program uji
Keluaran
sumber
C #, 131 byte
Masukkan dua daftar terpisah, string berdasarkan 1.
sumber
Clora , 55 byte
@T[0,7,2,10,5,0,7]+N%12@T[,A,A#,B,C#,D,D#,E,F,F#,G,G#]!
Penjelasan
@
mode numerik (baca input sebagai angka)T[0,7,2,10,5,0,7]
Ubah input menggunakan array, ex array [Input]+N
Tambahkan N (Nilai input berikutnya) ke Input saat ini%12
Modulo 12 nilai input saat ini@
Tandai mode numerik matiT[,A,A#,B,C#,D,D#,E,F,F#,G,G#]
Terjemahkan input ke dalam array!
Gunakan input sebagai nilai outputsumber
Java 7
197, 163 byteTidak disatukan
sumber
Python 2,
94, 91, 88 byteMungkin ada beberapa perbaikan nyata yang harus dilakukan. Input adalah daftar pasangan, dan string diindeks 0, misalnya:
sumber
Haskell,
8382 byteMengambil daftar string dan daftar fret, keduanya diindeks 0. Contoh penggunaan:
Dari daftar nada tak terbatas yang dimulai dengan
A#
, jatuhkan jumlah catatan yang diberikan oleh daftar[6,1,9,4,11,6]
di indeks string dan pilih catatan di indeks fret dari daftar yang tersisa.sumber
(s*7)+(s>2)
- jadi saya sekarang menggunakan jawaban saya.JavaScript (ES6),
8281 byteSaya ingin mencoba semua jawaban matematika, tetapi ternyata agak lama. Mungkin ada cara untuk golf itu ...
Cuplikan tes
Tampilkan cuplikan kode
sumber
toString(17)
tetapi berjuang untuk mendapatkannya dalam jumlah byte yang masuk akal.PHP, 102 Bytes
Input sebagai banyak larik keduanya berdasarkan 0 misalnya '[[2,0], [5,3], [2,12], [3,8], [0,3]]'
Alternatif bagus 106 Bytes untuk mengatur # berdasarkan mod 7 kongruen
sumber