Görev
Belirli bir frekansa ayarlanmış ve belirli bir noktaya bastırılmış bir telin ayarlanmış kaç senti ile birlikte çalınan notayı belirlemek için bir program yazın.
Basitlik amacıyla, üretilen sesin frekansının ve basıldığı yerin sağındaki ipin uzunluğunun ters orantılı olduğunu varsayın.
Not: Bu görev tonları / diğer harmonikleri değil, yalnızca temel tonu ele alır.
Giriş
Programınıza iki veri parçası verilir:
Söz konusu dizeyi temsil eden rastgele uzunluktaki bir dize. Bu dize, dizenin basılı tutulacağı bir X ile işaretlenir.
[-----] is a string divided in six sections (five divisions). [--X--] is a string pressed at the exact center of the string. [X----] is a string pressed at 1/6 the length of the string. (Length used is 5/6) [-X--] is a string pressed at 2/5 of the length of the string. (Length used is 3/5)
Notun, dizenin sağındaki dize kısmı kullanılarak çalındığını varsayın
X
.- Dizenin ayarlanma sıklığını gösteren bir sayı (ille de bir tamsayı değil). Bu sayının kesinliği ondalık basamaktan sonra en fazla dört basamak olacaktır.
Geçilen frekansların 10 Hz
ve arasında olduğu varsayılabilir 40000 Hz
.
Giriş, seçtiğiniz bir biçimde geçirilebilir. Lütfen cevabınızda programınıza girdinin nasıl kabul edileceğini belirtin.
Çıktı
Programınız, hem on iki tonlu eşit mizaç ayarlama sistemindeki en yakın notayı * hem de dizeyle belirtilen sesin (en yakın kuruşa yuvarlanmış) en yakın notadan uzak sent sayısını çıkarmalıdır.
+n
sent n
, notanın keskin / üstünde sentleri ve notun -n
düz / altında sentleri belirtmek için kullanılmalıdır .
Not bilimsel adım notasyonunda verilmelidir. A4'ün ayarlandığını varsayın 440Hz
. Düz / keskin notlar için b ve # tuşlarını kullanın. Not: Keskin ya da düz kullanılabilir. Nota için 466.16Hz
, ya A#
ya Bb
not için çıkış olarak verilebilecektir.
Çıktıda yalnızca daha önce belirtilen iki bilgi parçası olduğu sürece çıktının biçimi size bağlıdır (örneğin, olası her çıktının yazdırılmasına izin verilmez).
* en yakın nota, sent sayısı ile ölçülen, giriş tarafından belirtilen sese en yakın notayı ifade eder (bu nedenle, 50 cents
sesin içindeki nota ). Ses 50 cents
iki farklı notadan uzaksa (yuvarlamadan sonra), iki notadan biri verilebilir.
Örnekler
Programınız yalnızca aşağıdaki örnekler için değil, tüm durumlar için çalışmalıdır.
Output Input Frequency Input String
A4, +0 cents 220 [-----X-----]
A5, +0 cents 220 [--------X--]
D5, -2 cents 440 [--X--------]
B4, -49 cents 440 [X----------]
A#4, +19 cents* 314.1592 [X-]
Eb9, +8 cents* 400 [-----------------------X]
Eb11,+8 cents* 100 [--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------X]
D#1, +49 cents* 10 [--X]
A0, -11 cents 11.7103 [---X--]
* Keskin veya düz çıkmış olabilir.
Potansiyel Olarak Faydalı Bağlantılar
Bu kod golf en kısa cevap kazanır.
[-X--]
, dize 4 yere bölünür (ve bu nedenle 5 parçaya) ve bu bölümlerin ikincisinde bastırılır. Böylece, tuşuna basılır 2/5
ve kullanılan uzunluk olur 3/5
.
-
temelde bölümlerin konumunu temsil ediyor, açıkladığınız için teşekkürler!
[--X--]
, dizex
yerleştirildiği bölümün ortasında basılırken, sonuncusu[-X--]
bu mantığı izlerken 3/8 (2/5 değil) olur. Yoksa yanlış bir şey mi anlıyorum?