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 0은 검은 색을 의미합니다.
  3. O(10) 수단 오렌지 3 .
  4. g ± 5 %의 금을 의미합니다.

저항은 (10*1 + 0)*10^310000 Ω ±5%입니다.

도전

양식의 4 문자열을 xyzt받아서 양식 의 저항을 인쇄하거나 반환 하는 프로그램 또는 함수를 작성하십시오 [resistance] Ω ±[tolerance]%.

  • 저항기는 "거꾸로", 즉 역순 일 수있다 tzyx. 예를 들어, 모두 NKOggOKN생산한다 10000 Ω ±5%.
  • 저항은 항상 평범한 옴, 절대 킬로 옴, 메그 옴 등입니다.
  • Ω로 대체 될 수 있습니다 ( ohms예 :) 10000 ohms ±5%.
  • ±로 대체 될 수 있습니다 ( +/-예 :) 10000 Ω +/-5%.
  • 소수점 오른쪽 끝에 0이 있으면 괜찮습니다. (예를 들어 10000.0 Ω +/-5%)
  • 당신은 입력 값이 항상 유효한 가정 할 수있다 ( x그리고 y결코 gs_, z결코 _, tgs_).
  • 일부 색상 대역 조합이 실제로 생성되지 않더라도 모든 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 를 확인하십시오 !

답변:


10

CJam, 59 58 56 50 바이트

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

CJam 통역사 에서 온라인으로 사용해보십시오 .


9

CJam, 53 51 50 바이트

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

온라인으로 사용해보십시오 .

(바이트는 @ user23013에게 감사합니다)


파이썬으로 시작했지만

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

너무 비쌌다 ...


2
:(2/'e*s~를 저장합니다 [.
jimmy23013

@ user23013 아 덕분에, 나는 삽입하는 방법의 무리 노력했습니다 e것이 필요 어디를,하지만 난 생각하지 않습니다 /*
SP3000

4

파이썬 3 130 114 바이트

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

3

펄, 93 바이트

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

1

하스켈, 135132130 바이트

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.