¡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.



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

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>


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

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.


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


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

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


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.