โวลต์แอมป์วัตต์และโอห์ม: รับสองคำนวณอีกสอง


27

กฎของโอห์มบอกเราว่ากระแส (I) เป็นแอมป์ที่ไหลผ่านความต้านทาน (R) ในโอห์มเมื่อมีการใช้แรงดันไฟฟ้า (V) ข้ามมันจะได้รับดังต่อไปนี้:

V = I / R

ในทำนองเดียวกันพลังงาน (P) เป็นวัตต์ที่กระจายโดยความต้านทานนั้นจะได้รับจาก:

P = V * I

โดยการจัดเรียงใหม่และทดแทนอาจจะได้รับสูตรสำหรับการคำนวณสองของปริมาณเหล่านี้เมื่อใด ๆ ของอีกสองจะได้รับ สูตรเหล่านี้สรุปได้ดังต่อไปนี้ (หมายเหตุรูปภาพนี้ใช้EแทนVvolts):

Absolute Power Corrupts อย่างแน่นอน!  ความต้านทานนั้นไร้ประโยชน์!

ให้อินพุตของปริมาณสองปริมาณใด ๆ เหล่านี้ในสตริงเอาท์พุทอีกสองค่า

  • ตัวเลขที่ป้อนจะเป็นทศนิยมในรูปแบบใดก็ตามที่เหมาะสมกับภาษาของคุณ ความแม่นยำควรมีอย่างน้อย 3 ตำแหน่งทศนิยม ( IEEE 754-2008 binary32 โฟลตนั้นเพียงพอ)
  • แต่ละหมายเลขอินพุตจะถูกต่อท้ายด้วยหน่วย นี่จะเป็นหนึ่งในV A W Rแรงดันไฟฟ้าแอมแปร์พลังงานและความต้านทาน (หรือตัวพิมพ์เล็กที่เทียบเท่า) นอกจากนี้คุณอาจจะใช้แทนΩ Rหน่วยจะไม่มีส่วนนำหน้าทศนิยมใด ๆ (Kilo-, milli- และอื่น ๆ )
  • ทั้งสองปริมาณการป้อนข้อมูลจะได้รับในลำดับใด ๆ ในสตริงหนึ่งคั่นด้วยช่องว่างเดียว
  • ปริมาณที่ป้อนจะเป็นจำนวนจริงมากกว่า 0 เสมอ
  • เอาต์พุตจะอยู่ในรูปแบบเดียวกับอินพุต
  • บิวด์อินแก้สมการไม่ได้รับอนุญาต

อินพุตตัวอย่าง

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

ผลลัพธ์ที่สอดคล้องกัน

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

ควรสังเกตว่าการแก้ปัญหาสำหรับความท้าทายนี้จะเป็นการรุกรานตนเองอย่างมีประสิทธิภาพ กล่าวอีกนัยหนึ่งถ้าคุณใช้วิธีแก้ปัญหากับอินพุตA Bและรับเอาท์พุทC Dจากนั้นใช้วิธีแก้ปัญหากับอินพุตC Dดังนั้นเอาต์พุตควรเป็นA Bอีกครั้ง ดังนั้นอินพุตและเอาต์พุตทดสอบอาจถูกใช้แทนกันได้


เราสามารถส่งออกทั้ง 4 ค่าหรือไม่
CalculatorFeline

@CatsAreFluffy No - ทั้งอินพุตและเอาต์พุตจะเป็น 2 ค่าเสมอ
Digital Trauma

12
นี่อาจเป็นชื่อที่สื่อความหมายได้ทันทีที่สุดที่ฉันเคยเห็นสำหรับการท้าทาย
Alex A.

4
@AlexA ใช่ผมพยายามที่จะคิดว่าบางสิ่งบางอย่างที่จับใจและน่าตื่นเต้น - electrifyingถ้าคุณจะ แต่ฉันมาสั้น - กัปตันชัดเจนวันชนะ
บาดเจ็บดิจิตอล

คำตอบ:


3

Ruby 171 ไบต์

อินพุตเป็นอาร์กิวเมนต์ของฟังก์ชัน เอาต์พุตไปยัง stdout ที่มีพื้นที่ต่อท้าย (สามารถแก้ไขได้ถ้าจำเป็น)

->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 #

Ungolfed ในโปรแกรมทดสอบ

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

2

Python 3, 329 347 343 339 326 305 267 251 249 245 237 ไบต์

นี่มันป่องสวย ยังมีสนามกอล์ฟให้เล่นอีกมาก

แก้ไข: แก้ไขเอาต์พุตชั่วคราว ด้วยเหตุผลบางอย่างreturn' '.join(str(eval(z[m][i]))+t[i]for i in range(2))ปฏิเสธที่จะทำงานอย่างถูกต้อง

แก้ไข:evalลดลง

ฟังก์ชั่นนี้ในขณะนี้ยืมส่วนของคำตอบที่ระดับแม่น้ำเซนต์ของ ฉันเปลี่ยนopsพจนานุกรมก่อนเป็นพจนานุกรมของเลขชี้กำลังที่มีการแก้ไขexponent*2+4เพื่อb**((p-4)/2) * d**((q-4)/2)ให้แต่ละpและqจะเป็นตัวเลขหนึ่งหลัก ตัวอย่างเช่นb*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)และผลลัพธ์จะอยู่66ในพจนานุกรม

จากนั้นฉันเปลี่ยนพจนานุกรมเป็นสตริงzด้วยเลขชี้กำลังที่แก้ไขแล้วและหน่วยที่ต้องการในบรรทัดและตามลำดับเฉพาะ ครั้งแรกค่า ASCII ของตัวละครแต่ละตัวในARVWสมัย 5, 2, 6, 710 เมื่อมีการเพิ่มค่าสองค่านี้พวกเขาจะให้หมายเลข mod ที่ไม่ซ้ำกัน 10 ดังนั้นการรวมกันสองตัวละครแต่ละตัวจะได้รับหมายเลขที่ไม่ซ้ำกับการ(ord(x[0]) + ord(y[10] + 3) % 10ให้AR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6(คล้ายกับการตรวจสอบของ Lever River St) การจัดเรียงเลขชี้กำลังที่ถูกแก้ไขให้อยู่ในลำดับนี้คือ[AR] [RV] [RW] [blank] [AV] [AW] [VW]อนุญาตให้zเข้าถึงได้อย่างมีประสิทธิภาพ (ในรูปของไบต์)

แก้ไข:returnแข็งแรงเล่นกอล์ฟรายการภายใต้ความเข้าใจ mแข็งแรงเล่นกอล์ฟนิยามของ

รหัส:

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))

Ungolfed:

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 bytes

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

ลองออนไลน์

แปลงอินพุตของฟอร์ม<value> <unit> <value> <unit>เป็นคำสั่งการกำหนด จากนั้นใช้evalกับทุกสูตรโดยtry/exceptไม่สนใจข้อผิดพลาดจากสิ่งที่ตัวแปรไม่ได้รับมอบหมาย


ฉันไม่ต้องการสินเชื่อ
หิวโหย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.