Ruby 171字节
输入为函数参数。输出到标准输出(带有尾随空格)(如有必要,可以修改。)
->s{a,b,c,d=s.split.map{|z|[z[-1],z.to_f]}.sort.flatten
%w{EA9.EAAVAA.WVA GS;.A?#WWV.RRR}.map{|w|m=w[n=(a+c+?!).sum%10].ord;print (b**(m%9-4)*d**(m/9-5))**0.5,w[n+7],' '}}
说明
所有公式都可以用以下形式表示,b**x*d**y
其中b和d是两个输入值,x&y是幂。出于打高尔夫球的原因,该表达式(b**x*d**y)**0.5
最终成为首选,因为它意味着x和y变为介于-4到4之间的整数。
下表显示了所需的表达式(假定输入按字母顺序排序)和幂的编码值。其中x和y是双倍幂,它们被编码为(x+4)+(y+4)*9+9
或等价(x+4)+(y+5)*9
。这会将所有编码置于可打印的ASCII范围内。为简洁起见,公式中省略了幂运算符。
n
是一种由输入单位符号组成的校验和;它可以取值0、1、2、4、5、6(未使用3。)
n formula 1 formula 2 formula 1 formula 2
value powers x+4 y+4 encoding powers x+4 y+4 encoding
0 A*R=V A2*R=W 1 1 6 6 69 E 2 1 8 6 71 G
1 R-1*V=A R-1*V2=W -1 1 2 6 65 A -1 2 2 8 83 S
2 R-.5*W.5=A R.5*W.5=V -.5 .5 3 5 57 9 .5 .5 5 5 59 ;
3 . . . .
4 A*V=W A-1*V=R 1 1 6 6 69 E -1 1 2 6 65 A
5 A-1*W=V A-2*W=R -1 1 2 6 65 A -2 1 0 6 63 ?
6 V-1*W=A V2*W-1=R -1 1 2 6 65 A 2 -1 8 2 35 #
取消测试程序
f=->s{
a,b,c,d=s.split.map{|z|[z[-1],z.to_f]}. #split the input into an array [[symbol1,value1],[symbol2,value2]]
sort.flatten #sort alphabetically by symbol and flatten to assign the 4 objects to different variables
n=(a+c+?!).sum%10 #sum the ascii codes of the symbols (plus that of ! for good value distribution) and take mod 10. gives a number 0..6 (3 is not used)
%w{EA9.EAAVAA.WVA GS;.A?#WWV.RRR}. #for each of the outputs, there is a 14 character string. 1st 7 characters encode powers, 2nd 7 characters are output symbol
map{|w| #iterate through the 2 outputs
m=w[n].ord #select one character according to value of n and convert to a number encoding the powers to raise the two inputs to
print (b**(m%9-4)*d**(m/9-5))**0.5,w[n+7],' '#decode the powers, evaluate the expression and output, append the unit symbol and a space
}
}
f["6W 3A"]
puts
f["12V 120R"]
puts
f["10A 10V"]
puts
f["8R 1800W"]
puts
f["6W 2V"]
puts
f["2A 3R"]
puts
输出量
2.0V 0.6666666666666666R
0.1A 1.2W
100.0W 1.0R
15.0A 120.0V
3.0A 0.6666666666666666R
6.0V 12.0W