Volts, Amps, Watts và Ohms: cho hai, tính hai cái còn lại


27

Định luật Ohm cho chúng ta biết rằng dòng điện (I) trong ampe chảy qua điện trở (R) trong Ohms khi điện áp (V) được đặt trên nó được đưa ra như sau:

V = I / R

Tương tự, công suất (P) tính bằng watt bị tiêu tán bởi điện trở đó được cho bởi:

P = V * I

Bằng cách sắp xếp lại và thay thế, các công thức có thể được suy ra để tính hai trong số các đại lượng này khi bất kỳ hai đại lượng nào khác được đưa ra. Các công thức này được tóm tắt như sau (lưu ý hình ảnh này sử dụng Ethay vì Vcho vôn):

Quyền lực tuyệt đối Tham nhũng tuyệt đối!  Kháng chiến là vô ích!

Cho một đầu vào của bất kỳ hai trong số các đại lượng này trong một chuỗi, xuất hai số lượng còn lại.

  • Số đầu vào sẽ là số thập phân ở bất kỳ định dạng nào phù hợp với ngôn ngữ của bạn. Độ chính xác phải đến ít nhất 3 chữ số thập phân. ( Phao nhị phân IEEE 754-2008 là đủ.)
  • Mỗi số đầu vào sẽ được thêm vào một đơn vị. Đây sẽ là một trong những V A W Rđiện áp, cường độ dòng điện, công suất và điện trở (hoặc chữ thường tương đương). Ngoài ra, bạn có thể sử dụng Ωthay vì R. Các đơn vị sẽ không có bất kỳ tiền tố thập phân nào (Kilo-, milli-, v.v.).
  • Hai đại lượng đầu vào sẽ được đưa ra theo bất kỳ thứ tự nào trong một chuỗi, cách nhau bởi một khoảng trắng.
  • Số lượng đầu vào sẽ luôn là số thực lớn hơn 0.
  • Đầu ra sẽ có cùng định dạng với đầu vào.
  • Nội dung giải phương trình không được phép.

Ví dụ đầu vào

1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V

Đầu ra tương ứng

1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R

Cần lưu ý rằng các giải pháp cho thách thức này sẽ có hiệu quả là tự đảo ngược. Nói cách khác, nếu bạn áp dụng một giải pháp cho đầu vào A Bvà nhận đầu ra C D, sau đó áp dụng một giải pháp cho đầu vào C D, thì đầu ra sẽ A Blại, mặc dù có thể bị lỗi và bị nhiễu do làm tròn FP. Vì vậy, kiểm tra đầu vào và đầu ra có thể được sử dụng thay thế cho nhau.


Chúng ta có thể xuất cả 4 giá trị không?
Máy

@CatsAreFluffy Không - đầu vào và đầu ra sẽ luôn luôn chính xác là 2 giá trị.
Chấn thương kỹ thuật số

12
Đây thực sự có thể là tiêu đề mô tả ngay lập tức nhất mà tôi từng thấy cho một thách thức.
Alex A.

4
@AlexA. vâng, tôi đã cố gắng nghĩ ra thứ gì đó hấp dẫn và thú vị - điện khí hóa , nếu bạn muốn. Nhưng tôi đã xuất hiện ngắn ngủi - Đội trưởng Rõ ràng đã chiến thắng trong ngày
Chấn thương kỹ thuật số

Câu trả lời:


3

Ruby 171 byte

Đầu vào là đối số hàm. Xuất ra thiết bị xuất chuẩn với dấu cách (có thể được sửa đổi nếu cần.)

->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],' '}}

Giải trình

Tất cả các công thức có thể được thể hiện dưới dạng b**x*d**yb & d là hai giá trị đầu vào và x & y là lũy thừa. Vì lý do chơi gôn, biểu thức (b**x*d**y)**0.5cuối cùng được ưa thích vì nó có nghĩa là x và y trở thành số nguyên trong phạm vi -4 đến 4.

Bảng sau đây cho thấy các biểu thức cần thiết (đầu vào được giả định được sắp xếp theo thứ tự abc) và các giá trị được mã hóa cho các quyền hạn. Trong đó x và y là các lũy thừa nhân đôi, chúng được mã hóa theo (x+4)+(y+4)*9+9hoặc tương đương (x+4)+(y+5)*9. Điều này đặt tất cả các mã hóa trong phạm vi ASCII có thể in được. Toán tử công suất được bỏ qua từ các công thức cho ngắn gọn.

