Prawo Ohma mówi nam, że prąd (I) w amperach przepływający przez rezystancję (R) w Ohmach, gdy przyłożone jest do niego napięcie (V), podaje się w następujący sposób:
V = I / R
Podobnie moc (P) w watach rozproszonych przez ten opór jest dana przez:
P = V * I
Przez przegrupowanie i podstawienie można uzyskać wzory do obliczania dwóch z tych wielkości, jeśli podana jest dowolna z dwóch pozostałych. Te formuły są podsumowane w następujący sposób (zwróć uwagę, że ten obraz używa E
zamiast V
woltów):
Biorąc pod uwagę dowolne dwie z tych wielkości w ciągu, wypisz pozostałe dwie.
- Wprowadzane liczby będą dziesiętne w dowolnym formacie odpowiednim dla Twojego języka. Dokładność powinna wynosić co najmniej 3 miejsca po przecinku. ( IEEE 754-2008 binary32 floats są wystarczające.)
- Każdy numer wejściowy będzie opatrzony przyrostkiem o jednostkę. Będzie to jedno z wartości
V A W R
napięcia, natężenia, mocy i rezystancji (lub równoważne małe litery). Dodatkowo możesz użyćΩ
zamiastR
. Jednostki nie będą miały żadnych prefiksów dziesiętnych (kilo, mili- itp.). - Dwie wielkości wejściowe zostaną podane w dowolnej kolejności w jednym ciągu, oddzielone pojedynczym odstępem.
- Ilości wejściowe zawsze będą liczbami rzeczywistymi większymi niż 0.
- Dane wyjściowe będą miały ten sam format co dane wejściowe.
- Wbudowane funkcje rozwiązywania równań są niedozwolone.
Przykładowe dane wejściowe
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Odpowiednie wyniki
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Należy zauważyć, że rozwiązaniem tego wyzwania będą skutecznie odwrotności. Innymi słowy, jeśli zastosujesz rozwiązanie do danych wejściowych A B
i uzyskasz dane wyjściowe C D
, a następnie zastosujesz rozwiązanie do danych wejściowych C D
, wówczas dane wyjściowe powinny być A B
ponownie, choć być może nie w porządku i zaburzone z powodu zaokrąglania FP. Zatem wejścia i wyjścia testowe mogą być używane zamiennie.
źródło
Odpowiedzi:
Ruby 171 bajtów
Wprowadź jako argument funkcji. Wyjście na standardowe wyjście ze spacją (w razie potrzeby można je zmienić).
Wyjaśnienie
Wszystkie formuły można wyrazić w postaci, w
b**x*d**y
której b i d to dwie wartości wejściowe, a x i y to potęgi. Ze względów golfowych wyrażenie to(b**x*d**y)**0.5
było ostatecznie preferowane, ponieważ oznacza, że xiy stają się liczbami całkowitymi z zakresu od -4 do 4.Poniższa tabela pokazuje wymagane wyrażenia (dane wejściowe są posortowane alfabetycznie) i zakodowane wartości mocy. Gdzie xiy są podwojonymi mocami, są one kodowane jako
(x+4)+(y+4)*9+9
lub równoważnie(x+4)+(y+5)*9
. To umieszcza wszystkie kodowania w zakresie ASCII do wydruku. Operatory mocy zostały pominięte w formułach dotyczących zwięzłości.n
jest rodzajem sumy kontrolnej wykonanej z symboli jednostki wejściowej; może przyjmować wartości 0,1,2,4,5,6 (3 nie jest używane.)Niegolfowany w programie testowym
Wydajność
źródło
Python 3,
329347343339326305267251249245237 bajtówTo jest bardzo rozdęte. Na pewno jest jeszcze wiele do gry w golfa.
Edycja:
Tymczasowo naprawiono wyjście. Z jakiegoś powodureturn' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
odmawia poprawnego działania.Edycja: Upuszczono
eval
.Ta funkcja teraz pożycza części odpowiedź na poziom rzeki st . Zmieniłem
ops
słownik, najpierw na słownik zmodyfikowanych wykładnikówexponent*2+4
dlab**((p-4)/2) * d**((q-4)/2)
, aby każdyp
iq
był liczbą jednocyfrową. Na przykład,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
a wynik będzie66
w słowniku.Następnie zamieniłem słownik na ciąg znaków
z
z tymi zmodyfikowanymi wykładnikami i jednostkami, które są potrzebne w linii i w określonej kolejności. Po pierwsze, wartość ASCII każdego znaku wARVW
mod 10 wynosi5, 2, 6, 7
. Kiedy dowolne dwie z tych wartości zostaną dodane, dają unikalny numer mod 10. Zatem każdej dwuznakowej kombinacji można nadać unikalny numer(ord(x[0]) + ord(y[10] + 3) % 10
, podającAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(bardzo podobny do sumy kontrolnej Lever River St). Ułożenie zmodyfikowanych wykładników w tej kolejności, tzn.[AR] [RV] [RW] [blank] [AV] [AW] [VW]
Umożliwiaz
efektywny dostęp (pod względem bajtów).Edycja: Odczytanie listy golfowej pod
return
. Gra w golfa w definicjim
.Kod:
Nie golfowany:
źródło
Python 3,
193187 bajtówWypróbuj online
Konwertuje dane wejściowe formularza
<value> <unit> <value> <unit>
na instrukcje przypisania. Następnie użyjeval
każdej formuły,try/except
ignorując błędy tych, dla których zmienne nie zostały przypisane.źródło