전기 회로의 병렬 저항


20

소개:

두 개의 저항 R1R2는 병렬로 표시되며 다음과 같이 R1 || R2결합 된 저항을 갖습니다 Rp.

아르 자형2=아르 자형1아르 자형2아르 자형1+아르 자형2
또는 의견에서 제안 된대로 :

아르 자형2=11아르 자형1+1아르 자형2

3 개 개의 저항은 R1, R2R3병렬 ( R1 || R2 || R3) 합성 저항이 (R1 || R2) || R3 = Rp || R3:

아르 자형=아르 자형1아르 자형2아르 자형1+아르 자형2아르 자형아르 자형1아르 자형2아르 자형1+아르 자형2+아르 자형

또는 의견에서 제안한대로 :

아르 자형=11아르 자형1+1아르 자형2+1아르 자형

이러한 공식은 물론 무한한 수의 저항으로 확장 될 수 있습니다.


도전:

양의 저항 값 목록을 입력으로 사용하고 전기 회로에 병렬로 배치 된 경우 결합 된 저항을 출력하십시오. 최대 저항 수를 가정 할 수 없습니다 (컴퓨터는 물론 저항을 처리 할 수 ​​있음).

테스트 사례 :

1, 1
0.5

1, 1, 1
0.3333333

4, 6, 3
1.3333333

20, 14, 18, 8, 2, 12
1.1295

10, 10, 20, 30, 40, 50, 60, 70, 80, 90
2.6117  

각 언어에서 가장 짧은 코드가 승리합니다. 설명을 적극 권장합니다.


6
고조파 평균 ( 1 2 3 ) 을 언급하는 다른 몇 가지 도전이 있지만 중복이 있다고 생각하지 않습니다. flawr이 제안한 바에 따라이 도전 과제 본문에 어구를 나열하여 미래의 속박을 더 쉽게 닫을 수 있다고 생각합니다.
FryAmTheEggman

답변:




9

MATLAB , 14 바이트

MATLAB 에서 벡터 norm(...,p)p노름을 계산합니다 . 이것은 일반적으로 1 과 같이 정의 됩니다.

V=(나는|V나는|)1.

그러나 운 좋게도 =1 에서도 작동합니다 . (옥타브에서는 작동하지 않습니다.)

@(x)norm(x,-1)

온라인으로 시도하지 마십시오!


4
이것은 동시에 끔찍하고 아름답습니다!
시계 반대 방향으로 돌리지

1
감사합니다. 다음은 최고의 칭찬입니다.)
flawr

7

젤리 ,  5  3 바이트

İSİ

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

방법?

처음에는 전자 공학 시절부터이 양식을 잊어 버렸습니다.

İSİ - Link: list of numbers, R   e.g. [r1, r2, ..., rn]
İ   - inverse (vectorises)            [1/r1, 1/r2, ..., 1/rn]
 S  - sum                             1/r1 + 1/r2 + ... + 1/rn
  İ - inverse                         1/(1/r1 + 1/r2 + ... + 1/rn)

4
나는 İ같은 방식 i으로 발음 된다고 가정 list합니다. 도전이 쉬웠다 고 말하는 방법입니까?
Stewie Griffin







3

펄 6 , 14 바이트

