¡Temperaturas no medias!

21

Hubo una discusión en TNB una vez sobre la mejor escala de temperatura, y acordamos algo: ¡Tome el promedio de las cuatro escalas de temperatura principales! Es decir, Celsius , Kelvin , Fahrenheit y Rankine (lo siento, Réaumur).

Entonces, ahora el problema es que la mayoría de las personas no usan este sistema. Por lo tanto, necesito un programa para volver a convertir de este promedio.

Reto

Dado el promedio de las representaciones Celsius, Fahrenheit, Kelvin y Rankine de una temperatura determinada, genera las representaciones estándar individuales, en cualquier orden predefinido y consistente. Resulta que esto es posible, basado en mis cálculos de pizarra. La entrada será un único valor de punto flotante en cualquier rango que pueda manejar su idioma, y ​​la salida será cuatro valores de punto flotante en cualquier formato razonable. Puede restringir la entrada para forzar que la salida esté en el rango de su idioma, pero debe poder admitir hasta el Cero absoluto (por lo tanto, debe ser capaz de manejar números negativos).

Casos de prueba

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)

Estos valores se generaron con el programa Python de Uriel , y verifiqué que eran correctos.

Hiperneutrino
fuente
2
relacionado
Leaky Nun
Creo que los primeros tres casos de prueba están desordenados de alguna manera, los números Fahrenheit y Kelvin tienen la misma parte decimal, y viceversa.
ETHproductions
También para el último caso de prueba obtengo 13092....Rankines en lugar de13091...
Business Cat
77
-11,99 Kelvin ?!
Jonathan Allan
2
No hay nada intrínsecamente malo con temperaturas Kelvin negativas en lo hipotético. Simplemente son infinitamente más calientes que las temperaturas normales . (Nota: no soy físico, solo veo videos de Youtube todo el día y finjo ser uno en Internet).
Draco18s

Respuestas:

4

Pyth , 40 37 36 bytes

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

Pruébalo en línea!

Especificaciones

  • Entrada: 100
  • Salida: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Mates

kelvin = (average*5+916.025)/7
Monja permeable
fuente
10

JavaScript (ES6), 49 bytes

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
fuente
Deletreó mal Celsius en su fragmento :)
numbermaniac
2
@numbermaniac Bah, y después de todos los problemas, fui a revisar también la ortografía de Fahrenheit ...
Neil
10

Python, 63 bytes

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

a es el promedio, devuelve una tupla de los resultados como (celsius, fahrenheit, kelvin, rankine)

Matemáticas involucradas:

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
fuente
3

Dyalog APL, 46 40 bytes

6 bytes guardados gracias a @ Adám

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

Pruébalo en línea!

Mónada anónima, utiliza el conjunto de caracteres Dyalog Classic.

Uriel
fuente
No, utiliza el conjunto de caracteres Dyalog Classic, ya que esto solo funcionará en Dyalog APL.
Adám
@ Adám gracias! si solo puedo preguntar, ¿por qué esto no funcionaría en otras APL?
Uriel
Debido a que sólo Dyalog tiene tanto {dfns}, y de codificación de un solo byte. GNU APL tiene dfns, pero usa UTF-8 y no tiene , mientras que APL2 (que era la página de códigos a la que enlazó) no tiene ni dfns ni .
Adám
Ahora que está utilizando un tren tácito, definitivamente es Dyalog APL, ya que es exclusivo de Dyalog APL (y J).
Adám
2

PHP, 62 bytes

Orden Kelvin, Celsius, Rankine, Fahrenheit

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

Versión en línea

PHP, 64 bytes

Orden Kelvin, Rankine, Fahrenheit, Celsius

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

Versión en línea

Jörg Hülsermann
fuente
2

cc, 37 38 bytes

[Edición 1: tercera forma agregada, según el comentario de Neil]

Estos [primeros dos] tienen la misma longitud :( El primero produce Fahrenheit, Celsius, Kelvin, Rankine (de arriba a abajo en la pila), y el segundo produce 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

Ejemplo de salidas ( dcusa _ para señalar números negativos en la entrada): [de las dos primeras formas; vea la edición a continuación para el tercer formulario.]

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

Cómo funciona

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

9kestablece aritmética de 9 lugares.
?lee la entrada de stdin, dejándola en la parte superior de la pila (TOS).
183.205+agrega 183.205 a TOS
1.4/divide TOS por 1.4 o 7/5, dando grados Kelvin.
dduplicados TOS. (Es decir, duplica grados Kelvin)
1.8*rcalcula Rankine a partir de Kelvin, luego invierte los dos primeros de la pila.
d273.15-duplica TOS y resta 273.15 para obtener grados Celsius.
d1.8*32+duplica TOS, multiplica por 9/5 y agrega 32, para Fahrenheit.
fImprime el contenido de la pila.


Edición 1, continuación:

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

Esta forma, sugerida por Neil, comienza calculando Celsius en lugar de Kelvin. Esto ahorra una rotación (an r) al calcular Rankin desde Kelvin.

Calcula Celsius = (Promedio - 199.205) * 5/7 vía 199.205-1.4/, agrega 273.15 para obtener Kelvin, se multiplica por 1.8 para obtener Rankin y resta 459.67 para obtener Fahrenheit. Por ejemplo:

20
-198.406428571
261.263571429
145.146428572
-128.003571428
James Waldby - jwpat7
fuente
9k?199.205-1.4/d273.15+d1.8*d459.67-fahorra 1 byte cambiando el orden de salida.
Neil
@Neil, gracias! Editado en respuesta.
James Waldby - jwpat7
1

CJam , 38 bytes

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

Kelvins = (5*input+916.025)/7

Salidas como

Kelvin
Celsius
Rankine
Fahrenheit

Pruébalo en línea!

Gato de negocios
fuente
0

Python 3, 67 bytes

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

Este código hace un poco de álgebra para obtener la temperatura en Celcius, luego la convierto a las otras unidades de temperatura. Las temperaturas se almacenan en la lista t.

Dat
fuente
0

Whispers v2 , 168 bytes

> 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

Pruébalo en línea!

Salidas como Kelvin\nCelsius\nRankine\nFahrenheit


fuente