Wprowadzenie:
Dwa rezystory R1
i R2
równolegle (oznaczone R1 || R2
) mają połączony opór Rp
podany jako:
lub zgodnie z sugestiami w komentarzach:
Trzy Rezystory R1
, R2
i R3
(równolegle R1 || R2 || R3
) mają łączną odporność (R1 || R2) || R3 = Rp || R3
:
lub ponownie, zgodnie z sugestiami w komentarzach:
Wzory te można oczywiście rozszerzyć na nieokreśloną liczbę rezystorów.
Wyzwanie:
Weź listę dodatnich wartości rezystorów jako dane wejściowe i wyślij połączony opór, jeśli zostały umieszczone równolegle w obwodzie elektrycznym. Nie możesz założyć maksymalnej liczby rezystorów (z wyjątkiem tego, że komputer oczywiście może to obsłużyć).
Przypadki testowe:
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
Wygrywa najkrótszy kod w każdym języku. Wyjaśnienia są bardzo zalecane.
code-golf
math
physics
electrical-engineering
Stewie Griffin
źródło
źródło
Odpowiedzi:
05AB1E ,
53 bajtyWypróbuj online!
Wyjaśnienie
źródło
Haskell ,
1816 bajtówWypróbuj online!
źródło
foldr1(\r s->r*s/(r+s))
.MATLAB , 14 bajtów
W MATLABp⩾1 jako
norm(...,p)
obliczap
-norm wektora. Zwykle jest to definiowane dlaAle na szczęście dla nas to też działap=−1 . (Pamiętaj, że nie działa w Octave).
Nie próbuj online!
źródło
Galaretka ,
53 bajtówWypróbuj online!
W jaki sposób?
Początkowo zapomniałem tego formularza z moich dni inżynierii elektronicznej ... jak łatwo możemy zapomnieć.
źródło
İ
wymawia się w taki sam sposób, jaki
wymawia się wlist
. Czy to sposób na stwierdzenie, że wyzwanie było łatwe?PowerShell , 22 bajty
Wypróbuj online!
Pobiera dane wejściowe poprzez rozpryskiwanie i używa tej samej 1 / sumy odwrotnej lewy, co robi wielu innych
źródło
Oktawa , 15 bajtów
Wypróbuj online!
Średnia harmoniczna podzielona przez
n
. Bułka z masłem.źródło
APL (Dyalog Unicode) , 4 bajty
Wypróbuj online!
-1 dzięki Adámowi .
źródło
÷1⊥÷
Wypróbuj online!1∘⊥
jest taki sam jak+/
dla wektorów ...R , 15 bajtów
Wypróbuj online!
Przestrzega tej samej zasady średniej harmonicznej, co w innych odpowiedziach.
źródło
JavaScript, 28 bajtów
Wypróbuj online!
źródło
Perl 5
-pa -MList::Util=reduce
, 26 bajtówWypróbuj online!
źródło
Perl 6 , 14 bajtów
Wypróbuj online!
1 / **
jest anonimową funkcją, która zwraca listę wzajemności swoich argumentów.1 / *.sum
to kolejna anonimowa funkcja, która zwraca odwrotność sumy elementów argumentu listy.o
Operatora tworzy te dwie funkcje.źródło
bash + coreutils, 25 bajtów
TIO
źródło
Wolfram Language (Mathematica) , 10 bajtów
Wypróbuj online!
źródło
HarmonicMean
i jest dłuższy.MathGolf , 3 bajty
To samo co inne odpowiedzi, używając wbudowanych1n ) i M.( x1, . . . , xn) = 11x1+ 1x2)+ . . . + 1xn
∩
(Σ
(suma):Wypróbuj online.
źródło
PHP , 51 bajtów
Wzajemność sumy wzajemności. Dane wejściowe to
$a
.Wypróbuj online!
źródło
1/array_reduce($a,fn($c,$i)=>$c+1/$i);
(38 bajtów). Czytaj więcej na wiki.php.net/rfc/arrow_functionsJavaScript (ES6), 29 bajtów
Wypróbuj online!
lub:
Wypróbuj online!
Ale przy takim podejściu użycie
map()
(tak jak Shaggy ) jest o 1 bajt krótsze.źródło
Python 3 , 30 bajtów
Wypróbuj online!
źródło
Perl 5 (-p), 17 bajtów
Wypróbuj online!
źródło
x86-64 Kod maszynowy -
2018 bajtówWejście - konwencja wywoływania systemu Windows. Pierwszy parametr to liczba rezystorów w
RCX
. Wskaźnik na rezystory jest wRDX
.*ps
instrukcje są używane, ponieważ są one o jeden bajt mniejsze. Technicznie rzecz biorąc, możesz mieć tylko około 2 ^ 61 rezystorów, ale na długo przedtem nie będziesz mieć pamięci RAM. Precyzja też nie jest duża, ponieważ używamyrcpps
.źródło
Java 8, 24 bajty
Zauważyłem, że nie ma jeszcze odpowiedzi w języku Java, więc pomyślałem, że ją dodam.
Wypróbuj online.
Wyjaśnienie:
Używa tego samego podejścia harmonicznej średniej, co inne odpowiedzi:
źródło
MATL , 5 bajtów
Wypróbuj online!
Nie jestem pewien, czy „zrobić dwa razy” (
,
) liczy się jako pętla, ale jest to tylko średnia harmoniczna podzielona przezn
.Alternatywnie
,-1^s
ma również pięć bajtów.źródło
Kod maszynowy procesora Intel 8087 FPU, 19 bajtów
Wykorzystuje to instrukcje zmiennoprzecinkowe oparte na stosie w oryginalnym komputerze PC 8087 FPU.
Wejście to wskaźnik do wartości rezystora w
[SI]
, liczba rezystorów wCX
. Dane wyjściowe mają wartość pojedynczej precyzji (DD) przy[DI]
.źródło
Dart , 42 bajty
Wypróbuj online!
num
Konieczność jawnego określenia typu jest trochę pechowa, uniemożliwia wnioskowanie o typie, ponieważ oznaczałoby, że(dynamic, dynamic) => dynamic
z jakiegoś powodu nie można uzyskać dublowaniaźródło
PHP , 40 bajtów
Wypróbuj online!
Testy: Wypróbuj online!
Podobne do rozwiązania Yimin Rong, ale bez wbudowanych i wszystkie bajty programu są uwzględnione w liczbie bajtów.
źródło
Python 3,
5844 bajtówFunkcja rekurencyjna. Wymaga przekazania argumentów rozpakowanych, takich jak:
lub
Wyjaśnienie:
źródło
Węgiel drzewny , 7 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Działa poprzez obliczenie prądu pobieranego przez każdy rezystor, gdy przyłożone zostanie 1 V, biorąc sumę i obliczając rezystancję, która pobierałaby ten prąd, gdy przyłożono 1 V. Wyjaśnienie:
źródło
J , 6 bajtów
Wypróbuj online!
źródło
+/&.:%
[MATLAB], 15 bajtów
Jeszcze jeden bajt niż flawr doskonała odpowiedź, ale musiałem użyć innych funkcji, więc oto:
Jest to raczej wyraźne, sumuje odwrotność rezystancji, a następnie odwraca sumę, aby uzyskać równoważny równoległy opór.
źródło
Dalej (gforth) , 49 bajtów
Wypróbuj online!
Dane wejściowe to adres pamięci i długość tablicy (używane jako tablica improwizowana, ponieważ Forth nie ma wbudowanej konstrukcji tablicy)
Używa metody sumowania odwrotności, jak większość innych odpowiedzi
Objaśnienie kodu
źródło
expl3 (warstwa programowania LaTeX3), 65 bajtów
Poniżej zdefiniowano funkcję, która wypisuje wynik na terminal (niestety
expl3
ma bardzo pełne nazwy funkcji):Kompletny skrypt, który można uruchomić z terminala, w tym wszystkie przypadki testowe, a także konfiguracja do wprowadzenia
expl3
:Jeśli uruchomiono z
pdflatex <filename>
następującymi, jest wyjście konsoli:Wyjaśnienie
\fp_show:n
: ocenia swój argument jako wyrażenie zmiennoprzecinkowe i wypisuje wynik na terminalu, każde rozwijane makro jest rozwijane podczas tego procesu.\clist_map_function:nN
: przyjmuje dwa argumenty, listę oddzieloną przecinkami i funkcję / makro, jeśli wywoływane jak\clist_map_function:nN { l1, l2, l3 } \foo
to rozwija się do czegoś podobnego\foo{l1}\foo{l2}\foo{l3}
. W naszym przypadku zamiast\foo
makra\2
używane jest makro , które rozwija się do,+1/
tak że rozwija się wyrażenie+1/{l1}+1/{l2}+1/{l3}
źródło