4 Bant Renk Kodlu Direnç Direncini Hesapla


29

Dirençler sık olması renk kodlu bantları kendi tanımlamak için kullanılır direncini de Ohm . Bu mücadelede sadece normal 4-bant, tan, eksenel-kurşun dirençleri dikkate alacağız. Onları şöyle ifade edeceğiz:

xyzt

xİlk önemli rakam için ilk bant nerede , yikinci önemli rakam için ikinci zbant, çarpan için üçüncü bant tve tolerans için dördüncü banttır .

Her biri xyztgrubun rengini kısaltan bir harfi temsil eder:

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

Yani, örneğin, NKOgbazı belirli dirençtir.

Direnç, bu tablo yardımıyla hesaplanabilir:

Direnç renk kodu tablosu

Tablodan da anlaşılacağı gibi:

  • xve yherhangi harfler hariç olabilir g, sve _.
  • zdışında bir şey olabilir _.
  • Biz kısıtlarsınız tsadece olmak g, sya da _.

( İşte tam olarak aynı dirençler dizisi ile ilgilenen kullanışlı bir direnç hesaplayıcısı. )

Direnci 10 * x + ykatı zbir tolerans, çarpan tyüzdesi.

Örneğin, direncini hesaplamak için şunu NKOggörüyoruz:

  1. N 1 için Kahverengi anlamına gelir.
  2. K 0 için Siyah anlamına gelir.
  3. O10 3 için Turuncu anlamına gelir .
  4. g ±% 5 için Altın anlamına gelir.

Yani direnç (10*1 + 0)*10^310000 Ω ±5%.

Meydan okuma

Formun 4 karakterli bir dizgisini alan xyztve direnci formda basan veya döndüren bir program veya işlev yazın [resistance] Ω ±[tolerance]%.

  • Direnç "baş aşağı", yani ters sırada olabilir tzyx. Örneğin, her ikisi de NKOgve gOKNüretmelidir 10000 Ω ±5%.
  • Direnç daima düz ohm, asla kilohm, megoh, vb.
  • Ωohmsörneğin , ile değiştirilebilir 10000 ohms ±5%.
  • ±+/-örneğin , ile değiştirilebilir 10000 Ω +/-5%.
  • Ondalık noktanın sağında sondaki sıfırlara sahip olmak iyidir. (örn. 10000.0 Ω +/-5%)
  • Sen girdi daima geçerlidir varsayabiliriz ( xve yasla gs_; zasla _; tsadece gs_).
  • 10 × 10 × 12 × 3 = 3600 olası dirençlerin tümü (2 × 3600 olası girişler) bazı renk bandı kombinasyonları gerçek hayatta üretilmese bile desteklenmelidir.

Bayt cinsinden en kısa kod kazanır.

Örnekler

  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%

Eğer zorluklarıma katılırsanız , Block Building Bot Flocks'a göz atın!

Yanıtlar:



9

CJam, 53 51 50 bayt

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

Çevrimiçi deneyin .

(Bir bayt için @ user23013 için teşekkürler)


Python'da başladım ama

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

çok pahalıydı ...


2
:(2/'e*s~kaydeder [.
jimmy23013

@ user23013 Ah, teşekkürler, gereken eyere yerleştirmenin bir sürü yolunu denedim , ama hiç düşünmedim /ve*
Sp3000

4

Python 3, 130 114 bayt

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)

düzenleme: SP3000 sipariş daha iyi ile tespit edilebilir işaret @ min(v,v[::-1])ziyade v[::(1,-1)[v[0]in'sg_']](10 bayt tasarruf), dizinini kontrol _ve bazı gereksiz boşlukları kaldırın.

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)

Teşekkürler - Satırları birleştirmeyi anladım, ama min()doğru sırayı bulmak için kullanma hilesini kaçırdım - güzel.
kronit

3

Perl, 93 bayt

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

1

Haskell, 135 132 130 bayt

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

Açıklama:

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 sayesinde 2 bayt daha tıraş ettim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.