Sebelum Anda pergi, Anda tidak perlu memahami banyak notasi musik untuk melakukan tantangan ini.
PENJELASAN
Dalam musik lembar standar, double clefs melintasi halaman yang berfungsi sebagai titik referensi ke not, sehingga Anda tahu not apa yang harus dimainkan. Jika Anda belum terbiasa dengan treble dan bass clef, berikut adalah deskripsi dari Wikipedia:
Clef adalah simbol musik yang digunakan untuk menunjukkan nada not tertulis. Ditempatkan pada salah satu garis di awal paranada, itu menunjukkan nama dan nada catatan pada garis itu. Baris ini berfungsi sebagai titik referensi dimana nama catatan pada baris lain atau ruang paranada dapat ditentukan.
Pada gambar di atas, bagian atas dari garis adalah kunci Treble, dilambangkan dengan a
Setengah bagian bawah adalah kunci Bass, dilambangkan dengan a
Seperti yang Anda lihat di treble clef catatan di paling bawah garis adalah E . (Saya tidak menghitung catatan di luar garis clef untuk tantangan ini) Di clef bass, garis terendah adalah G . Untuk menyelesaikan tantangan ini, Anda harus melakukan hal berikut:
TANTANGAN
Diberikan input dalam salah satu bentuk berikut (pilihan Anda), mengubahnya menjadi kunci sebaliknya. Apakah itu Treble atau Bass clef dapat menjadi nilai Truthey / Falsey dalam bahasa Anda (bukan sembarang dua nilai), mis.
F # T atau F # True atau F # Treble
tapi tidak
F # -1 atau F # 4
Spasi dan kapitalisasi adalah opsional, Susun tidak akan muncul, dan trailing spasi tidak diizinkan.
Input Expected Output
E Treble G
F Treble A
F# Treble A#
G Treble B
G# Treble C
A Treble C
A# Treble C#
B Treble D
C Treble E
C# Treble F
D Treble F
D# Treble F#
E Treble G
F Treble A
F# Treble A#
G Bass E
G# Bass F
A Bass F
A# Bass F#
B Bass G
C Bass A
C# Bass A#
D Bass B
D# Bass C
E Bass C
F Bass D
F# Bass D#
G Bass E
G# Bass F
A Bass F
A# Bass F#
Diperingatkan, ini bukan tantangan perbedaan konstan sepele. Perhatikan baik-baik input dan output. Jika Anda melihat piano,
kunci hitam adalah benda tajam, dilambangkan dengan #. Perhatikan bahwa tidak ada E # atau B #. Ini berarti bahwa jika Anda diberikan G # pada kunci Bass, alih-alih mengembalikan E # , Anda harus mengembalikan F
Ini adalah kode-golf , sehingga byte-count terkecil menang.
sumber
C
bukanC
) oke?1
dan-1
(atau bahkan mengatakan,4
dan-4
) untuk input indikator clef diperbolehkan atau apakah ini hanya dapat diterima jika nilai-nilai itu benar / salah dalam bahasa kita?Jawaban:
Jelly ,
3534 byteSaya merasa beberapa aritmatika dapat memenangkan metode ini.
Cobalah online!
Sebuah program penuh mengambil 1) indikator clef
0
atau1
untuk Bass atau Treble masing-masing dan 2) catatan; dan mencetak catatan yang dihasilkan.Akan menjadi 31 byte jika
-4
dan4
dapat diterima sebagai nilai input indikator kunci (kemudianÑi+_⁸?4ị¢
dapat menjadiÑi+⁸ị¢
) tetapi ini telah diklarifikasi sebagai tidak diizinkan kecuali -4 adalah palsu dan 4 benar, yang tidak berlaku untuk Jelly.Bagaimana?
Buat keyboard dengan phantom
B#
danE#
kunci, temukan indeks input, offset yang dengan4
arah yang diperlukan, indeks kembali ke keyboard dengan kunci phantom digantikan oleh hasil yang diperlukan (tombol di atas mereka):sumber
Befunge,
7064 byteCobalah online!
Input harus dalam bentuk
C# Treble
atauF Bass
, meskipun kunci dapat dengan mudah menjadi huruf pertama (yaituT
atauB
), karena sisa input diabaikan.Penjelasan
Sebagai hasil dari modifikasi kode ini, urutan instruksi selanjutnya akan mengambil satu dari dua bentuk:
Pada titik ini tumpukan berisi
note,0,sharp,space
ataunote,0,space
.Pada titik ini tumpukan berisi
note,0
atau hanyanote
(dengan nol implisit di bawah).sumber
Perl 5, 56 byte
Membaca note dan clef sebagai dua baris dari STDIN dan mencetak note baru ke STDOUT. Kunci
0
untuk treble dan1
untuk bass.sumber
-p
flag tio.run/##K0gtyjH9/79YX08/OaNIwcxUW0PXRMvGTju/KEVFTVPVXD/…JavaScript (ES6) 74 byte
Mengambil input dalam sintaks currying
(note)(clef)
manaclef
adalah0
untuk bass dan1
untuk treble .Demo
Tampilkan cuplikan kode
Bagaimana?
Ini sebenarnya sedikit kurang menyenangkan daripada versi saya sebelumnya, tetapi tabel pencarian yang mendasarinya sekarang
F#,C#,(unused),D#,A#,F,C,G,D,A,E,B,F
memungkinkan untuk memperpendek kondisi # sambil menghindari trik karakter NUL - yang agak garis batas, saya kira.Versi sebelumnya
7675 byteDemo
Tampilkan cuplikan kode
Bagaimana?
Input (n, c) diproses melalui langkah-langkah berikut:
Kami pertama mengevaluasi
4 * !!n[1] + c + n
mana!!n[1]
yang benar (dipaksa untuk 1 ) jika catatan berisi # , dan palsu (dipaksa untuk 0 ) sebaliknya. Ekspresi4 * !!n[1] + c
menghasilkan nilai numerik yang ditambahkan di depan string n .Langkah tersirat: angka nol di depan dan # jejak diabaikan oleh
parseInt()
. Misalnya,"5G#"
sebenarnya diurai sebagai"5G"
.Kami mengonversi string baru ke nilai desimal dengan menguraikannya sebagai kuantitas basis-21.
Kami menerapkan modulo 24.
Kami menerapkan modulo 17.
Di bawah ini adalah tabel ringkasan untuk semua pasangan input yang memungkinkan, bersama dengan output yang diharapkan. Perhatikan bahwa # harus ditambahkan ke output jika hasil akhirnya adalah 0 , 2 , 3 atau 5 . Oleh karena itu penggunaan topeng biner 101101 ( 45 dalam desimal).
sumber
Python 2 , 77 byte
Fungsi yang mencetak ke
STDOUT
.True
mengkonversi bass ke treble, danFalse
mengubah treble ke bass.Cobalah online!
Penjelasan:
N=ord(n[0])-63-4*c;
,, menghitung indeks (0 hingga 7) dari surat catatan baru, mengabaikan benda tajam.ord(N[0])-63-4*c
mendapatkan indeks huruf saat ini, dan menambah atau mengurangi 2 tergantung pada nilaic
(variabel untuk beralih arah konversi)M=-~N%3<1<len(n);
menghitung apakah variabel ini perlu disesuaikan atau tidak. Misalnya, jika catatan baruE
, dan catatan asli memiliki nada tajam, ini harus disesuaikan denganF
. Ketidaksetaraan dirantai bekerja sebagai berikut:-~N%3<1
memeriksa apakah indeks not baru dalam urutan3n-1
. Ini hanya akan menghasilkan true untukE
danB
, dua not yang tidak memiliki tajam.1<len(n)
memeriksa apakah not asli memiliki tajam (ini akan membuat panjang string lebih besar dari 1). Ini perlu karena, jika tidak ada yang tajam, tidak perlu menyesuaikan surat-surat catatan baru.M
untuk salah satuTrue
atauFalse
, yang dapat digunakan dalam perhitungan sebagai1
dan0
masing - masing, sehingga untuk melakukan penyesuaian kita hanya perlu menambahkan M ke N dan modulo dengan 7.chr((N+M)%7+65)
menambahkan penyesuaian jika perlu, lalu mengonversi nilai dari indeks kembali ke karakter.+n[1:2-M]
akan menambahkan simbol yang tajam jika keduanyaM=0
(tidak ada penyesuaian dibuat) dan nilai aslinya juga memiliki yang tajam.sumber
Java 8, 119 byte
Penjelasan:
Coba di sini.
sumber
n->b->((char)((n.charAt(0)-(b?0:4))%7+65)+n.substring(1)).replaceAll("B#","C").replaceAll("E#","F")
R , 111 byte
Cobalah online!
Tidak Disatukan:
sumber