首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算电阻(Nerd狙击)

计算电阻(Nerd狙击)
EN

Code Golf用户
提问于 2013-03-09 04:01:34
回答 2查看 1.2K关注 0票数 10

下午好,高尔夫球手,

我们今天的挑战来自XKCD漫画、356370。我们将编写一个程序来计算一组电阻的电阻。预先警告说,这几乎足以证明这是一个代码挑战,然而,我认为以黄金格式编写稍微复杂一些的程序是一门艺术。最少的字符获胜。

电阻的计算依赖于以下两个公式:

  • 如果电阻是串联的,电阻就是每个电阻器的电阻之和。
  • 如果电阻器是并联的,则电阻是每个电阻器的电阻之和的反比。

例如:

你的挑战是,以尽可能少的字符,计算一组多达64个电阻器的电阻。我对复杂性,特别是输入规则的复杂性表示歉意。我试图用这样一种方式来定义它们:每种语言都是可用的。

  • 每个电阻器将连接到两个或更多的其他电阻器。
  • 保证输入是有效的,只有一个入口和一个出口点,这将连接
  • 该网络将是串联并行的,以防止需要更多的数学,然后是什么。
  • 输入将通过文件,参数或stdin,取决于什么是适合您的语言。
  • 输入将由一系列换行符或正斜线分隔语句组成,这些语句由电阻器电阻的整数组成,以及将电阻器一侧连接的电阻器is分隔开的空格。
  • 第一个电阻器的ID为1,每个连续电阻器增加一个。
  • 开始时的ID总是为0。
  • 最终电阻器的电阻始终为0欧姆,并且只有在其线路中定义的连接。

例如:

可以表示为

代码语言:javascript
运行
复制
3 0
6 1
1 0
5 0
0 2 3 4
  • 输出可以是标准输出或文件。它可以用下列方式之一表示:
    • 最少小数点2位的数字,后面跟着换行符
    • 由整数(分子)、正斜杠和另一个整数(分母)组成的分数,后面跟着换行符。分数不一定是最低的--例如,4/4或10/8是可以接受的。分数必须在1/100以内准确。没有额外的好处是完全准确-这是一个拐杖,使语言没有固定或浮点操作竞争。

我希望这涵盖了所有要点。祝好运!

EN

回答 2

Code Golf用户

发布于 2013-03-10 06:08:19

Python,329 chars

代码语言:javascript
运行
复制
import sys
N=[[1]]+[map(int,x.split())for x in sys.stdin]
N[-1][0]=1
n=len(N)
S=[set([i])for i in range(2*n)]
for x in range(n):
 C=S[2*x]
 for y in N[x][1:]:C|=S[2*y+1]
 for x in C:S[x]|=C
V=[0]*(2*n-1)+[1]
for k in range(999):
 for i in range(1,2*n-1):V[i]+=sum((V[j^1]-V[i])/N[j/2][0]for j in S[i])/9./len(S[i])
print 1/V[1]-2

通过在电路上做电压松弛来计算电阻。首先,它在一个1欧姆电阻的开始,并改变最后的电阻从0欧姆到1欧姆。然后将输入电压设为0,输出电压设为1伏。在模拟流过网络的电流后,利用前1欧姆电阻的电压降来计算网络电阻。

每个电阻器都有两个数字,一个是左边的数字,另一个是右边的数字。电阻r的左端为2*r,右端为2*r+1,输入用于计算连接在一起的S。给每个端子一个电压V[t],如果电流净流入端子组,则通过提高电压来实现松弛,如果电流是净流出的,则降低电压。

票数 6
EN

Code Golf用户

发布于 2013-03-10 16:48:20

APL 190

指数原点1.第一环(s)将所有串联的电阻(p)、并联的电阻(P)和第一回路的重复电阻(重复一圈)组合成串联的任何并联电阻器。最终零电阻的规格似乎是多余的。

代码语言:javascript
运行
复制
r←¯1↓⍎¨(c≠'/')⊂c        
o←⊃↑¨r                  
r←⊃1↓¨r                 
s:→(0=+/n←1=+/×r)/p     
n←↑n/i←⍳↑⍴r             
o[n-1]←+/o[n-0 1]       
o←(i←n≠i)/o             
r←i⌿r                   
r←r-r≥n                 
→s                      
p:n←1⍪2≠/r[;1]          
r←((⍴r),1)⍴r←¯1++\n~0   
o←∊1÷¨+/¨1÷¨n⎕penclose o
→(1<⍴o)/s               
3⍕o                     
' '  

测试了问题中的示例,再加上一个稍微复杂的例子:

代码语言:javascript
运行
复制
      Input: '5 0/3 1/1 2/0 2'
 9.000

      Input: '3 0/1 0/5 0/0 1 2 3'
 0.652

      Input: '3 0/6 1/1 0/5 0/0 2 3 4'
 0.763

      Input: '2 0/2 1/2 0/2 0/2 4/2 5/2 2 3 6/2 7/2 2 3 6/0 8 9'
 2.424
票数 6
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/10863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档