nlà một loại tổng kiểm tra được làm từ các ký hiệu đơn vị đầu vào; nó có thể lấy các giá trị 0,1,2,4,5,6 (3 không được sử dụng.)

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 #

Ungolfed trong chương trình thử nghiệm

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

Đầu ra

2.0V 0.6666666666666666R
0.1A 1.2W
100.0W 1.0R
15.0A 120.0V
3.0A 0.6666666666666666R
6.0V 12.0W

2

Python 3, 329 347 343 339 326 305 267 251 249 245 237 byte

Điều này là khá nở rộ. Chắc chắn vẫn còn rất nhiều golf để làm.

Chỉnh sửa: Tạm thời cố định đầu ra. Vì một số lý do, return' '.join(str(eval(z[m][i]))+t[i]for i in range(2))từ chối làm việc đúng cách.

Chỉnh sửa: Đánh rơi eval.

Chức năng này ngay bây giờ vay mượn một phần của câu trả lời Cấp sông St của . Tôi đã thay đổi opstừ điển, lần đầu tiên vào một cuốn từ điển của mũ sửa đổi exponent*2+4cho b**((p-4)/2) * d**((q-4)/2), để mỗi pqsẽ là một số một chữ số. Ví dụ, b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)và kết quả sẽ có 66trong từ điển.

Sau đó, tôi biến từ điển thành một chuỗi zvới các số mũ được sửa đổi đó và các đơn vị cần thiết trong một dòng và theo một thứ tự cụ thể. Đầu tiên, giá trị ASCII của mỗi ký tự trong ARVWmod 10 là 5, 2, 6, 7. Khi bất kỳ hai giá trị nào trong số này được thêm vào, chúng sẽ đưa ra một số mod duy nhất 10. Do đó, mỗi kết hợp hai ký tự có thể được cung cấp một số duy nhất với (ord(x[0]) + ord(y[10] + 3) % 10, cho AR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6(rất giống với tổng kiểm tra của Lever River St). Sắp xếp các số mũ được sửa đổi theo thứ tự này, nghĩa là [AR] [RV] [RW] [blank] [AV] [AW] [VW], cho phép zđược truy cập hiệu quả (tính theo byte).

Chỉnh sửa: Đánh gôn theo danh sách hiểu return. Golf định nghĩa của m.

Mã số:

def e(s):x,y=sorted((i[-1],float(i[:-1]))for i in s.split());m=(ord(x[0])+ord(y[0])+3)%10*6;z="6686VW2628AW3555AV0000002666RW0626RV2682AR";return' '.join(str((x[1]**(int(z[m+i*2])-4)*y[1]**(int(z[m+i*2+1])-4))**.5)+z[m+i+4]for i in(0,1))

Ung dung:

def electric(s):
    x, y = sorted((i[-1],float(i[:-1]))for i in s.split())
    m = (ord(x[0]) + ord(y[0]) + 3) % 10 * 6
    z = "6686VW2628AW3555AV0000002666RW0626RV2682AR"
    h = []
    for i in range(2):
         f = (x[1] ** (int(z[m*6+i*2])-4) * y[1] ** (int(z[m*6+i*2+1])-4)) ** 0.5
         h.append(str(f)+z[m*6+i+4])
    return ' '.join(h)

1

Python 3, 193 187 byte

import re
exec(re.sub('(.+?) (.)',r'\2=\1;',input()))
for s,r in zip('AVRW'*3,'V/R W**.5*R V/A V*V/R W/V W/A V*V/W R*A*A W**.5/R A*R W/A**2 V*A'.split()):
 try:print(eval(r),s,)
 except:0

Dùng thử trực tuyến

Chuyển đổi đầu vào của biểu mẫu <value> <unit> <value> <unit>thành các câu lệnh gán. Sau đó, sử dụng evaltrên mọi công thức, với việc try/exceptbỏ qua các lỗi từ các công thức mà các biến không được chỉ định.


Tôi không cần tín dụng
ăn kiêng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.