La loi d'Ohm nous dit que le courant (I) en ampères traversant une résistance (R) en Ohms lorsqu'une tension (V) est appliquée aux bornes est donné comme suit:
V = I / R
De même, la puissance (P) en watts dissipée par cette résistance est donnée par:
P = V * I
Par réarrangement et substitution, des formules peuvent être dérivées pour calculer deux de ces quantités lorsque l'une des deux autres est donnée. Ces formules sont résumées comme suit (notez que cette image utilise E
au lieu de V
pour les volts):
Étant donné une entrée de deux de ces quantités dans une chaîne, sortez les deux autres.
- Les nombres entrés seront des décimales dans le format approprié à votre langue. La précision doit être d'au moins 3 décimales. (Les flottants binaires32 IEEE 754-2008 sont suffisants.)
- Chaque numéro d'entrée sera suffixé d'une unité. Ce sera l'un de
V A W R
Tension, Ampérage, Puissance et Résistance (ou l'équivalent en minuscules). En outre, vous pouvez utiliser à laΩ
place deR
. Les unités n'auront pas de préfixe décimal (Kilo-, milli-, etc.). - Les deux quantités en entrée seront données dans n'importe quel ordre dans une même chaîne, séparées par un seul espace.
- Les quantités entrées seront toujours des nombres réels supérieurs à 0.
- La sortie sera au même format que l'entrée.
- Les fonctions intégrées de résolution d'équations sont interdites.
Exemples d'entrées
1W 1A
12V 120R
10A 10V
8R 1800W
230V 13A
1.1W 2.333V
Sorties correspondantes
1V 1R
0.1A 1.2W
1R 100W
120V 15A
2990W 17.692R
0.471A 4.948R
Il convient de noter que les solutions à ce défi seront effectivement des auto-inverses. En d'autres termes, si vous appliquez une solution à l'entrée A B
et obtenez la sortie C D
, puis appliquez une solution à l'entrée C D
, la sortie doit être à A B
nouveau, bien que probablement hors service et perturbée en raison de l'arrondi FP. Les entrées et sorties de test peuvent donc être utilisées de manière interchangeable.
la source
Réponses:
Ruby 171 octets
Entrez comme argument de fonction. Sortie vers stdout avec espace de fin (peut être révisée si nécessaire.)
Explication
Toutes les formules peuvent être exprimées sous la forme
b**x*d**y
où b & d sont les deux valeurs d'entrée et x & y sont des puissances. Pour des raisons de golf, l'expression(b**x*d**y)**0.5
a finalement été préférée car elle signifie que x et y deviennent des entiers compris entre -4 et 4.Le tableau suivant montre les expressions requises (les entrées sont supposées triées alphabétiquement) et les valeurs codées pour les puissances. Où x et y sont les puissances doublées, elles sont codées comme
(x+4)+(y+4)*9+9
ou de manière équivalente(x+4)+(y+5)*9
. Cela place tous les encodages dans la plage ASCII imprimable. Les opérateurs de puissance sont omis des formules par souci de concision.n
est une sorte de somme de contrôle faite à partir des symboles d'unité d'entrée; il peut prendre les valeurs 0,1,2,4,5,6 (3 n'est pas utilisé.)Non testé dans le programme de test
Sortie
la source
Python 3,
329347343339326305267251249245237 octetsC'est assez gonflé. Il y a certainement encore beaucoup de golf à faire.
Modifier:
correction temporaire de la sortie. Pour une raison quelconque,return' '.join(str(eval(z[m][i]))+t[i]for i in range(2))
refuse de fonctionner correctement.Edit: abandonné
eval
.Cette fonction emprunte maintenant partie de la réponse de niveau de la rivière St . J'ai changé le
ops
dictionnaire, d'abord en un dictionnaire d'exposants modifiésexponent*2+4
pourb**((p-4)/2) * d**((q-4)/2)
, afin que chacunp
etq
soit un nombre à un chiffre. Par exemple,b*d == b**1*d**1 == b**((6-4)/2)*d**((6-4)/2)
et le résultat serait66
dans le dictionnaire.Ensuite, j'ai transformé le dictionnaire en une chaîne
z
avec ces exposants modifiés et les unités nécessaires dans une ligne et dans un ordre particulier. Tout d'abord, la valeur ASCII de chaque caractère duARVW
mod 10 est5, 2, 6, 7
. Lorsque deux de ces valeurs sont ajoutées, elles donnent un numéro unique mod 10. Ainsi, chaque combinaison de deux caractères peut recevoir un numéro unique avec(ord(x[0]) + ord(y[10] + 3) % 10
, donnantAR: 0, AV: 4, AW: 5, RV: 1, RW: 2, VW: 6
(très similaire à la somme de contrôle de Lever River St). Arranger les exposants modifiés pour qu'ils soient dans cet ordre, c'est-à-dire[AR] [RV] [RW] [blank] [AV] [AW] [VW]
, permetz
un accès efficace (en termes d'octets).Edit: Golfé la compréhension de la liste sous
return
. Golfé la définition dem
.Code:
Non golfé:
la source
Python 3,
193187 octetsEssayez-le en ligne
Convertit l'entrée du formulaire
<value> <unit> <value> <unit>
en instructions d'affectation. Ensuite, utilisezeval
sur chaque formule, entry/except
ignorant les erreurs de celles pour lesquelles les variables n'ont pas été affectées.la source