Вступление:
Два резистора, R1
и R2
параллельно (обозначены R1 || R2
) имеют объединенное сопротивление, Rp
заданное как:
Три резисторов, R1
, R2
и R3
параллельно ( R1 || R2 || R3
) имеют суммарное сопротивление (R1 || R2) || R3 = Rp || R3
:
или, опять же, как предложено в комментариях:
Эти формулы, конечно, могут быть распространены на неопределенное количество резисторов.
Вызов:
Возьмите список положительных значений резисторов в качестве входных данных и выведите объединенное сопротивление, если они были размещены параллельно в электрической цепи. Вы не можете использовать максимальное количество резисторов (за исключением того, что ваш компьютер, конечно, может с этим справиться).
Тестовые случаи:
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
Самый короткий код на каждом языке выигрывает. Пояснения приветствуются.
источник
Ответы:
05AB1E ,
53 байтаПопробуйте онлайн!
объяснение
источник
Haskell ,
1816 байтовПопробуйте онлайн!
источник
foldr1(\r s->r*s/(r+s))
.MATLAB , 14 байтов
В MATLABp⩾1 как
norm(...,p)
вычисляетp
-норму вектора. Это обычно определяется дляНо, к счастью для нас, это также работает дляp=−1 . (Обратите внимание, что это не работает в Octave.)
Не пытайтесь сделать это онлайн!
источник
Желе ,
53 байтаПопробуйте онлайн!
Как?
Первоначально я забыл эту форму из моих дней инженерной электроники ... как легко мы забываем.
источник
İ
что произносится так же, какi
произносится вlist
. Это способ сказать, что задача была легкой?PowerShell , 22 байта
Попробуйте онлайн!
Принимает ввод через splatting и использует тот же 1 / сумма обратного трюка, что и многие другие
источник
Октава , 15 байт
Попробуйте онлайн!
Гармоническое среднее, разделенная
n
. Очень просто.источник
APL (Dyalog Unicode) , 4 байта
Попробуйте онлайн!
-1 спасибо Адаму .
источник
÷1⊥÷
попробуйте онлайн!1∘⊥
, то же самое, что и+/
для векторов ...R 15 байт
Попробуйте онлайн!
Следует тому же принципу Гармонического Среднего, что и в других ответах.
источник
JavaScript, 28 байт
Попробуйте онлайн!
источник
Perl 5
-pa -MList::Util=reduce
, 26 байтПопробуйте онлайн!
источник
Perl 6 , 14 байт
Попробуйте онлайн!
1 / **
является анонимной функцией, которая возвращает список обратных значений своих аргументов.1 / *.sum
это другая анонимная функция, которая возвращает обратную сумму суммы элементов своего аргумента списка.o
Оператор сочиняет эти две функции.источник
bash + coreutils, 25 байт
TIO
источник
Wolfram Language (Mathematica) , 10 байт
Попробуйте онлайн!
источник
HarmonicMean
и длиннее.MathGolf , 3 байта
Же , как и другие ответы, используя встроенные команды1N ) и M( х1, . , , , хN) = 11Икс1+ 1Икс2+...+1xn
∩
(Σ
(сумма):Try it online.
источник
PHP, 51 bytes
Reciprocal of sum of reciprocals. Input is
$a
.Try it online!
источник
1/array_reduce($a,fn($c,$i)=>$c+1/$i);
(38 bytes). Read more in wiki.php.net/rfc/arrow_functionsJavaScript (ES6), 29 bytes
Try it online!
or:
Try it online!
But with this approach, using
map()
(as Shaggy did) is 1 byte shorter.источник
Python 3, 30 bytes
Try it online!
источник
Perl 5 (-p), 17 bytes
Try it online!
источник
x86-64 Machine code -
2018 bytesInput - Windows calling convention. First parameter is the number of resistors in
RCX
. A pointer to the resistors is inRDX
.*ps
instructions are used since they are one byte smaller. Technically, you can only have around 2^61 resistors but you will be out of RAM long before then. The precision isn't great either, since we are usingrcpps
.источник
Java 8, 24 bytes
I noticed there wasn't a Java answer yet, so figured I'd add one.
Try it online.
Explanation:
Uses the same Harmonic Mean approach as other answers:
источник
MATL, 5 bytes
Try it online!
I'm not sure if "do twice" (
,
) counts as a loop, but this is just the harmonic mean, divided byn
.С другой стороны,
,-1^s
это также пять байтов.источник
Машинный код Intel 8087 FPU, 19 байтов
This uses the stack-based floating point instructions in the original IBM PC's 8087 FPU.
Вход указатель на значения резисторов в
[SI]
, количество резисторов вCX
. Вывод с одинарной точностью (DD) значение при[DI]
.источник
Дротик , 42 байта
Попробуйте онлайн!
Необходимость явно указывать
num
тип является своего рода отстойным, предотвращает вывод типа, потому что это будет означать, что(dynamic, dynamic) => dynamic
по какой-то причине не может быть удвоеноисточник
PHP , 40 байт
Попробуйте онлайн!
Тесты: попробуйте онлайн!
Аналогично решению Иминь Ронга, но без встроенных модулей и всех байтов программы включены в число байтов.
источник
Python 3,
5844 байтаРекурсивная функция. Требует, чтобы аргументы передавались без упаковки, вот так:
или
Объяснение:
источник
Древесный уголь , 7 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Работает, вычисляя ток, потребляемый каждым резистором при подаче 1 В, принимая общее значение и вычисляя сопротивление, которое потребляет этот ток при приложении 1 В. Объяснение:
источник
J , 6 байт
Попробуйте онлайн!
источник
+/&.:%
[MATLAB], 15 байт
Еще один байт, чем flawr отличный ответ, но мне пришлось использовать другие функции, так что здесь идет:
Это довольно явно, он суммирует обратное сопротивление, а затем инвертирует сумму, чтобы вывести эквивалентное параллельное сопротивление.
источник
Forth (gforth) , 49 байтов
Попробуйте онлайн!
Ввод - это адрес памяти и длина массива (используется как импровизированный массив, так как Forth не имеет встроенной конструкции массива)
Использует метод суммы обратных, так как большинство других ответов
Код Объяснение
источник
expl3 (уровень программирования LaTeX3), 65 байт
Следующее определяет функцию, которая печатает результат в терминал (к сожалению,
expl3
имеет очень подробные имена функций):Полный сценарий, который можно запустить из терминала, включая все тестовые примеры, а также настройки для ввода
expl3
:Если запустить со
pdflatex <filename>
следующим выводом консоли:объяснение
\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}
источник