1/*.sum o 1/**

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

1 / **인수의 역수 목록을 리턴하는 익명 함수입니다. 1 / *.sumlist 인수의 요소 합계의 역수를 반환하는 또 다른 익명 함수입니다. o운영자는 이들 두 가지 기능을 구성한다.


아주 좋아요 HyperWhatevers는 더 복잡한 표현에 사용할 수 없기 때문에 골프에서 자주 사용하는 것을 보지 못했습니다. 그들이 정상에 더 가까웠다면, 이런 식의 예상되지만 아쉽습니다 .
Jo King

네, 아마도 골프를 위해 골프를 사용하는 것에 대해 처음으로 생각했을 수도 있으며, 그 한계를 발견 한 것에 실망했습니다.
Sean




2

PHP , 51 바이트

역수의 합의 역수. 입력은 $a입니다.

1/array_reduce($a,function($c,$i){return$c+1/$i;});

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


PHP7.4에서는 1/array_reduce($a,fn($c,$i)=>$c+1/$i);(38 바이트) 이 작업을 수행 할 수 있다고 생각합니다 . wiki.php.net/rfc/arrow_functions
Ismael Miguel

내 생각 엔 당신이 맞다! 그러나 데모 할 곳이 없습니까?

직접 다운로드해야합니다. 그러나 PHP 7.4.0RC1이 이번 달 5 일에 출시되었으므로 ( php.net/archive/2019.php#2019-09-05-1 ), 아마도 안전합니다. 의심 스러우면 메타를 요청할 수 있습니다.
이스마엘 미겔




2

x86-64 기계 코드 -20 18 바이트

0F 57 C0             xorps       xmm0,xmm0  
loopHead
F3 0F 53 4C 8A FC    rcpss       xmm1,dword ptr [rdx+rcx*4-4]
0F 58 C1             addps       xmm0,xmm1  
E2 F6                loop        loopHead
0F 53 C0             rcpps       xmm0,xmm0  
C3                   ret  

입력-Windows 호출 규칙. 첫 번째 매개 변수는의 저항 수입니다 RCX. 저항에 대한 포인터는에 RDX있습니다. *ps명령어는 1 바이트 더 작기 때문에 사용됩니다. 기술적으로, 약 2 ^ 61 개의 저항 만 가질 수 있지만 그 전에는 RAM이 부족합니다. 우리가 사용하고 있기 때문에 정밀도도 좋지 않습니다 rcpps.


“2⁶¹ 저항 만”은 아마도 관측 가능한 우주를 채우게 될 것입니다 (많은 시간이 지남)!

실제로 2 ^ 61은 2.305843e + 18에 불과하며 관측 가능한 우주의 직경은 8.8 × 10 ^ 26m입니다.
나 '

그래, 과대 평가! 실제 크기는 더 작은 화성의 달인 데이모스의 크기와 질량에 가깝습니다.

2

자바 8, 24 바이트

a->1/a.map(d->1/d).sum()

Java 답변이 아직 없다는 것을 알았으므로 추가 할 것이라고 생각했습니다.

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

설명:

다른 답변과 동일한 고조파 평균 접근법을 사용합니다.

(엑스1,...,엑스)=11엑스1+1엑스2+...+1엑스

a->                       // Method with DoubleStream parameter and double return-type
     a.map(d->1/d)        //  Calculate 1/d for each value `d` in the input-stream
                  .sum()  //  Then take the sum of the mapped list
   1/                     //  And return 1/sum as result


2

인텔 8087 FPU 기계 코드, 19 바이트

 D9 E8      FLD1                    ; push 1 for top numerator on stack
 D9 EE      FLDZ                    ; push 0 for running sum 
        R_LOOP: 
 D9 E8      FLD1                    ; push 1 numerator for resistor
 DF 04      FILD WORD PTR[SI]       ; push resistor value onto stack 
 DE F9      FDIV                    ; divide 1 / value 
 DE C1      FADD                    ; add to running sum 
 AD         LODSW                   ; increment SI by 2 bytes 
 E2 F4      LOOP R_LOOP             ; keep looping 
 DE F9      FDIV                    ; divide 1 / result                  
 D9 1D      FSTP WORD PTR[DI]       ; store result as float in [DI]

이것은 원래 IBM PC의 8087 FPU에서 스택 기반 부동 소수점 명령어를 사용합니다.

입력은의 저항 값 [SI],의 저항 수에 대한 포인터 입니다 CX. 출력은의 단 정밀도 (DD) 값 [DI]입니다.


1

다트 , 42 바이트

f(List<num>a)=>a.reduce((p,e)=>p*e/(p+e));

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

명시 적으로 지정할 필요 num유형 것은에 추론 때문에 방지는 infering 유형, 좀 짜증나입니다 (dynamic, dynamic) => dynamic어떤 이유로 두 배를 얻을 수없는



1

파이썬 3, 58 44 바이트

f=lambda x,y=0,*i:f(x*y/(x+y),*i)if y else x

재귀 함수 다음과 같이 인수를 압축 해제하여 전달해야합니다.

i=[10, 10, 20]
f(*i)

또는

f(10, 10, 20)

설명:

# lambda function with three arguments. *i will take any unpacked arguments past x and y,
# so a call like f(10, 20) is also valid and i will be an empty tuple
# since y has a default value, f(10) is also valid
f=lambda x,y=0,*i: \

# a if case else b
# determine parallel resistance of x and y and use it as variable x
# since i is passed unpacked, the first item in the remaining list will be y and
# the rest of the items will be stored in i
# in the case where there were no items in the list, y will have the default value of 0
f(x*y/(x+y),*i) \

# if y does not exist or is zero, return x
if y else x

1

, 7 바이트

I∕¹Σ∕¹A

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 1V가인가 될 때 각 저항에 의해 소비되는 전류를 계산하고 총계를 취하며 1V가인가 될 때 그 전류를 끌어 당기는 저항을 계산함으로써 작동합니다. 설명:

      A Input array
    ∕¹  Reciprocal (vectorised)
   Σ    Sum
 ∕¹     Reciprocal
I       Cast to string for implicit print


1

[MATLAB], 15 바이트

flawr 우수한 답변 보다 1 바이트 더 많았지 만 다른 기능을 사용해야했기 때문에 여기에갑니다.

@(x)1/sum(1./x)

오히려 명시 적이며 저항의 역수를 합한 다음 합을 반전시켜 동등한 병렬 저항을 출력합니다.


1

4 번째 (2 번째) , 49 바이트

: f 0e 0 do dup i cells + @ s>f 1/f f+ loop 1/f ;

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

입력은 메모리 주소와 배열 길이입니다 (Forth에는 내장 배열 구조가 없으므로 즉석 배열로 사용됨)

대부분의 다른 답변은 다음과 같이 합산 방법을 사용합니다.

코드 설명

: f           \ start a new word definition
  0e          \ stick an accumulator on the floating point stack
  0 do        \ start a loop from 0 to array-length -1
    dup       \ copy the array address
    i cells + \ get the address of the current array value
    @ s>f     \ get the value and convert it to a float
    1/f f+    \ invert and add to accumulator
  loop        \ end the loop definition
  1/f         \ invert the resulting sum
;             \ end the word definition

1

expl3 (LaTeX3 프로그래밍 계층), 65 바이트

다음은 결과를 터미널에 인쇄하는 함수를 정의합니다 (불행히도 expl3매우 자세한 함수 이름이 있음).

\def\1#1{\fp_show:n{1/(\clist_map_function:nN{#1}\2)}}\def\2{+1/}

모든 테스트 사례와 입력 설정을 포함하여 터미널에서 실행할 수있는 완전한 스크립트 expl3:

\RequirePackage{expl3}\ExplSyntaxOn
\def\1#1{\fp_show:n{1/(\clist_map_function:nN{#1}\2)}}\def\2{+1/}
\1{1, 1}
\1{1, 1, 1}
\1{4, 6, 3}
\1{20, 14, 18, 8, 2, 12}
\1{10, 10, 20, 30, 40, 50, 60, 70, 80, 90}
\stop

pdflatex <filename>콘솔 출력은 다음과 같이 실행됩니다 .

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./cg_resistance.tex
LaTeX2e <2018-12-01>
(/usr/local/texlive/2019/texmf-dist/tex/latex/unravel/unravel.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3-code.tex)
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3backend/l3backend-pdfmode.def))
 (/usr/local/texlive/2019/texmf-dist/tex/latex/l3packages/xparse/xparse.sty)
(/usr/local/texlive/2019/texmf-dist/tex/generic/gtl/gtl.sty))
> 1/(\clist_map_function:nN {1,1}\2)=0.5.
<recently read> }

l.3 \1{1, 1}

?
> 1/(\clist_map_function:nN {1,1,1}\2)=0.3333333333333333.
<recently read> }

l.4 \1{1, 1, 1}

?
> 1/(\clist_map_function:nN {4,6,3}\2)=1.333333333333333.
<recently read> }

l.5 \1{4, 6, 3}

?
> 1/(\clist_map_function:nN {20,14,18,8,2,12}\2)=1.129538323621694.
<recently read> }

l.6 \1{20, 14, 18, 8, 2, 12}

?
> 1/(\clist_map_function:nN
{10,10,20,30,40,50,60,70,80,90}\2)=2.611669603067675.
<recently read> }

l.7 \1{10, 10, 20, 30, 40, 50, 60, 70, 80, 90}

?
 )
No pages of output.
Transcript written on cg_resistance.log.

설명

\fp_show:n : 인수를 부동 소수점 표현식으로 평가하고 결과를 터미널에 인쇄합니다. 모든 확장 가능한 매크로는 해당 프로세스 중에 확장됩니다.

\clist_map_function:nN :처럼 불리는 경우이 개 인수를 쉼표는 목록과 기능 / 매크로 구분 \clist_map_function:nN { l1, l2, l3 } \foo이 같은으로 확장 \foo{l1}\foo{l2}\foo{l3}. 대신 우리의 경우 \foo매크로 \2확장하는 데 사용되는 +1/그래서 식으로 확장한다는+1/{l1}+1/{l2}+1/{l3}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.