Temperature non medie!


21

C'è stata una discussione in TNB una volta sulla migliore scala di temperatura, e abbiamo concordato qualcosa: prendere la media di tutte e quattro le principali scale di temperatura! Cioè Celsius , Kelvin , Fahrenheit e Rankine (Sorry Réaumur).

Quindi, ora il problema è che molte persone non usano questo sistema. Quindi, ho bisogno di un programma per riconvertire da questa media!

Sfida

Data la media delle rappresentazioni Celsius, Fahrenheit, Kelvin e Rankine di una certa temperatura, emette le singole rappresentazioni standard, in qualsiasi ordine prespecificato e coerente. Si scopre che questo è possibile, in base ai calcoli della mia lavagna. L'input sarà un singolo valore in virgola mobile in qualsiasi intervallo gestibile dalla tua lingua e l'output sarà quattro valori in virgola mobile in qualsiasi formato ragionevole. Puoi limitare l'input per forzare l'output nell'intervallo della tua lingua, ma devi essere in grado di supportare fino a Zero assoluto (quindi, devi essere in grado di gestire numeri negativi).

Casi 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)

Questi valori sono stati generati con il programma Python di Uriel e ho verificato che erano corretti.



Penso che i primi tre casi di test siano incasinati in qualche modo, i numeri Fahrenheit e Kelvin hanno la stessa parte decimale e viceversa.
ETHproductions

Anche per l'ultimo caso di test ricevo 13092....Rankines invece di13091...
Business Cat

7
-11,99 Kelvin ?!
Jonathan Allan,

2
Non c'è nulla di intrinsecamente sbagliato con temperature Kelvin negative nell'ipotetico. Sono semplicemente più caldi delle temperature normali . (Nota: non sono un fisico, guardo video di Youtube tutto il giorno e faccio finta di essere uno su Internet).
Draco18s

Risposte:


4

Pyth , 40 37 36 byte

-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

Provalo online!

Specifiche

  • Ingresso: 100
  • Produzione: [Kelvin, Celcius]\n[Rankine, Fahrenheit]

Matematica

kelvin = (average*5+916.025)/7

10

JavaScript (ES6), 49 byte

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>


Hai scritto Celsius sbagliato nel tuo frammento :)
numbermaniac

2
@numbermaniac Bah, e dopo tutto il disturbo sono andato a ricontrollare anche l'ortografia di Fahrenheit ...
Neil

10

Python, 63 byte

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

a è la media, restituisce una tupla dei risultati come (celsius, fahrenheit, kelvin, rankine)

Matematica coinvolta:

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 byte

6 byte salvati grazie a @ Adám

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

Provalo online!

Monade anonima, utilizza il set di caratteri Dyalog Classic.


No, utilizza il set di caratteri Dyalog Classic, poiché funzionerà solo su Dyalog APL.
Adám,


@Adám grazie! se posso solo chiedere, perché questo non dovrebbe funzionare su altri APL?
Uriel,

Perché solo Dyalog ha sia {dfns}, e la codifica a singolo byte. GNU APL ha dfns, ma usa UTF-8 e no , mentre APL2 (che era la tabella codici a cui ti sei collegato) non ha né dfns né .
Adám,

Ora che stai usando un treno tacito, è sicuramente Dyalog APL, in quanto questo è unico per Dyalog APL (e J).
Adám,

2

PHP, 62 byte

Ordina Kelvin, Celsius, Rankine, Fahrenheit

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

Versione online

PHP, 64 byte

Ordina Kelvin, Rankine, Fahrenheit, Celsius

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

Versione online


2

dc, 37 38 byte

[Modifica 1: aggiunto il terzo modulo, per il commento di Neil]

Questi [primi due] hanno entrambi la stessa lunghezza :( Il primo produce Fahrenheit, Celsius, Kelvin, Rankine (dall'alto verso il basso nella pila), e il secondo 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

Esempi di output ( dcusa _ per segnalare numeri negativi in ​​input): [dalle prime due forme; vedi modifica sotto per il terzo modulo.]

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

Come funziona

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

9kimposta l'aritmetica a 9 posizioni.
?legge l'input dallo stdin, lasciandolo in cima allo stack (TOS).
183.205+aggiunge 183.205 a TOS
1.4/divide TOS per 1.4 o 7/5, dando gradi Kelvin.
dduplicati TOS. (Cioè, gradi duplicati Kelvin)
1.8*rcalcola Rankine da Kelvin, quindi inverte i primi due dello stack.
d273.15-duplica TOS e sottrae 273.15 per ottenere gradi Celsius.
d1.8*32+duplica TOS, moltiplica per 9/5 e aggiunge 32, per Fahrenheit.
fstampa il contenuto dello stack.


Modifica 1, continua:

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

Questo modulo, suggerito da Neil, inizia calcolando Celsius invece di Kelvin. Ciò consente di risparmiare una rotazione (an r) durante il calcolo di Rankin da Kelvin.

Calcola Celsius = (Average - 199.205) * 5/7 via 199.205-1.4/, aggiunge 273.15 per ottenere Kelvin, si moltiplica per 1.8 per ottenere Rankin e sottrae 459.67 per ottenere Fahrenheit. Per esempio:

20
-198.406428571
261.263571429
145.146428572
-128.003571428

9k?199.205-1.4/d273.15+d1.8*d459.67-fsalva 1 byte modificando l'ordine di uscita.
Neil,

@Neil, grazie! Modificato in risposta.
James Waldby - jwpat7,


0

Python 3, 67 byte

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

Questo codice fa un po 'di algebra per ottenere la temperatura in Celcius, quindi la converto nelle altre unità di temperatura. Le temperature sono memorizzate nell'elenco t.


0

Sussurri v2 , 168 byte

> 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

Provalo online!

Uscite come Kelvin\nCelsius\nRankine\nFahrenheit

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.