Températures non moyennes!

21

Une discussion a eu lieu au TNB une fois sur la meilleure échelle de température, et nous nous sommes mis d'accord sur quelque chose: Prenez la moyenne des quatre échelles de température principales! C'est-à-dire, Celsius , Kelvin , Fahrenheit et Rankine (Désolé Réaumur).

Donc, maintenant le problème est que la plupart des gens n'utilisent pas ce système. Donc, j'ai besoin d'un programme pour revenir à cette moyenne!

Défi

Étant donné la moyenne des représentations Celsius, Fahrenheit, Kelvin et Rankine d'une certaine température, produire les représentations standard individuelles, dans n'importe quel ordre prédéfini et cohérent. Il s'avère que cela est possible, sur la base de mes calculs de tableau blanc. L'entrée sera une seule valeur à virgule flottante dans la plage que votre langue peut gérer, et la sortie sera quatre valeurs à virgule flottante dans n'importe quel format raisonnable. Vous pouvez restreindre l'entrée pour forcer la sortie à se situer dans la plage de votre langue, mais vous devez pouvoir prendre en charge jusqu'à Absolute Zero (ainsi, vous devez pouvoir gérer les nombres négatifs).

Cas de test

input -> (Celsius, Fahrenheit, Kelvin, Rankine)
100 -> (-70.86071428571424, -95.54928571428565, 202.28928571428574, 364.12071428571437)
20 -> (-128.0035714285714, -198.4064285714286, 145.14642857142857, 261.2635714285714)
-10 -> (-149.43214285714282, -236.97785714285715, 123.71785714285716, 222.69214285714287)
10000 -> (7000.567857142858, 12633.022142857144, 7273.717857142858, 13092.692142857144)

Ces valeurs ont été générées avec le programme Python d' Uriel , et j'ai vérifié qu'elles étaient correctes.

HyperNeutrino
la source
2
en relation
Leaky Nun
Je pense que les trois premiers cas de test sont gâchés d'une manière ou d'une autre, les nombres Fahrenheit et Kelvin ont la même partie décimale, et vice versa.
ETHproductions
Aussi pour le dernier cas de test, je reçois 13092....Rankines au lieu de13091...
Business Cat
7
-11,99 Kelvin?!
Jonathan Allan
2
Il n'y a rien de fondamentalement mauvais avec les températures négatives de Kelvin dans l'hypothèse. Ils sont juste infiniment plus chauds que les températures normales . (Remarque: je ne suis pas physicien, je regarde juste des vidéos Youtube toute la journée et je fais semblant d'en être une sur Internet).
Draco18s

Réponses:

4

Pyth , 40 37 36 octets

-BJ + c36641 280c * 5Q7 273.15-B * J1.8 459.67 
-BJc + 916.025 * 5Q7 273.15-B * J1.8 459.67
-BJc + 916.025 * 5Q7 273.15-B * 1.8J459.67

Essayez-le en ligne!

Spécifications

  • Contribution: 100
  • Sortie: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Math

kelvin = (average*5+916.025)/7
Leaky Nun
la source
10

JavaScript (ES6), 49 octets

f=
a=>[a=(a-199.205)/1.4,a+=273.15,a*=1.8,a-=459.67]
<input oninput=f(this.value).map(function(x,i){o.rows[i].cells[1].textContent=x})>
<table id=o>
<tr><th>Celsius:</th><td></td></tr>
<tr><th>Kelvin:</th><td></td></tr>
<tr><th>Rankine:</th><td></td></tr>
<tr><th>Fahrenheit:</th><td></td></tr>
</table>

Neil
la source
Vous avez mal orthographié Celsius dans votre extrait :)
numbermaniac
2
@numbermaniac Bah, et après tous les ennuis, je suis aussi allé vérifier l'orthographe de Fahrenheit ...
Neil
10

Python, 63 octets

def f(a):x=(a+183.205)*5/7;m=x*9/5;return x-273.15,m-459.67,x,m

a est la moyenne, renvoie un tuple des résultats comme (celsius, fahrenheit, kelvin, rankine)

Mathématiques impliquées:

kelvin = x
celsius = x - 273.15
fahrenheit = x * 9/5 - 459.67
rankine = x * 9/5

a = (x + x - 273.15 + x * 9/5 - 459.67 + x * 9/5) / 4 = x * 7/5 - 183.205
x = (a + 183.205) * 5/7
Uriel
la source
3

Dyalog APL, 46 40 octets

6 octets enregistrés grâce à @ Adám

273.15 459.67 0 0-⍨4⍴63 35÷⍨45×183.205+⊢

Essayez-le en ligne!

Monade anonyme, utilise le jeu de caractères Dyalog Classic.

