หมายเหตุ : Anders Kaseorg เตือนฉันว่านี่อาจเป็นปัญหาซ้ำซ้อนของคำถามก่อนหน้านี้อีกคำถามหนึ่ง ดูเหมือนจะเป็นเช่นนั้นและฉันขอโทษที่ฉันไม่พบคำถามนั้นก่อนโพสต์คำถามนี้ อย่างไรก็ตามคำถามนั้นได้รับคำตอบเพียงคำตอบเดียวและคำถามนี้ง่ายกว่าในกรณีที่คุณต้องการลองครั้งนี้ ฉันจะเข้าใจว่าคำถามนี้ท้ายถูกทำเครื่องหมายว่าซ้ำกัน
ความท้าทาย
รับอินพุตเช่นนี้:
8g 8Df 4cs 2C 1A
เขียนโปรแกรม / ฟังก์ชั่นที่สั้นที่สุดที่สร้างเอาต์พุตเช่นนี้:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
กฎระเบียบ
ผลลัพธ์จะต้องประกอบด้วยพนักงานห้าบรรทัดที่เริ่มต้นด้วยการวาด G-clef ตามที่แสดงด้านบนชิดกับด้านซ้ายของพนักงานและออกจากคอลัมน์เดียวหลังจากเริ่มต้นของพนักงาน
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
บันทึกจะต้องเริ่มต้นด้วย*
หรือo
ตัวอักษรขึ้นอยู่กับประเภทของมัน
ต้องมีตรงแปดคอลัมน์ของการแยกทุก*
หรือo
ตัวอักษร:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
เจ้าหน้าที่จะต้องจบด้วยเทอร์มินัลที่จัดชิดด้านขวาตามที่แสดงในตัวอย่าง แถบด้านซ้ายของเทอร์มิเนเตอร์ต้องแยก 8 คอลัมน์ออกจากบันทึกย่อล่าสุด
อินพุตจะเป็นสตริงเดี่ยวที่มีบันทึกย่อ (อย่างน้อยหนึ่งไม่มีอินพุตว่าง) แต่ละอันคั่นด้วยช่องว่าง (คุณสามารถพิจารณาว่าโน้ตทุกโน้ตจะเป็นสตริงที่เหมาะสมดังนั้นจึงไม่จำเป็นต้องตรวจสอบข้อผิดพลาด) คุณยังสามารถรับอินพุตเป็นอาร์เรย์ของสตริงโดยมีหมายเหตุต่อองค์ประกอบในอาร์เรย์ สำหรับแต่ละโน้ตตัวอักษรตัวแรกจะเป็นส่วนของความยาวโน้ต (คน1
สำหรับโน้ตทั้ง / จังหวะเต็มในดนตร , เริ่มต้นด้วยo
; 2
สำหรับครึ่งโน้ต / ขีดต่ำที่สุด , เริ่มต้นด้วยo
; 4
สำหรับโน้ต / ตะขอ , เริ่มต้นด้วย*
และ8
สำหรับแปด note / quaverเริ่มต้นด้วย*
) อักขระที่สองจะเป็นบันทึกย่อ (ดูตารางถัดไป) และอักขระที่สามเป็นตัวเลือกจะเป็นf
หรือF
สำหรับบันทึกย่อแบบแบนและs
หรือS
สำหรับบันทึกย่อที่คมชัด
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
เห็นได้ชัดว่าการป้อนข้อมูลจะต้องเคารพกรณีและปัญหาสำหรับบันทึก แต่คุณสามารถเลือกกรณีของf
และs
ปรับเปลี่ยน
หมายเหตุc
และA
จะต้องเพิ่มสอง-
(บรรทัดบัญชีแยกประเภท) หนึ่งในแต่ละด้านตามที่พวกเขาจะต้องขยายพนักงาน หมายเหตุd
และG
อยู่นอกพนักงาน แต่ไม่จำเป็นต้องมีบัญชีแยกประเภท
ธนบัตรที่แบนราบหรือแหลมขึ้นจะต้องเพิ่มb
หรือ#
วางสองตำแหน่งที่ด้านซ้ายของธนบัตร
ลำต้น (ถ้ามี) จะต้องวาดด้วยแถบแนวตั้ง 4 แถบ โน้ตจากb
และสูงกว่าต้องดึงก้านลงและที่ด้านซ้ายของโน้ต โน้ตจากa
และด้านล่างจะต้องดึงก้านขึ้นและที่ด้านขวาของโน้ต เควสจะต้องเพิ่มธงเสมอไปทางขวาและตรงตามที่แสดงและไม่จำเป็นต้องมีการยกไฟหากมีหลายคนในแถว
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
ตามปกติโปรแกรม / ฟังก์ชั่นของคุณสามารถดึงเอาท์พุทโดยตรงหรือคืนค่าสตริงอาร์เรย์ของสตริงเมทริกซ์ของตัวอักษรหรือรูปแบบที่เหมาะสมอื่น ๆ
ลิงค์ที่มีประโยชน์
นี่คือรหัสกอล์ฟดังนั้นโปรแกรม / ฟังก์ชั่นที่สั้นที่สุดสำหรับแต่ละภาษาจะชนะ!
โบนัส: ลองเขียนตัวอย่างที่มีท่วงทำนองที่โด่งดังและให้ทุกคนลองเดาว่ามันคือทำนองใด!