Introdução:
Dois resistores R1
e R2
, em paralelo (denotados R1 || R2
), têm uma resistência combinada Rp
dada como:
ou conforme sugerido nos comentários:
Três resistências, R1
, R2
e R3
em paralelo ( R1 || R2 || R3
) tem uma resistência combinada (R1 || R2) || R3 = Rp || R3
:
ou, novamente, como sugerido nos comentários:
Naturalmente, essas fórmulas podem ser estendidas a um número indefinido de resistores.
Desafio:
Pegue uma lista de valores positivos do resistor como entrada e produza a resistência combinada se eles foram colocados em paralelo em um circuito elétrico. Você não pode assumir um número máximo de resistores (exceto que o seu computador pode lidar com isso, é claro).
Casos de teste:
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
O código mais curto em cada idioma vence. As explicações são altamente encorajadas.
code-golf
math
physics
electrical-engineering
Stewie Griffin
fonte
fonte
Respostas:
05AB1E ,
53 bytesExperimente online!
Explicação
fonte
Haskell ,
1816 bytesExperimente online!
fonte
foldr1(\r s->r*s/(r+s))
.MATLAB , 14 bytes
No MATLABp⩾1 como
norm(...,p)
calcula ap
-norm de um vetor. Isso geralmente é definido paraMas, felizmente para nós, isso também funciona para . (Observe que ele não funciona no Octave.)p = - 1
Não tente online!
fonte
Geléia ,
53 bytesExperimente online!
Quão?
Inicialmente esqueci este formulário dos meus dias de engenharia eletrônica ... com que facilidade esquecemos.
fonte
İ
é pronunciado da mesma maneira quei
é pronunciadolist
. É assim que se diz que o desafio foi fácil?PowerShell , 22 bytes
Experimente online!
Recebe informações por meio de splatting e usa a mesma soma de truque inverso que muitos outros estão fazendo
fonte
Oitava , 15 bytes
Experimente online!
Média harmônica, dividida por
n
. Mole-mole.fonte
APL (Dyalog Unicode) , 4 bytes
Experimente online!
-1 graças a Adám .
fonte
÷1⊥÷
Experimente online!1∘⊥
é o mesmo que+/
para vetores ...R , 15 bytes
Experimente online!
Segue o mesmo princípio da Média Harmônica visto em outras respostas.
fonte
JavaScript, 28 bytes
Experimente Online!
fonte
Perl 5
-pa -MList::Util=reduce
, 26 bytesExperimente online!
fonte
Perl 6 , 14 bytes
Experimente online!
1 / **
é uma função anônima que retorna uma lista dos recíprocos de seus argumentos.1 / *.sum
é outra função anônima que retorna o inverso da soma dos elementos de seu argumento de lista. Oo
operador compõe essas duas funções.fonte
bash + coreutils, 25 bytes
TIO
fonte
Wolfram Language (Mathematica) , 10 bytes
Experimente online!
fonte
HarmonicMean
e é mais longo.MathGolf , 3 bytes
∩
Σ
Experimente online.
fonte
PHP , 51 bytes
Recíproco da soma dos recíprocos. Entrada é
$a
.Experimente online!
fonte
1/array_reduce($a,fn($c,$i)=>$c+1/$i);
(38 bytes). Leia mais em wiki.php.net/rfc/arrow_functionsJavaScript (ES6), 29 bytes
Experimente online!
ou:
Experimente online!
Mas com essa abordagem, usar
map()
(como Shaggy fez ) é 1 byte mais curto.fonte
Python 3 , 30 bytes
Experimente online!
fonte
Perl 5 (-p), 17 bytes
Experimente online!
fonte
x86-64 Código da máquina -
2018 bytesEntrada - convenção de chamada do Windows. O primeiro parâmetro é o número de resistores em
RCX
. Um apontador para as resistências está emRDX
.*ps
As instruções são usadas, pois são um byte menor. Tecnicamente, você pode ter apenas 2 ^ 61 resistores, mas estará sem memória RAM muito antes disso. A precisão também não é ótima, pois estamos usandorcpps
.fonte
Java 8, 24 bytes
Notei que ainda não havia uma resposta em Java, então achei que adicionaria uma.
Experimente online.
Explicação:
Usa a mesma abordagem de Média Harmônica de outras respostas:
fonte
MATL , 5 bytes
Experimente online!
Não tenho certeza se "fazer duas vezes" (
,
) conta como um loop, mas essa é apenas a média harmônica, dividida porn
.Como alternativa,
,-1^s
são cinco bytes também.fonte
Código da máquina FPU Intel 8087, 19 bytes
Isso usa as instruções de ponto flutuante baseadas em pilha na FPU 8087 original do IBM PC.
A entrada é um ponteiro para os valores do resistor em
[SI]
, número de resistores emCX
. A saída é para um único valor de precisão (DD) em[DI]
.fonte
Dardo , 42 bytes
Experimente online!
Ter que especificar explicitamente o
num
tipo é meio chato, evita a dedução de tipos, porque inferiria o(dynamic, dynamic) => dynamic
que não pode resultar em duplicado por algum motivofonte
PHP , 40 bytes
Experimente online!
Testes: Experimente online!
Semelhante à solução de Yimin Rong, mas sem built-ins e todos os bytes de programa estão incluídos na contagem de bytes.
fonte
Python 3,
5844 bytesUma função recursiva. Requer que os argumentos sejam passados descompactados, da seguinte maneira:
ou
Explicação:
fonte
Carvão , 7 bytes
Experimente online! Link é a versão detalhada do código. Funciona calculando a corrente consumida por cada resistor quando 1V é aplicado, obtendo o total e calculando a resistência que consumiria essa corrente quando 1V for aplicado. Explicação:
fonte
J , 6 bytes
Experimente online!
fonte
+/&.:%
[MATLAB], 15 bytes
Mais um byte de flawr resposta excelente, mas eu tive que usar outras funções então aqui vai:
É bastante explícito, soma o inverso das resistências e inverte a soma para produzir a resistência paralela equivalente.
fonte
Quarto (gforth) , 49 bytes
Experimente online!
Entrada é um endereço de memória e comprimento da matriz (usado como uma matriz improvisada, pois Forth não possui uma construção de matriz incorporada)
Usa o método da soma inversa, pois a maioria das outras respostas é
Código Explicação
fonte
expl3 (camada de programação LaTeX3), 65 bytes
A seguir, define uma função que imprime o resultado no terminal (infelizmente,
expl3
possui nomes de funções muito detalhados):Um script completo que pode ser executado no terminal, incluindo todos os casos de teste, bem como a configuração para inserir
expl3
:Se executar com
pdflatex <filename>
o seguinte é a saída do console:Explicação
\fp_show:n
: avalia seu argumento como uma expressão de ponto flutuante e imprime o resultado no terminal, toda macro expansível é expandida durante esse processo.\clist_map_function:nN
: recebe dois argumentos, uma lista separada por vírgula e uma função / macro, se chamada como\clist_map_function:nN { l1, l2, l3 } \foo
se expande para algo como\foo{l1}\foo{l2}\foo{l3}
. No nosso caso, em vez da\foo
macro\2
é usada, a qual se expande para+1/
que a expressão se expanda para+1/{l1}+1/{l2}+1/{l3}
fonte