Hitung Resistansi Kode Warna 4 Band Resistor

29

Resistor umumnya memiliki pita kode warna yang digunakan untuk mengidentifikasi resistensi mereka dalam Ohm . Dalam tantangan ini kita hanya akan mempertimbangkan resistor 4-band, tan, aksial-lead normal. Kami akan menyatakannya sebagai:

xyzt

Di mana xband pertama untuk angka signifikan pertama, yadalah band kedua untuk angka signifikan kedua, zband ketiga untuk pengganda, dan tmerupakan band keempat untuk toleransi .

Masing-masing xyztmewakili huruf yang menyingkat warna band:

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

Jadi, misalnya, NKOgadalah beberapa resistor khusus.

Resistansi dapat dihitung dengan bantuan tabel ini:

Tabel kode warna resistor

Seperti yang ditunjukkan tabel:

  • xdan ydapat setiap huruf kecuali g, s, dan _.
  • zbisa apa saja kecuali _.
  • Kami akan membatasi thanya menjadi g, satau _.

( Inilah kalkulator resistensi berguna yang menangani set resistor yang sama persis dengan kami. )

Perlawanan adalah 10 * x + ykali zpengganda, dengan toleransi tpersentase.

Misalnya, untuk menghitung hambatan NKOg, kita melihat bahwa:

  1. N berarti Brown untuk 1.
  2. K berarti Hitam untuk 0.
  3. Oberarti Oranye untuk 10 3 .
  4. g berarti Emas untuk ± 5%.

Jadi perlawanannya (10*1 + 0)*10^310000 Ω ±5%.

Tantangan

Tulis program atau fungsi yang mengambil string karakter 4 formulir xyztdan mencetak atau mengembalikan hambatan dalam formulir [resistance] Ω ±[tolerance]%.

  • Resistor mungkin "terbalik", yaitu dalam urutan terbalik tzyx. Misalnya, keduanya NKOgdan gOKNharus menghasilkan 10000 Ω ±5%.
  • Perlawanan selalu dalam ohm polos, tidak pernah kilohms, megohms, dll.
  • Ωdapat diganti dengan ohms, mis 10000 ohms ±5%.
  • ±dapat diganti dengan +/-, mis 10000 Ω +/-5%.
  • Memiliki titik nol di sebelah kanan titik desimal baik-baik saja. (mis. 10000.0 Ω +/-5%)
  • Anda dapat berasumsi bahwa input selalu valid ( xdan ytidak pernah gs_; ztidak pernah _; thanya gs_).
  • Semua 10 × 10 × 12 × 3 = 3600 kemungkinan resistor (2 × 3600 input yang mungkin) perlu didukung bahkan jika beberapa kombinasi pita warna tidak diproduksi dalam kehidupan nyata.

Kode terpendek dalam byte menang.

Contohnya

  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%

Iff Anda menikmati tantangan saya, pertimbangkan memeriksa Block Building Bot Flocks!

Hobi Calvin
sumber

Jawaban:

10

CJam, 59 58 56 50 byte

r_W%e>"sgKNROYGBVAW"f#2f-~A*+A@#*" Ω ±"@[KA5]='%

Cobalah online di juru bahasa CJam .

Dennis
sumber
9

CJam, 53 51 50 byte

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

Cobalah online .

(Terima kasih kepada @ user23013 untuk satu byte)


Saya mulai dengan Python, tetapi

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

terlalu mahal ...

Sp3000
sumber
2
:(2/'e*s~menyimpan [.
jimmy23013
@ user23013 Ah terima kasih, saya sudah mencoba banyak cara memasukkan di emana itu perlu, tapi saya tidak pernah memikirkan /dan*
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)

sunting: @ Sp3000 menunjukkan bahwa pemesanan dapat dideteksi dengan min(v,v[::-1])lebih baik daripada v[::(1,-1)[v[0]in'sg_']](menghemat 10 byte), tidak memeriksa indeks _dan menghapus beberapa spasi kosong yang tidak perlu.

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)
kronis
sumber
Terima kasih - saya menyadari tentang menggabungkan garis, tetapi saya melewatkan trik menggunakan min()untuk mendeteksi pemesanan yang benar - bagus.
Kronik
3

Perl, 93 byte

#!perl -lp
ord>90and$_=reverse;s/./-3+index zsgKNROYGBVAW,$&/ge;$_=s/..\K/e/*$_." Ω ±"./.$/*5*$&."%"
nutki
sumber
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)++"%"

Penjelasan:

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

Berkat nimi, saya mencukur 2 byte lagi.

AplusKminus
sumber