Tính toán điện trở của điện trở được mã hóa 4 dải màu


29

Các điện trở thường có các dải màu được sử dụng để xác định điện trở của chúng trong Ohms . Trong thử thách này, chúng tôi sẽ chỉ xem xét các điện trở dẫn 4 băng, tan, hướng trục thông thường. Chúng tôi sẽ thể hiện chúng như:

xyzt

Trường hợp xban nhạc đầu tiên cho con số đáng kể đầu tiên, ylà ban nhạc thứ hai cho nhân vật quan trọng thứ hai, zban nhạc thứ ba cho cấp số nhân và tlà ban nhạc thứ tư cho dung sai .

Mỗi xyztđại diện cho một chữ cái viết tắt màu của ban nhạc:

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

Vì vậy, ví dụ, NKOglà một số điện trở cụ thể.

Điện trở có thể được tính toán với sự trợ giúp của bảng này:

Bảng mã màu điện trở

Như bảng gợi ý:

  • xycó thể là bất kỳ chữ trừ g, s_.
  • zcó thể là bất cứ điều gì ngoại trừ _.
  • Chúng tôi sẽ hạn chế tchỉ được g, shoặc _.

( Đây là một máy tính điện trở tiện dụng liên quan đến chính xác cùng một bộ điện trở. )

Điện trở 10 * x + ygấp zbội số nhân, với dung sai ttỷ lệ phần trăm.

Ví dụ, để tính toán điện trở của NKOg, chúng ta thấy rằng:

  1. N có nghĩa là màu nâu cho 1.
  2. K có nghĩa là Đen cho 0.
  3. Ocó nghĩa là màu cam cho 10 3 .
  4. g có nghĩa là Vàng cho ± 5%.

Vậy điện trở là (10*1 + 0)*10^310000 Ω ±5%.

Thử thách

Viết chương trình hoặc hàm nhận chuỗi 4 ký tự của biểu mẫu xyztvà in hoặc trả về điện trở trong biểu mẫu [resistance] Ω ±[tolerance]%.

  • Các điện trở có thể là "lộn ngược", tức là theo thứ tự ngược lại tzyx. Ví dụ, cả hai NKOggOKNnên sản xuất 10000 Ω ±5%.
  • Điện trở luôn ở trạng thái đơn giản, không bao giờ kilohms, megohms, v.v.
  • Ωcó thể được thay thế bằng ohms, ví dụ 10000 ohms ±5%.
  • ±có thể được thay thế bằng +/-, ví dụ 10000 Ω +/-5%.
  • Có các số 0 ở bên phải của một dấu thập phân là tốt. (ví dụ 10000.0 Ω +/-5%)
  • Bạn có thể cho rằng đầu vào luôn hợp lệ ( xykhông bao giờ gs_; zkhông bao giờ _; tchỉ gs_).
  • Tất cả 10 × 10 × 12 × 3 = 3600 điện trở có thể (2 × 3600 đầu vào có thể) cần được hỗ trợ ngay cả khi một số kết hợp dải màu không được tạo ra trong cuộc sống thực.

Mã ngắn nhất tính bằng byte thắng.

Ví dụ

  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%

Nếu bạn thích những thách thức của tôi, hãy xem xét việc kiểm tra Block Building Bot Flocks!

Câu trả lời:



9

CJam, 53 51 50 byte

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

Hãy thử trực tuyến .

(Cảm ơn @ user23013 cho một byte)


Tôi đã bắt đầu bằng Python, nhưng

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

quá đắt ...


2
:(2/'e*s~tiết kiệm [.
jimmy23013

@ user23013 À cảm ơn, tôi đã thử rất nhiều cách để chèn vào enơi cần thiết, nhưng tôi chưa bao giờ nghĩ đến /*
Sp3000

4

Python 3, 130 114 byte

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)

chỉnh sửa: @ Sp3000 chỉ ra rằng thứ tự có thể được phát hiện tốt hơn min(v,v[::-1])thay vì v[::(1,-1)[v[0]in'sg_']](tiết kiệm 10 byte), không kiểm tra chỉ mục _và loại bỏ một số khoảng trắng không cần thiết.

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)

Cảm ơn - Tôi nhận ra về việc nối các dòng, nhưng tôi đã bỏ lỡ mẹo sử dụng min()để phát hiện thứ tự chính xác - tốt đẹp.
viêm chron

3

Perl, 93 byte

#!perl -lp
ord>90and$_=reverse;s/./-3+index zsgKNROYGBVAW,$&/ge;$_=s/..\K/e/*$_." Ω ±"./.$/*5*$&."%"

1

Haskell, 135 132 130 byte

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)++"%"

Giải trình:

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

Nhờ nimi, tôi đã cạo đi 2 byte khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.