Uriel
la source
Non, il utilise le jeu de caractères Dyalog Classic, car cela ne fonctionnera que sur Dyalog APL.
Adám
@ Adám merci! si je peux seulement demander, pourquoi cela ne fonctionnerait-il pas sur d'autres APL?
Uriel
Parce que Dyalog possède à la fois {dfns}, et le codage sur un seul octet. GNU APL a des dfns, mais utilise UTF-8 et n'en a pas , tandis qu'APL2 (qui était la page de code à laquelle vous avez lié) n'a ni dfns ni .
Adám
Maintenant que vous utilisez un train tacite, il s'agit certainement de Dyalog APL, car il est unique à Dyalog APL (et J).
2017 à 10h37
2

PHP, 62 octets

Commandez Kelvin, Celsius, Rankine, Fahrenheit

print_r([$t=($argn+183.205)/1.4,$t-273.15,$t*=1.8,$t-459.67]);

Version en ligne

PHP, 64 octets

Commandez Kelvin, Rankine, Fahrenheit, Celsius

print_r([$k=($argn+183.205)/1.4,$r=1.8*$k,$r-459.67,$k-273.15]);

Version en ligne

Jörg Hülsermann
la source
2

dc, 37 38 octets

[Edit 1: Ajout du troisième formulaire, selon le commentaire de Neil]

Ces [deux premiers] sont tous les deux de la même longueur :( Le premier produit Fahrenheit, Celsius, Kelvin, Rankine (de haut en bas sur la pile), et le second produit Fahrenheit, Rankine, Celsius, Kelvin.

9k?183.205+1.4/d1.8*rd273.15-d1.8*32+f
9k?183.205+1.4/d273.15-rd1.8*d459.67-f
9k?199.205-1.4/d273.15+d1.8*d459.67-f

Exemples de sorties ( dcutilise _ pour signaler des nombres négatifs en entrée): [à partir des deux premières formes; voir la modification ci-dessous pour le troisième formulaire.]

20
-198.406428572
-128.003571429
145.146428571
261.263571427

20
-198.406428573
261.263571427
145.146428571
-128.003571429

_10
-236.977857144
-149.432142858
123.717857142
222.692142855

_10
-236.977857145
222.692142855
123.717857142
-149.432142858

Comment ça marche

9k?183.205+1.4/d1.8*rd273.15-d1.8*32+f

9kdéfinit l'arithmétique à 9 positions.
?lit l'entrée de stdin, la laissant en haut de la pile (TOS).
183.205+ajoute 183,205 à TOS
1.4/divise TOS par 1,4 ou 7/5, donnant des degrés Kelvin.
dduplique TOS. (C'est-à-dire, double les degrés Kelvin)
1.8*rcalcule Rankine à partir de Kelvin, puis inverse les deux premiers de la pile.
d273.15-duplique TOS et soustrait 273.15 pour obtenir des degrés Celsius.
d1.8*32+duplique TOS, multiplie par 9/5 et ajoute 32 pour Fahrenheit.
fimprime le contenu de la pile.


Édition 1, suite:

9k?199.205-1.4/d273.15+d1.8*d459.67-f

Cette forme, suggérée par Neil, commence par calculer Celsius au lieu de Kelvin. Cela enregistre une rotation (an r) lors du calcul de Rankin à partir de Kelvin.

Il calcule Celsius = (Moyenne - 199,205) * 5/7 via 199.205-1.4/, ajoute 273,15 pour obtenir Kelvin, multiplie par 1,8 pour obtenir Rankin et soustrait 459,67 pour obtenir Fahrenheit. Par exemple:

20
-198.406428571
261.263571429
145.146428572
-128.003571428
James Waldby - jwpat7
la source
9k?199.205-1.4/d273.15+d1.8*d459.67-fenregistre 1 octet en modifiant l'ordre de sortie.
Neil
@Neil, merci! Modifié en réponse.
James Waldby - jwpat7
1

CJam , 38 octets

rd5*916.025+7/_p_273.15-p1.8*_p459.67-

Kelvins = (5*input+916.025)/7

Sorties en tant que

Kelvin
Celsius
Rankine
Fahrenheit

Essayez-le en ligne!

Chat d'affaires
la source
0

Python 3, 67 octets

c=(5*float(input())-996.025)/7;t=[c,c*1.8+32,c+273.15,c*1.8+491.67]

Ce code fait de l'algèbre pour obtenir la température en Celcius, puis je la convertis dans les autres unités de température. Les températures sont enregistrées dans la liste t.

Dat
la source
0

Whispers v2 , 168 octets

> Input
> 5
> 7
> 183.205
>> 2÷3
>> 1+4
>> 6⋅5
>> 7-11
>> 7⋅12
>> 9-13
> 273.15
> 1.8
> 459.67
>> Output 7
>> Output 8
>> Output 9
>> Output 10
>> Then 14 15 16 17

Essayez-le en ligne!

Sorties en tant que Kelvin\nCelsius\nRankine\nFahrenheit


la source