ได้รับหน่วย


10

ท้าทาย

รับรายการของหน่วยพื้นฐาน SI รายการสมการและเป้าหมายคุณต้องได้รับหน่วยของเป้าหมายโดยใช้หน่วยพื้นฐานเท่านั้น

หน่วยที่ได้รับ

จากวิกิพีเดีย:

ระบบระหว่างประเทศของหน่วย (SI) ระบุชุดของหน่วยฐานเจ็ดที่หน่วยวัด SI อื่น ๆ ทั้งหมดจะได้รับ หน่วยอื่น ๆ เหล่านี้ (หน่วยที่ได้รับจาก SI) ไม่มีขนาดหรือสามารถแสดงเป็นผลิตภัณฑ์ที่มีกำลังของหน่วยพื้นฐานหนึ่งหน่วยหรือมากกว่า

ตัวอย่างเช่นหน่วยที่ได้มาจากพื้นที่ SI คือตารางเมตร (m 2 ) และหน่วยความหนาแน่น SI ที่ได้มาคือกิโลกรัมต่อลูกบาศก์เมตร (kg / m 3หรือ kg m −3 )

หน่วยฐาน SI ทั้งเจ็ด ได้แก่ :

  • แอมแปร์,
  • Candela, cd
  • เคลวิน, เค
  • กิโลกรัมกิโลกรัม
  • เมตร, เมตร
  • โมลโมล
  • ประการที่สองs

ตัวอย่าง

อินพุต

หน่วยฐาน:

d [m]
m [kg]
t [s]

สมการ:

v = d/t
a = v/t
F = m*a
E = F*d

เป้าหมาย:

E

เอาท์พุต

E [kg*m*m/s/s]

อินพุต

หน่วยฐาน:

G [cd]
L [m]
y [A]
a [K]

สมการ:

T = y*y/L
A = T*G

เป้าหมาย:

A

เอาท์พุต

A [cd*A*A/m]

กฎระเบียบ

หน่วยจะได้รับเสมอในแบบฟอร์ม

a [b]

โดยที่aจะเป็นตัวอักษรตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเดียวและbจะเป็นหน่วย (หนึ่งตัวหรือมากกว่า)

สมการจะอยู่ในรูปแบบ

a = c

ไหนcจะการแสดงออกซึ่งจะเท่านั้นที่เคยใช้หน่วยที่กำหนดไว้ก่อนหน้านี้และผู้ประกอบการและ*/

ต้องขยายพลัง ยกตัวอย่างเช่นหน่วยของพื้นที่อย่างเป็นทางการแต่คุณควรแสดงนี้เป็นm^2 m*mเช่นเดียวกับอำนาจเชิงลบเช่นความเร็ว ( m*s^-1) m/sซึ่งควรจะแสดงเป็นส่วนหนึ่ง: ในทำนองเดียวกันหน่วยสำหรับการเร่งm/s^2หรือควรจะแสดงเป็นm*s^-2m/s/s

คุณไม่ต้องทำการยกเลิกใด ๆ ยกตัวอย่างเช่นการส่งออกแม้จะถูกต้องแม้ว่ามันจะสามารถยกเลิกได้ลงไปC*s/kg/sC/kg

ไม่มีการสั่งซื้อที่เฉพาะเจาะจงสำหรับการคูณคือkg*s/m, s/m*kg, s*kg/mถูกต้องทั้งหมด ( แต่/m*s*kgไม่ถูกต้อง)

หมายเหตุ: คุณจะไม่ต้องหารด้วยหน่วยที่ได้รับมา

การชนะ

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ



จำเป็นต้องใช้อินพุท (เอาท์พุท) (กำหนด) เป็นสตริงหรือเป็นชนิด / โครงสร้างอื่น ๆเช่นสัญลักษณ์ยอมรับได้หรือไม่?
Julian Wolf

@JulianWolf ไม่ I / O ต้องเป็นสตริง
Beta Decay

คำตอบ:


