คำนวณความต้านทานของตัวต้านทานรหัสสี 4 แบนด์


29

ตัวต้านทานทั่วไปมีวงดนตรีที่รหัสสีที่ใช้ในการระบุตัวตนของพวกเขาที่มีความต้านทานในOhms ในความท้าทายนี้เราจะพิจารณาเฉพาะตัวต้านทานแบบแบนด์ 4 แบนแทนสีแทนแกนแนวแกนเท่านั้น เราจะแสดงเป็น:

xyzt

ที่ไหนxเป็นวงแรกสำหรับความหมายแรกyเป็นวงที่สองสำหรับความหมายที่สองzวงที่สามสำหรับการคูณและtเป็นวงที่สี่สำหรับความอดทน

แต่ละxyztตัวแทนจดหมายที่ย่อสีของวงดนตรี:

K = Black
N = Brown
R = Red
O = Orange
Y = Yellow
G = Green
B = Blue
V = Violet
A = Gray
W = White
g = Gold
s = Silver
_ = None

ยกตัวอย่างเช่นNKOgตัวต้านทานบางตัว

สามารถคำนวณความต้านทานด้วยความช่วยเหลือของตารางนี้:

ตารางรหัสสีตัวต้านทาน

ตามตารางแนะนำ:

  • xและyสามารถเป็นตัวอักษรใด ๆ ยกเว้นg, และs_
  • z_สามารถเป็นอะไรก็ได้ยกเว้น
  • เราจะ จำกัดtจะเป็นเพียงg, หรือs_

( ต่อไปนี้เป็นเครื่องคำนวณความต้านทานแบบพกพาที่เกี่ยวข้องกับตัวต้านทานที่เราเป็นชุดเดียวกัน )

ความต้านทานเป็น10 * x + yครั้งzคูณ, ความอดทนของที่tร้อยละ

ตัวอย่างเช่นในการคำนวณความต้านทานของNKOgเราจะเห็นว่า:

  1. N หมายถึงสีน้ำตาลสำหรับ 1
  2. K หมายถึง Black สำหรับ 0
  3. Oหมายถึงสีส้ม 10 3
  4. g หมายถึงทองคำสำหรับ± 5%

ดังนั้นความต้านทาน→(10*1 + 0)*10^310000 Ω ±5%

ท้าทาย

เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสตริง 4 ลักษณะของรูปแบบและภาพพิมพ์หรือผลตอบแทนต้านทานในรูปแบบxyzt[resistance] Ω ±[tolerance]%

  • ตัวต้านทานอาจจะ "กลับหัว" เช่นในลำดับกลับtzyxกัน ยกตัวอย่างเช่นทั้งสองNKOgและควรผลิตgOKN10000 Ω ±5%
  • ความต้านทานอยู่ในรูปแบบโอห์มเสมอไม่เคยมีหน่วยเป็นกิโลกรัมหรือเมกะเฮิร์ตซ์
  • Ωอาจถูกแทนที่ด้วยเช่นohms10000 ohms ±5%
  • ±อาจถูกแทนที่ด้วยเช่น+/-10000 Ω +/-5%
  • การมีศูนย์ต่อท้ายทางด้านขวาของจุดทศนิยมนั้นใช้ได้ (เช่น10000.0 Ω +/-5%)
  • คุณสามารถสมมติว่าอินพุตถูกต้องเสมอ ( xและyไม่gs_; zไม่เคย_; tเท่านั้นgs_)
  • ตัวต้านทานที่เป็นไปได้ 10 × 10 × 12 × 3 = 3600 ทั้งหมด (2 × 3600 อินพุตที่เป็นไปได้) จำเป็นต้องได้รับการสนับสนุนแม้ว่าจะไม่มีการสร้างชุดสีวงในชีวิตจริงก็ตาม

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

ตัวอย่าง

  1. gOKN10000 ohms +/-5%
  2. KKR_0 Ω +/-20%
  3. ggKN1 ohms ±5%
  4. ggGO3.5 Ω ±5%
  5. ssGO0.350 Ω ±10%
  6. GOOs53000 ohms +/-10%
  7. YAK_48.0 ohms +/-20%
  8. _WAV78000000000 Ω ±20%
  9. gBBB66000000.000 ohms ±5%
  10. _RYR2400.00 ohms ±20%

ขอให้สนุกกับความท้าทายลองเช็คBlock Building Bot Flocks!

คำตอบ:



9

CJam, 53 51 50 ไบต์

" Ω ±"l_W%e<)iB%5*F-'%@"gKNROYGBVAW"f#:(2/'e*s~o

ลองมันออนไลน์

(ขอบคุณ @ user23013 สำหรับไบต์)


ฉันเริ่มต้นใน Python แต่

eval("%d%de%d"%tuple("gKNROYGBVAW".find(x)-1for x in L))

แพงเกินไป ...


2
:(2/'e*s~[บันทึก
jimmy23013

@ user23013 Ah ขอบคุณฉันได้ลองหลายวิธีในการแทรกeที่จำเป็น แต่ฉันไม่เคยคิด/และ*
Sp3000

4

Python 3, 130 114 bytes

def f(v):
 a,b,c,d=["_sgKNROYGBVAW".index(x)-3for x in v[::(1,-1)[v[0]in'sg_']]]
 return "%s Ω ±%s%%"%((10*a+b)*10**c,2.5*2**-d)

แก้ไข: @ ชี้ให้เห็นว่าการสั่งซื้อ SP3000 สามารถตรวจพบได้ดีขึ้นด้วยmin(v,v[::-1])มากกว่าv[::(1,-1)[v[0]in'sg_']](ประหยัด 10 ไบต์) ได้ตรวจสอบดัชนีของ_และลบบางช่องว่างที่ไม่จำเป็น

def f(v):a,b,c,d=["sgKNROYGBVAW".find(x)-2for x in min(v,v[::-1])];return"%s Ω ±%s%%"%((10*a+b)*10**c,2.5*2**-d)

ขอบคุณ - ฉันตระหนักถึงการต่อสาย แต่ฉันพลาดเคล็ดลับในmin()การตรวจสอบการสั่งซื้อที่ถูกต้อง - ดีมาก
chronitis


1

Haskell, 135 132 130 ไบต์

r y|y<"["=p[k|j<-y,(c,k)<-zip"_ sgKNROYGBVAW"[-4..],c==j]
r y=r.reverse$y
p[a,b,c,d]=show((a*10+b)*10**c)++" Ω ±"++show(-5*d)++"%"

คำอธิบาย:

r y|y<"["=            If first letter of argument is a capital
p[..]                 Call p on the list created
[k|                   Make a list of all k
   j<-y               Draw character j from input
       ,(c,k)<-       With (c,k) being a pair from
               zip    A list of pairs of corresponding elements from the lists:
"_ sgKNROYGBVAW"       The space at 2nd position is to match '_' with -4, but 's' with -2
[-4..]                 An infinite list starting at -4
,c==j]                Only use element k if j equals the character c

r y=r.reverse$y       If first call fails, call again with reversed argument.

p[a,b,c,d]=           Assign the first four elements of the argument to a,b,c,d respectively.
show                  Turn (number) into string
10**c                 10 to the power of c
++                    Concatenate strings
-5*d                  This works for the tolerance because '_' makes d=-4

ขอบคุณ nimi ฉันจึงโกนอีก 2 ไบต์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.