12

เรติน่า50 50ไบต์

 =

+`((.) (.+)\D*)\2(?!\w*])
$1$3
A-2`
](.).
$1

ลองออนไลน์!

คำอธิบาย

 =

ลบเครื่องหมายเท่ากับทั้งหมดพร้อมกับช่องว่างด้านหน้า ใครต้องการเหล่านั้นอยู่ดี ...

+`((.) (.+)\D*)\2(?!\w*])
$1$3

จะทำการทดแทนปริมาณที่ทราบ มันตรงกับคำจำกัดความของปริมาณซ้ำ ๆ กัน (ปริมาณคืออักขระใด ๆ ที่อยู่ด้านหน้าของช่องว่างและคำนิยามของสตริงหลังจากนั้น) รวมถึงบางสถานที่หลังจากคำจำกัดความที่มีการใช้ปริมาณนั้นและแทรกคำนิยามสำหรับการใช้งาน เราแยกหน่วยออกจากการแข่งขันเหล่านั้น (โดยตรวจสอบให้แน่ใจว่าไม่มี]หลังการแข่งขัน) ดังนั้นเราจึงไม่ได้แทนที่[m]ด้วย[[kg]]ตัวอย่าง การทดแทนนี้ทำซ้ำจนกว่า regex จะไม่จับคู่อีกต่อไป (ซึ่งหมายความว่าไม่มีการใช้ปริมาณที่เหลืออยู่และทุกบรรทัดถูกเปลี่ยนเป็นการแสดงออกของหน่วย)

A-2`

ยกเลิกทั้งหมดยกเว้นบรรทัดสุดท้าย

](.).
$1

ในที่สุดลบวงเล็บเหลี่ยมที่ไม่เกี่ยวข้อง โดยพื้นฐานแล้วเราต้องการให้คนแรก[และคนสุดท้าย]แต่ทิ้งคนอื่นทั้งหมด คนอื่น ๆ เหล่านั้นมักจะปรากฏขึ้นพร้อมกับผู้ประกอบการในระหว่างดังนั้นไม่ว่าจะเป็นหรือเป็น]*[ ]/[แต่ที่สำคัญกว่านั้นคือกรณีเดียวที่ a ]ตามด้วยอักขระอีกสองตัว ดังนั้นเราจึงจับคู่ทั้งหมด]กับตัวละครสองตัวหลังพวกเขาและแทนที่ด้วยตัวที่สองของตัวละครทั้งสามเพื่อรักษาผู้ประกอบการ


1

JavaScript (ES6), 155 153 152 ไบต์

(U,E,T)=>(u={},U.map(x=>u[x[0]]=x.slice(3,-1)),e={},E.map(x=>e[x[0]]=x.slice(4)).map(_=>s=s.replace(r=/[A-z]/g,m=>e[m]||m),s=e[T]),s.replace(r,m=>u[m]))

ใช้หน่วยพื้นฐานและสมการเป็นอาร์เรย์ของสตริง

คำอธิบาย

// Base Units, Equations, Target
(U,E,T)=>(
    // Map variable names to SI units
    u={},
    U.map(x=>u[x[0]]=x.slice(3,-1)), // x[0] is the variable name,
                                     // x.slice(3,-1) is the unit

    // Map variable names to equations
    e={},
    E.map(x=>e[x[0]]=x.slice(4)) // x[0] is the variable name,
                                 // x.slice(4) is the unit

    // (Initialize return string to the target variable's equation
    // using the (useless) second argument to .map() below)
    // s=e[T]

    // For as many times as there are equations (chained from above),
    .map(_=>
        // Substitute each variable with its equivalent expression
        // if there is one.
        s=s.replace(
            r=/[A-z]/g, // Save this regex for final step.
            m=>e[m]||m
        ),

        // The working string variable is initialized here.
        s=e[T]
    ),

    // Substitute remaining variables with SI units and return. 
    s.replace(r,m=>u[m])
)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.